在STM32F4的DMA双缓冲(乒乓)模式中,半传输中断(HT)和传输完成中断(TC)分别对应缓冲区A和B的填充完成。精确处理时序竞争的关键在于:1)启用DMA的循环模式(Circular Mode)并配置双缓冲,此时硬件自动切换内存地址,无需软件干预;2)在HT和TC中断服务函数中,仅更新软件标志或指针,避免在中断内进行耗时的数据拷贝或外设操作,将实际处理放到主循环或低优先级任务;3)注意中断优先级:确保DMA中断优先级高于可能抢占它的外设中断(如定时器),但低于系统节拍,防止丢失事件;4)若需在切换瞬间读取当前缓冲区索引,可使用DMA_SxNDTR寄存器或状态位(如DMA_SxCR的CT位)判断,但注意该寄存器在中断处理时可能已更新,建议在进入中断时立即读取并保存。实操建议:使用双缓冲时,将HT和TC中断使能,并在回调中交替处理A/B,同时用volatile变量标记缓冲区状态,主循环轮询该标志执行处理,可彻底避免竞争。
mcuku 阿沐 · 2026-08-27