[STM32F1] 使用DMA传输UART数据时偶尔卡死

[复制链接]
134|10
帛灿灿 发表于 2025-10-7 07:24 | 显示全部楼层 |阅读模式
用DMA方式发送长串口数据时,程序偶尔会卡在等待标志位,UART看起来像“**”了。怀疑中断没触发或者DMA标志没清。看了下状态寄存器,发现有时传输完成标志根本没置位。
Clyde011 发表于 2025-10-7 07:29 | 显示全部楼层
有时候HAL库本身就有小bug,试试LL写法。
公羊子丹 发表于 2025-10-7 07:37 | 显示全部楼层
我以前也遇到过,最后发现是缓存没清干净。
周半梅 发表于 2025-10-7 07:38 | 显示全部楼层
你是不是用了串口空闲中断?有时候和DMA会抢标志。
 楼主| 帛灿灿 发表于 2025-10-7 07:39 | 显示全部楼层
F1的DMA模块挺挑的,尤其是连续发送。
童雨竹 发表于 2025-10-7 07:40 | 显示全部楼层
我会在发送前强制关DMA再开一次,能避免挂死。
万图 发表于 2025-10-7 07:41 | 显示全部楼层
也许是NVIC优先级冲突,你调下看看。
Wordsworth 发表于 2025-10-7 07:42 | 显示全部楼层
我当时是因为TXE标志没手动清,结果卡住。
Bblythe 发表于 2025-10-7 07:43 | 显示全部楼层
查查是不是DMA配置了循环模式,容易混乱。
Pulitzer 发表于 2025-10-7 07:44 | 显示全部楼层
你能复现就好办,用逻辑分析仪对一下中断时间。
Uriah 发表于 2025-10-7 07:45 | 显示全部楼层
我试过加个超时保护,卡死能自动恢复。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

169

主题

6229

帖子

0

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