串口DMA发送偶发卡死,HAL_UART_TxCpltCallback不触发
项目里用DMA发送数据到上位机,发送量较大时,偶尔会发现DMA停止但回调函数没触发。DMA寄存器看似正常,UART也没报错,只是传输没继续。我猜你的波特率比较高,DMA传输可能超时了。 这问题我踩过坑,最后是中断优先级太低被别的打断。 HAL库的UART DMA那块有个bug,发多包容易卡。 你可以试着把HAL_DMA_IRQHandler()手动调用下看行不行。 我后来改成双缓冲DMA就没再遇到。 你是不是用了printf?那会占用串口资源导致冲突。 我遇到过是因为UART空闲中断干扰了DMA状态。 可以打开DMA的传输错误中断看看是不是有报错。 有时候HAL函数没清状态标志,下一次进不去回调。 建议换成LL库自己管DMA寄存器,更稳定。
页:
[1]