Modbus通信时USART中断导致程序死机的原因
https://www.cnblogs.com/citycomputing/p/6139456.html
多个中断在运行的情况下,如果设置的串口中断的中断优先级比较低,当高优先级的中断执行频率过高的情况下,串口中断内的数据接收处理就会很慢,导致接收速度和处理速度不一致,从而造成ORE(溢出错误中断)。
在RXNE=1 的的条件下(也就是上次数据还没有读走),串口接收寄存器又接收好了一个字节的数据并准备往RDR 寄存器去转移的时候,会由硬件将ORE( 溢出错误)置1。溢出错误发生后就无脑中断,任务就得不到运行,导致死机。
这个ORE位还很特别,使用USART_GetITStatus函数还读取不到,需要使用USART_GetFlagStatus函数。
解决这种溢出中断的方式:
//串口1中断服务函数
void USART1_IRQHandler(void)
{if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)== SET)//程序中断过多,主机的发送速度又快,很容易会造成溢出错误{USART_ClearFlag(USART1, USART_FLAG_ORE); //清除溢出中断USART_ReceiveData(USART1);//必须要读,不然清除不了}if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //接收中断{prvvUARTRxISR(); //调用xMBRTUReceiveFSMUSART_ClearITPendingBit(USART1, USART_IT_RXNE);LED0 = ~LED0;} if (USART_GetITStatus(USART1, USART_IT_TC) == SET) //发送完成后中断,发送完成后,再执行对应函数,这种方式的话需要最开始就要先发送一次数据,这个处理已经在eMBRTUSend函数做了 {prvvUARTTxReadyISR();//中断处理函数xMBRTUTransmitFSMUSART_ClearITPendingBit(USART1, USART_IT_TC);LED1 = ~LED1;}
}
清除ORE位的方法:顺序执行对USART_SR和USART_DR寄存器的读操作。
注意:在此使用USART_ClearITPendingBit(USART1, USART_IT_ORE);清除ORE位是没有任何作用的。
还有ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)
Modbus通信时USART中断导致程序死机的原因相关推荐
- 计算机死机造成桌面数据丢失,导致电脑死机的原因以及数据恢复的方法总结
导致电脑死机的原因以及数据恢复的方法总结 一,前言:电脑在使用的过程中,难免会有意外情况发生.比如是突然断电.意外关机.出现死机等情况,这些情况往往是难以预料以及避免的.而发生这些情况,不仅会对电脑造 ...
- 切换输入法导致程序死机的解决办法
近日在开发类似QQ屏幕截图过程中,发现在输入文字时切换输入法(Ctrl+Shift)时,会导致程序出现"卡死"现象.为了方便代码重用,屏幕截图模块是以动态库方式封装起来的.出现&q ...
- 导致服务器死机的原因集锦
1.[散热不良]显示器.电源和CPU在工作中发热量非常大,因此保持良好的通风状况非常重要,如果显示器过热将会导致色彩.图象失真甚至缩短显示器寿命.工作时间太长也会导致电源或显示器散热不畅而造成电脑死机 ...
- 详解死机的原因和预防方法
详解死机的原因和预防方法 详解死机的原因和预防方法 如今的计算机已经接近全面普及的程度了,它给人们在工作和学习上提供了极大的方便,不过,计算机的"死机"对于普通的计算机用户来说,却 ...
- 服务器一拷贝文件就死机,u盘拷贝文件时导致电脑死机怎么办【解决方法】
使用u盘存储.拷贝文件在我们的日常工作生活中已是很常用的移动存储设备,而随着技术的发展,大容量u盘也随之而来,而使用 u盘拷贝文件导致死机 也是我们会遇到的问题,那么遇到这种 u盘导致电脑死机 的问题 ...
- 单片机程序死机原因查找方法
1. 意外中断.是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象 2. 中断变量处理不妥.若定义某些会在中断中修改的 全局变量 ,这时要注意两个问题:首先为了 ...
- STM32Gx系列进入NMI中断造成芯片死机的解决办法
STM32Gx系列进入NMI中断造成芯片死机的解决办法 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 STM32Gx系列进入NMI中断造成芯片死机的解决办法 前言 一.问 ...
- 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...
随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...
- 电脑死机什么导致,带你一次性了解所有导致电脑死机蓝屏原因!
电脑蓝屏绝对是小白最蛋疼的事,今天修姐就来讲下电脑为什么会出现死机蓝屏! 造成电脑蓝屏的原因很多,但总体来说也就两大类,硬件问题OR软件问题,今天就带你们一次性了解大多数导致电脑死机原因! 由硬件问题 ...
最新文章
- 支付宝服务窗的简单开发体会
- HTML5游戏引擎Playcraft将于近日正式启动
- Swift中文教程(五)控制流
- 函数名的使用、闭包、生成器
- mybatis的trim标签
- 微信聊天小程序——(四、聊天页面)
- 过流媒体取流失败_海康硬盘录像机:监控点取流失败,开始重连.错误代码为iVMS-4200.EXE[302]求大神解决...
- Windows路由表详解与双网卡访问慢问题解决
- xbox 360手柄驱动程序_魔派PRO手柄常见问题解决方法一览
- python数据分析09_pandas数据聚合与分组运算
- 100M宽带能下载多快? 关于带宽的下载速度研究
- python成都 培训
- html中tr中加判断换行符,深入解析HTML的table表格标签与相关的换行问题
- C语言 打印2的n次方
- 点选识别DLL/滑块识别DLL/通用验证码识别DLL/图标点选/本地识别DLL
- 【NOI2011】阿狸的打字机
- golang 将EBCDIC转成ASCII
- 字节流和字符流(详解)
- SODA理事会理事、苏打数据CEO高丰:只有数据流通,数据才能创造价值
- 解释java程序所使用的命令是,【单选题】Java 源程序的解释命令是