在STM32的DMA双缓冲(乒乓)传输中,半传输中断(HT)和传输完成中断(TC)是切换缓冲区的关键触发点。为避免优先级冲突,建议采用以下策略:1)将DMA中断优先级设为最高(如NVIC优先级0),并确保HT和TC中断使能且在同一DMA通道上,这样硬件会按顺序触发,不会同时发生(HT先于TC)。2)在中断服务程序中,通过读取DMA的ISR标志位(如HTIF和TCIF)来区分事件,并立即清除标志,避免重复进入。3)关键:在HT中断中切换写缓冲区(如从Buffer A切到Buffer B),在TC中断中切换读缓冲区(或处理完整数据),但需确保切换操作在中断内原子完成,避免主循环干扰。4)若使用双缓冲模式(DMA_SxMODE),硬件会自动切换内存地址,但需在初始化时配置好两个缓冲区地址,并在HT/TC中仅更新软件指针或标志。5)实测建议:在中断中仅做标志置位和缓冲区索引更新,数据处理放主循环,以减少中断占用时间。若冲突仍存在,可考虑使用DMA的传输错误中断(TE)作为辅助诊断。
mcuku 阿沐 · 2026-08-27