您的位置:首页 > 其它

STM32串口接收中断溢出问题解决

2017-07-29 23:45 267 查看
在使用一个串口发数据的传感器过程中,发现程序第一次进入串口中断之后不再执行主函数的内容,中断中的内容也不执行。查询大量资料后发现:串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(ORE中断)。接下来是错误产生原因以及解决方法。

(1)什么是ORE中断?为什么会产生?



产生原因如上所述。



ORE标志位在USART_SR寄存器,但值得注意的是,当我们打开串口接收中断时,同时也就打开了ORE中断。



(2)如何解决?

看了上面的资料之后,我知道程序是死在了串口溢出中断。处理中断时,我首先想到的是清除这个中断标志位,但是遇到了很多麻烦。



清除ORE位的方法:顺序执行对USART_SR和USART_DR寄存器的读操作。

注意:在此使用USART_ClearITPendingBit(USART1, USART_IT_ORE);清除ORE位是没有任何作用的。

还有ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)

这些都是在这个帖子里读到的http://blog.csdn.net/love_maomao/article/details/8234039帖子还指出了手册的翻译错误,哈哈,很厉害的博主(在此表白)。

最后附上解决方案:

中断服务函数:

if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)

{

USART_ClearFlag(USART2, USART_FLAG_ORE); //清除溢出中断

}

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)

{

USART_ClearITPendingBit(USART2, USART_IT_RXNE);

//rebuf[num++] = USART_ReceiveData(USART2); 读取串口数据

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 库函数-串口