童雨竹 发表于 2025-10-5 07:15

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

项目里用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寄存器,更稳定。
页: [1]
查看完整版本: 串口DMA发送偶发卡死,HAL_UART_TxCpltCallback不触发