2611|3

47

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

串口空闲中断不能清理问题-已解决 [复制链接]

USART_ClearITPendingBit( UART4, USART_IT_IDLE);

这个用法是错误的! 

 

  • /**
  • * [url=home.php?mod=space&uid=159083]@brief[/url] Clears the USARTx's interrupt pending bits.
  • * @param USARTx: Select the USART or the UART peripheral.
  • * This parameter can be one of the following values:
  • * USART1, USART2, USART3, UART4 or UART5.
  • * @param USART_IT: specifies the interrupt pending bit to clear.
  • * This parameter can be one of the following values:
  • * [url=home.php?mod=space&uid=1238002]@arg[/url] USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
  • * @arg USART_IT_LBD: LIN Break detection interrupt
  • * @arg USART_IT_TC: Transmission complete interrupt.
  • * @arg USART_IT_RXNE: Receive Data register not empty interrupt.
  • *
  • * @note
  • * - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
  • * error) and IDLE (Idle line detected) pending bits are cleared by
  • * software sequence: a read operation to USART_SR register
  • * (USART_GetITStatus()) followed by a read operation to USART_DR register
  • * (USART_ReceiveData()).
  • * - RXNE pending bit can be also cleared by a read to the USART_DR register
  • * (USART_ReceiveData()).
  • * - TC pending bit can be also cleared by software sequence: a read
  • * operation to USART_SR register (USART_GetITStatus()) followed by a write
  • * operation to USART_DR register (USART_SendData()).
  • * - TXE pending bit is cleared only by a write to the USART_DR register
  • * (USART_SendData()).
  • * @retval None
  • */
  • void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)

从一下的库函数注释来开,这个函数可供清除的中断源 只有

 USART_IT_CTS:  CTS change interrupt (not available for UART4 and UART5)
 USART_IT_LBD:  LIN Break detection interrupt
 USART_IT_TC:   Transmission complete interrupt. 
 USART_IT_RXNE: Receive Data register not empty interrupt.

 

而清除PE、FE、NE、ORE、IDLE需要读取 SR 与 DR寄存器

 

以下为正确的串口中断处理

  • void UART4_IRQHandler(void)
  • {
  • u8 res;
  • if(USART_GetITStatus(UART4,USART_IT_RXNE))
  • {
  • res = USART_ReceiveData(UART4);
  • uart4Buff[uart4rs++] = res;
  • if(uart4rs >= sizeof(uart4Buff))
  • uart4rs = 0;
  • }
  • else if(USART_GetITStatus(UART4, USART_IT_IDLE))
  • {
  • res = UART4->SR;
  • res = UART4->DR;
  • }
  • }

积累错误...

 

此帖出自stm32/stm8论坛

最新回复

谢谢分享。   详情 回复 发表于 2021-6-25 11:42

赞赏

1

查看全部赞赏

点赞(1) 关注
 

回复
举报

1930

帖子

3

TA的资源

版主

沙发
 

感谢分享经验!

此帖出自stm32/stm8论坛
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 

谢谢分享。

此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

4
 

谢谢分享。

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表