在STM32F4(Cortex-M4,无L1缓存)上,DMA双缓冲模式本身不涉及硬件缓存一致性问题,因为CPU和DMA都直接访问SRAM。但需注意编译器优化和写缓冲导致的数据陈旧。正确做法:1)确保DMA缓冲区定义在非缓存区域(默认SRAM即可),并使用volatile修饰;2)在启动DMA前,调用__DSB()(数据同步屏障)确保所有写操作完成;3)在DMA完成中断中,先读取DMA状态寄存器确认传输完成,再调用__DMB()(数据内存屏障)防止重排,最后处理数据;4)切换缓冲区时,需在修改DMA寄存器后加__DSB(),避免DMA读取旧配置。实操建议:使用双缓冲时,建议将缓冲区地址对齐到32字节,并禁用D-Cache(若启用需配置MPU为非缓存)。若使用RTOS,还需考虑任务间同步,用信号量而非裸标志。
mcuku 阿沐 · 2026-08-27