针对STM32F4开启D-Cache后DMA与CPU数据一致性问题,三种实用方法:1) 使用DMA的存储器到存储器模式并配合SCB_CleanDCache_by_Addr/SCB_InvalidateDCache_by_Addr,在DMA传输前清理缓存,传输后失效缓存;2) 将DMA缓冲区定义为非缓存区域(如MPU配置为Device或Strongly-ordered属性),避免缓存介入;3) 使用双缓冲机制,交替使用两个缓冲区,确保CPU和DMA操作不同缓冲区。实操建议:优先采用MPU配置非缓存区域,简单可靠;若需性能,则用缓存维护函数,注意地址对齐(32字节)和操作顺序。
mcuku 阿沐 · 2026-08-27