记录开发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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨憨是你。。。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值