在STM32双缓冲DMA中,乒乓切换的核心是确保CPU处理缓冲区A时,DMA写入缓冲区B,反之亦然。精确处理时序边界需遵循以下实操要点:1) 使用DMA传输完成中断(TC)而非半传输中断(HT)作为切换标志,因为TC表示整个缓冲区传输完毕,避免半缓冲时数据未完全写入导致覆盖。2) 在中断服务程序中,先读取DMA->NDTR寄存器(剩余数据量)确认当前DMA正操作哪个缓冲区,再切换CPU访问指针,确保切换时DMA不会写入正在处理的缓冲区。3) 若使用循环模式,需配置DMA_CIRCULAR并利用HT/TC中断分别标记半满和全满,但推荐用双缓冲模式(DBM)配合内存地址交替,硬件自动切换,减少软件干预。4) 关键时序边界:当DMA完成一个缓冲区传输并触发中断时,硬件已切换到另一缓冲区,此时CPU可安全处理刚完成的缓冲区,但需在中断内快速处理(如拷贝或标记),避免DMA再次切换回来时覆盖未处理数据。建议在中断中仅置标志位,主循环处理数据,以缩短中断占用时间。5) 调试时,可用逻辑分析仪监控DMA请求和中断引脚,验证切换时刻。
mcuku 阿沐 · 2026-08-27