当前位置:   article > 正文

记录开发STM32遇到的卡死问题-串口

记录开发STM32遇到的卡死问题-串口

背景:以STM32作为主控,广州大彩显示屏显示,主控实时采集数据,串口波特率115200.设置收发频率为50Hz,即单片机每秒发送50帧数据,每秒接收50帧数据,每帧数据大概14字节。

问题:系统长时间运行反馈自动重启

重现问题:关掉程序看门狗,进入keil debug模式,运行了大概15小时,系统出现了卡死,查看卡死的位置在串口接收中断函数的USART_GetITStatus(USART1, USART_IT_RXNE) != RESET的位置

经过网络查询并且查询数据手册发现,可能会由以下原因导致
1、串口在接收到数据后,RXNE位没有清0,串口又接收到新的数据,导致数据溢出,标志位ORE被置位,产生溢出错误,导致卡死

在这里插入图片描述

解决方法:
1、增加接收标志位清空USART_ClearITPendingBit(USART1,USART_IT_RXNE);
2、增加对ORE标志位的检测
(USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET
并且清空该标志位
USART_ClearFlag(USART1,USART_FLAG_ORE);
舍弃掉部分数据
USART_ReceiveData(USART1);

参考:http://t.csdnimg.cn/VSnh9

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/281141
推荐阅读
相关标签
  

闽ICP备14008679号