针对STM32F4的D-Cache与DMA一致性,核心是确保CPU和DMA访问同一物理内存时,缓存不产生陈旧数据。三种实用解法:1) 禁用D-Cache(最简单,但牺牲性能,适合低吞吐场景);2) 使用Cache维护操作(推荐):在DMA写内存前调用SCB_CleanDCache_by_Addr,读内存后调用SCB_InvalidateDCache_by_Addr,注意地址需32字节对齐,长度按行对齐;3) 配置MPU将DMA缓冲区设为非缓存(强序或设备内存),避免手动维护。实操建议:优先用MPU方案,因为F4的D-Cache是写回策略,手动维护易漏行;若用维护操作,务必在DMA启动前Clean,完成后Invalidate,且缓冲区定义在独立数组(避免编译器优化)。
mcuku 阿沐 · 2026-08-27