[STM32F4] STM32F4 使用 HAL 库 UART,发生溢出 (ORE) 后系统卡死

[复制链接]
290|32
今天会画卧蚕吗 发表于 2026-8-10 22:10 | 显示全部楼层
某些STM32F4型号的UART硬件本身有缺陷,连续高速传输时容易触发假性溢出。
没有太阳的晴天 发表于 2026-8-10 22:42 | 显示全部楼层
尝试关闭UART的过采样模式,改为16倍过采样能提高容错率。
ulystronglll 发表于 2026-8-10 16:46 | 显示全部楼层
改用 DMA+IDLE 接收              
香水城 发表于 2026-8-11 10:05 | 显示全部楼层
程序卡死一般来讲,总可以找到卡死位置的。

根据卡死位置顺藤摸瓜,看看是什么原因导致的。
cashrwood 发表于 2026-8-12 18:29 | 显示全部楼层
环形缓冲区设计防止数据溢出?
              
loutin 发表于 2026-8-12 20:55 | 显示全部楼层
单独读DR无法彻底清除ORE位,会导致中断反复触发引发死循环卡死。
亚瑟 发表于 2026-8-13 14:34 | 显示全部楼层
先检查中断优先级,确保UART中断优先级高于其他中断。再确认DMA接收模式是否开启,如果DMA没有正确配置,数据可能无法及时传输,导致溢出。
jimmhu 发表于 2026-8-14 12:51 | 显示全部楼层
部分STM32F4的旧版本芯片存在硬件errata,连续快速读取SR寄存器时可能出现标志位读取延迟,需在两次读操作之间添加1~2个NOP空操作,保证标志位被正确识别清除。
Undshing 发表于 2026-8-14 19:23 | 显示全部楼层
看来你清除ORE标志的逻辑没问题,但要考虑接收缓冲区满了的情况。检查RX缓冲区大小,或者改用DMA接收,避免溢出。
olivem55arlowe 发表于 2026-8-15 11:30 | 显示全部楼层
如果硬件支持,使用RTS/CTS流控可以从源头避免数据溢出
febgxu 发表于 2026-8-15 14:08 | 显示全部楼层
强制读取DR以清除ORE标志              
everyrobin 发表于 2026-8-15 16:39 | 显示全部楼层
若UART1的全局中断优先级设置过高,且溢出中断服务函数中未及时退出,会直接抢占所有其他低优先级中断,导致系统调度完全停滞卡死。
WhisperingTrees 发表于 2026-8-15 18:57 | 显示全部楼层
检查 RX 缓冲区大小,如果太小,会导致数据堆积,HAL 库可能来不及处理,导致 ORE 溢出。同时,确认 DMA 是否配置正确,使用 DMA 可以有效缓解这个问题。
51xlf 发表于 2026-8-15 19:21 | 显示全部楼层
UART中断优先级配置示例代码?
abotomson 发表于 2026-8-15 20:57 | 显示全部楼层
替换为DMA接收或优化中断处理逻辑
pl202 发表于 2026-8-15 22:08 | 显示全部楼层
优先级数值越小,优先级越高;避免所有UART中断优先级相同,导致中断嵌套混乱。
狄克爱老虎油 发表于 2026-8-16 13:27 | 显示全部楼层
先检查中断优先级,确保UART中断优先级高于其他中断。再确认DMA接收设置是否正确,避免数据覆盖。
jtracy3 发表于 2026-8-16 18:09 | 显示全部楼层
UART1的RX引脚如果出现电平抖动、浮空干扰,会持续触发帧错误、溢出错误,反复进入中断导致系统卡死,需确认RX引脚已正确接上拉电阻,电平状态稳定。
macpherson 发表于 2026-8-16 18:55 | 显示全部楼层
ORE处理后是否清除了所有错误标志?硬件信号是否存在干扰导致频繁溢出?
modesty3jonah 发表于 2026-8-17 16:24 | 显示全部楼层
硬件要求先读 SR,再读 DR;你直接读 DR
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部