STM32的USART中断接收死机问题

2019-08-19 16:38发布

用STM32的串口中断接收数据流时,偶尔会出现死机现象 ,查找原因和资料发现,开启串口中断接收 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE)  时,同时也打开了串口ORE中断。一般大家都是在中断服务程序中判断USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)时来接收数据,这样会在接收大量数据流时,会出现死机现象,就是一直处于串口中断状态。后把串口接收中断服务程序改成如下程序,成功解决死机现象

void USART2_IRQHandler(void)  
{
    if ((USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)||USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
          USART_ClearITPendingBit(USART2, USART_FLAG_ORE);
          USART_ClearITPendingBit(USART2,USART_IT_ORE); //清除中断标志

          buff =USART_ReceiveData(USART2); //读取接收到的数据

         .................
    
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
498650771
1楼-- · 2019-08-19 22:38
mark,,
正点原子
2楼-- · 2019-08-20 04:35
谢谢分享...
spydf
3楼-- · 2019-08-20 09:39
不错,就是串口会丢数据
wjfhsym
4楼-- · 2019-08-20 10:36
大爷给力啊,问题迎刃而解啊。谢谢!
abb200628
5楼-- · 2019-08-20 12:11
 精彩回答 2  元偷偷看……
wdxYHC
6楼-- · 2019-08-20 17:16
USART_ClearITPendingBit函数里貌似没有USART_FLAG_ORE和USART_IT_ORE这两个标志位吧

一周热门 更多>