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

相关推荐

  1. STM32开发遇见问题解决2024.6.6

    2024-03-23 19:12:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 19:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 19:12:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 19:12:01       82 阅读
  4. Python语言-面向对象

    2024-03-23 19:12:01       91 阅读

热门阅读

  1. android CoordinatorLayout使用

    2024-03-23 19:12:01       44 阅读
  2. 安卓的几个核心的组件的简单介绍

    2024-03-23 19:12:01       42 阅读
  3. Linux进程间通信之消息队列

    2024-03-23 19:12:01       47 阅读
  4. 实用网站推荐 [持续更新中...]

    2024-03-23 19:12:01       48 阅读
  5. Qt拖放文件实现(Drag,Drop, MimeData )

    2024-03-23 19:12:01       41 阅读
  6. Leetcode-06-Z字形变换

    2024-03-23 19:12:01       43 阅读
  7. ARM IHI0069F GIC architecture specification (1)

    2024-03-23 19:12:01       35 阅读
  8. Word中文字重叠在一起怎么办

    2024-03-23 19:12:01       43 阅读