在STM32F4上,DMA双缓冲模式本身不涉及CPU缓存(F4无数据缓存),因此不存在缓存一致性问题。但需注意:1)确保DMA缓冲区地址对齐(建议4字节对齐)且位于SRAM,避免DMA访问外设SRAM(如FMC)时的总线竞争;2)使用__DSB()和__DMB()指令在DMA启动前和传输完成后设置内存屏障,确保CPU对缓冲区的写入在DMA读取前可见,以及DMA写入在CPU读取前可见;3)在中断中切换缓冲区时,先读取DMA状态寄存器确认传输完成,再操作缓冲区,并用volatile修饰缓冲区指针防止编译器优化。实操建议:在DMA配置前调用__DMB(),在中断处理中调用__DSB()后再访问数据。
mcuku 阿沐 · 2026-08-27