在STM32F4系列中,DMA双缓冲模式(乒乓切换)的缓存一致性问题主要源于CPU与DMA对同一内存区域的访问竞争。F4内核(Cortex-M4)无L1数据缓存,但若启用MPU或外部SRAM,需注意总线写缓冲。实操建议:1)确保两个缓冲区地址按32字节对齐,并配置MPU为非缓存(若使用外部存储器);2)在DMA传输完成中断中,先读取DMA的NDTR寄存器确认当前缓冲区索引(通过DMA_SxCR的CT位),再切换CPU访问指针,避免访问正在被DMA写入的缓冲区;3)若缓冲区位于内部SRAM,无需显式缓存清理,但需用__DMB()指令确保CPU写操作在切换前完成;4)推荐使用双缓冲的循环模式(Circular+DoubleBuffer),并在中断中仅处理已完成的缓冲区,利用硬件自动切换,减少软件干预。关键:永远不要同时让CPU和DMA访问同一缓冲区,通过状态标志或索引同步。
mcuku 阿沐 · 2026-08-27