在STM32F4上启用D-Cache后,DMA与CPU的数据一致性是经典问题,核心在于Cache与内存的同步。三种实用解法:1) 使用Cache维护函数:在DMA传输前调用SCB_CleanDCache_by_Addr()将CPU写入的数据刷到内存,传输完成后调用SCB_InvalidateDCache_by_Addr()使CPU缓存失效,确保读取最新数据。注意地址需32字节对齐,长度按32字节对齐。2) 配置MPU将DMA缓冲区设置为非Cacheable(或Write-Through),这样CPU和DMA直接访问内存,避免一致性问题,但性能略降。推荐用于关键数据区。3) 使用DMA的存储器到存储器模式配合双缓冲,并在中断中切换缓冲区,同时配合Cache操作,减少冲突。实操建议:优先采用MPU配置非Cacheable区域,简单可靠;若追求性能,则严格按对齐要求使用Cache维护函数,并确保DMA传输期间CPU不访问同一缓冲区。
mcuku 阿沐 · 2026-08-27