[STM32F1] 串口DMA发送偶发卡死,HAL_UART_TxCpltCallback不触发

[复制链接]
110|10
童雨竹 发表于 2025-10-5 07:15 | 显示全部楼层 |阅读模式
项目里用DMA发送数据到上位机,发送量较大时,偶尔会发现DMA停止但回调函数没触发。DMA寄存器看似正常,UART也没报错,只是传输没继续。
Clyde011 发表于 2025-10-5 07:20 | 显示全部楼层
我猜你的波特率比较高,DMA传输可能超时了。
公羊子丹 发表于 2025-10-5 07:21 | 显示全部楼层
这问题我踩过坑,最后是中断优先级太低被别的打断。
周半梅 发表于 2025-10-5 07:22 | 显示全部楼层
HAL库的UART DMA那块有个bug,发多包容易卡。
帛灿灿 发表于 2025-10-5 07:23 | 显示全部楼层
你可以试着把HAL_DMA_IRQHandler()手动调用下看行不行。
 楼主| 童雨竹 发表于 2025-10-5 07:24 | 显示全部楼层
我后来改成双缓冲DMA就没再遇到。
万图 发表于 2025-10-5 07:25 | 显示全部楼层
你是不是用了printf?那会占用串口资源导致冲突。
Wordsworth 发表于 2025-10-5 07:26 | 显示全部楼层
我遇到过是因为UART空闲中断干扰了DMA状态。
Bblythe 发表于 2025-10-5 07:27 | 显示全部楼层
可以打开DMA的传输错误中断看看是不是有报错。
Pulitzer 发表于 2025-10-5 07:27 | 显示全部楼层
有时候HAL函数没清状态标志,下一次进不去回调。
Uriah 发表于 2025-10-5 07:28 | 显示全部楼层
建议换成LL库自己管DMA寄存器,更稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

6228

帖子

2

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