STM32串口使用心得(二)——串口溢出中断(ORE)
来源:互联网 发布:用java做erp系统 编辑:程序博客网 时间:2024/05/17 01:12
关于STM32的串口溢出中断,之前在网上看过两篇博客《STM32串口接收中断溢出问题解决》和《STM32 串口中的硬件BUG,请注意!》,也是从中学习到了串口ERROR的用法。关于串口溢出中断的相关寄存器操作和一些细节,两位博主已经讲得很详细了,在此感谢两位博主的辛勤付出。
接下来主要谈及CubeMX如何配置溢出中断以及本人遇到的一些问题。
首先,要把串口配置成RXNE中断,具体的配置步骤可以参考我的文章《关于CubeMX的串口全双工接收发送锁死的问题》。
然后,使能RXNE中断和ORE中断,main.c中的代码如下:
void main(void){ ... if(HAL_UART_Receive_IT(&huart2,(u8 *)&i,1) != HAL_OK) Error_Handler(); /* 开启接收错误中断 */ __HAL_UART_ENABLE_IT(&huart2, UART_IT_ERR); ...}
接着,在usart.c中加入串口错误中断回调函数的定义:
/* 中断错误处理函数,在此处理overrun错误 */void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart){ uint8_t i = 0; if(__HAL_UART_GET_FLAG(huart,UART_FLAG_ORE) != RESET) { __HAL_UART_CLEAR_OREFLAG(huart); HAL_UART_Receive_IT(huart,(u8 *)&i,1); }}
单纯处理溢出中断的话,这样就可以了;如果想处理其他一些错误,比如帧错误等等,就继续判断标志位;如果想在检测到错误之后做一些处理,也可以写在回调函数里。
最后还想说几点,在之前的程序中,溢出中断也与死机如影随行,如果出现了溢出中断就意味着百分百丢失了数据。而我们能做的处理无非就是清除标志位防止中断反复触发,从而使整个系统能继续运行下去。至于丢失的数据,已经不可能找回来了。
溢出中断只是作为一种防备手段来预防极小概率发生的情况,我当时用了3套串口,其中一个几乎满负荷运行,另一个用于接收GPS数据的低优先级串口使用了溢出中断,最后本来一秒一次的GPS数据在校验之后一分钟才能更新一次,甚至需要更长时间,最后还是不得不使用了串口空闲中断,为此需要为接收GPS数据保留一个1k的ram作缓存区。希望之后能找到更好的处理办法。。。
阅读全文
0 0
- STM32串口使用心得(二)——串口溢出中断(ORE)
- STM32串口使用心得(一)——DMA+空闲中断接收
- STM32串口中断使用
- STM32串口中断使用
- STM32串口接收中断溢出问题解决
- stm32—普通串口(接收查询和中断相结合)
- STM32 串口中断 BUG
- STM32串口发送中断
- stm32 串口中断
- stm32串口中断
- STM32串口中断
- STM32串口中断
- STM32 串口中断总结
- stm32串口学习(二)
- stm32快速学习5——串口中断接收
- STM32—无需中断来实现使用DMA接收串口数据(原创)
- STM32—无需中断来实现使用DMA接收串口数据(原创)
- 【连载】【STM32神舟III号实验例程】串口收发—中断方式(5)
- 运营商宽带网速为什么用bit而不用byte
- 路由器和交换机区别
- 欢迎使用CSDN-markdown编辑器
- 数据库常用命令
- TCP长连接和短连接的区别
- STM32串口使用心得(二)——串口溢出中断(ORE)
- python三大框架请求参数获取
- cxf InInterceptor 获取header参数token
- 递归解决汉罗塔问题到底多么简单
- swiper fixed定位滑动失效解决办法
- [NOIP2017普及组]棋盘
- 热点 | 天猫精灵卖出100万台,中国智能音箱市场将井喷?
- Python3 练习实例1、2 来源:菜鸟教程
- CentOS编译安装apache + php环境