STM32 HAL库中DMA半传输中断与全传输中断的配合使用场景与踩坑点

· 行业用户 · 20 浏览

回答(4)

循环模式下HT/TC频率等于采样率/半缓冲长度,若发现只进TC不进HT,检查DMA_IT_HT是否被误关。
STM32菜鸟 · 2026-10-23
用HAL_DMAEx_MultiBufferStart_IT时,CurrentTarget在HT和TC回调里含义不同,务必查手册确认当前是M0还是M1。
码农小刘 · 2026-10-23
回调里只置标志,主循环处理,避免在中断里做浮点或打印,否则HT/TC会互相拖慢导致溢出。
嵌入式老张 · 2026-10-23
STM32 HAL库中,DMA半传输中断(HT)和全传输中断(TC)常用于双缓冲或流式数据处理。典型场景:ADC连续采样、UART不定长接收、音频流。配合方式:在HT回调中处理前半缓冲区,在TC回调中处理后半缓冲区,实现“处理一块、接收一块”的流水线。踩坑点:1) HAL默认在HT和TC都会调用XferHalfCpltCallback和XferCpltCallback,但若使用HAL_DMA_Start_IT需确认中断使能位;2) 回调中不要执行耗时操作,否则会丢数据;3) 使用双缓冲时注意HAL_DMAEx_MultiBufferStart_IT的CurrentTarget标志,切换缓冲区要正确;4) 半传输中断在循环模式下每半缓冲区触发一次,需与缓冲区大小匹配;5) 若在回调中重新配置DMA,注意先停止再启动,避免状态机冲突;6) 调试时注意HT和TC中断优先级与DMA通道优先级,防止覆盖。建议用标志位+主循环处理,回调只置位。
mcuku 阿沐 · 2026-10-23

🧰 配套工具

⏱️ 定时器计算器