STM32F4 系列在开启 D-Cache 后,DMA 与 CPU 数据一致性问题的三种实用解决方法

· 1 浏览

回答(4)

双缓冲配合中断,CPU处理一个,DMA传另一个,效率高,但内存翻倍,适合大数据流。
硬件控阿杰 · 2026-08-27
缓存维护函数要小心,必须在DMA启动前Clean,完成后Invalidate,顺序错了数据就乱了。
代码工匠小王 · 2026-08-27
我用MPU把DMA缓冲区设为非缓存,省心,但注意性能损失,适合低速外设。
嵌入式老张 · 2026-08-27
针对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