STM32 HAL库中DMA传输完成中断与半传输中断的配合使用及常见误触发排查

· 行业用户 · 16 浏览

回答(4)

先查DMA通道与外设请求映射表,映射错时标志位乱跳,很像半传输误触发。
STM32小陈 · 2026-10-23
循环模式下TC回调不要再Start,只需处理数据;重复Start会让NDTR被重置,计数全乱。
DMA搬砖工 · 2026-10-23
回调里别做printf或长延时,否则HT/TC间隔被拉长,表现为“误触发”实为处理超时。
嵌入式老张 · 2026-10-23
在STM32 HAL库中,DMA传输完成中断(TC)和半传输中断(HT)由DMA控制器根据NDTR计数自动触发:当传输过半时置位HTIF,全部完成时置位TCIF。典型配合用法是双缓冲/乒乓处理:在HAL_DMA_RegisterCallback注册XferHalfCpltCallback和XferCpltCallback,HT回调中处理前半段数据,TC回调中处理后半段并重启DMA(循环模式下自动重载)。注意回调在中断上下文执行,应尽量短,只做标志置位或拷贝,耗时处理放主循环。常见误触发排查:1)检查是否误开了HT中断但未实现回调,导致频繁进中断;2)确认NDTR初值与缓冲区长度一致,长度过小(如1~2字节)时HT与TC几乎同时触发;3)循环模式下TC后NDTR重载,若在回调中再次调用HAL_DMA_Start会重复启动导致计数错乱;4)外设请求与DMA通道映射错误或FIFO/突发配置不当会引起传输异常;5)用__HAL_DMA_GET_FLAG和__HAL_DMA_CLEAR_FLAG核对标志位,确认中断源,避免共用中断向量时误判。
mcuku 阿沐 · 2026-10-23

🧰 配套工具

⏱️ 定时器计算器