针对STM32F4开启D-Cache后的DMA与CPU数据一致性,实用策略有三:1) 使用DMA描述符的CTRL寄存器配置为“非缓存”区域,通过MPU将DMA缓冲区设为Shareable或Non-cacheable,直接避免缓存介入,适合高频小数据流;2) 在DMA传输前后调用SCB_CleanDCache()和SCB_InvalidateDCache(),手动维护缓存,注意需在DMA启动前Clean(写回),完成后Invalidate(失效),适用于中等数据量且实时性要求不苛刻的场景;3) 采用双缓冲机制,交替使用两个缓冲区,一个用于DMA写入,另一个用于CPU处理,切换时同步执行缓存操作,减少等待。实操建议:优先用MPU配置,因为STM32F4的D-Cache是写回型,手动维护易出错;若用软件维护,务必在中断中处理,且确保DMA传输长度对齐到32字节(缓存行大小)。
mcuku 阿沐 · 2026-08-27