STM32串口接收中断溢出问题解决
来源:互联网 发布:linux文件复制粘贴命令 编辑:程序博客网 时间:2024/05/20 09:25
在使用一个串口发数据的传感器过程中,发现程序第一次进入串口中断之后不再执行主函数的内容,中断中的内容也不执行。查询大量资料后发现:串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(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串口接收中断溢出问题解决
- STM32串口中断方式接收
- STM32串口中断方式接收
- STM32 串口接收中断 代码
- STM32串口中断接收和中断发送
- STM32串口中断接收方式详细比较
- stm32的串口空闲中断接收数据
- STM32串口中断接收方式详细比较
- stm32的串口空闲中断接收数据
- STM32串口中断接收方式详细比较
- stm32串口中断接收一帧数据
- STM32串口中断接收方式详细比较
- STM32串口中断接收方式详细比较
- stm32快速学习5——串口中断接收
- STM32串口中断接收一个完整的数据帧
- STM32使用DMA加串口空闲中断接收数据
- 关于STM32串口调试RS485时自动进入接收中断
- stm32 实现串口中断接收浮点型、整型数据
- unicode,ansi,utf-8,unicode big endian编码区别 --篇1
- VUE项目实战
- MySQL查看视图
- [kuangbin带你飞]专题二 搜索进阶 A(康拓展开+bfs)
- QQ小红点终极版 DragPointView
- STM32串口接收中断溢出问题解决
- MySql安装配置
- c++STL内存池和空间配置器
- 哇。。原来这个就是博客啊。。。
- 1、volley 官方教程-简介、配置
- Windows共享内存解析
- hdu 4649 Professor Tian(期望)
- Python3 File(文件) 方法
- 自适应辛普森积分算法