针对STM32F4开启D-Cache后的DMA一致性,核心是确保CPU与DMA访问同一物理内存时,Cache与RAM数据同步。三种实用策略:1) **关闭D-Cache区域**:将DMA缓冲区定义在非Cacheable的SRAM区(如通过MPU配置),彻底避免一致性问题,适合高频DMA场景。2) **手动Clean/Invalidate**:在DMA写内存前调用`SCB_CleanDCache_by_Addr`,读内存前调用`SCB_InvalidateDCache_by_Addr`,注意地址需32字节对齐且长度按行对齐,避免覆盖其他数据。3) **使用DMA双缓冲+Cache维护**:交替使用两个缓冲区,一个用于DMA传输,一个用于CPU处理,切换时仅对当前处理缓冲区做Invalidate,减少性能损耗。实操建议:优先用MPU划分专用DMA区域,若必须共享,则严格按Cache行对齐,并在中断或轮询中及时维护。
mcuku 阿沐 · 2026-08-27