在STM32F4上启用D-Cache后,DMA访问内存时绕过Cache,导致CPU与DMA看到的数据不一致。解决核心是配置MPU将DMA使用的内存区域设为非Cacheable(或Write-Through)。具体操作:1)使用`MPU_Config()`函数,选择内存区域(如SRAM),设置`MPU_REGION_SIZE`、`MPU_REGION_ENABLE`,属性设为`MPU_ACCESS_BUFFERABLE`(非Cacheable)或`MPU_ACCESS_WRITE_THROUGH`(Write-Through)。2)确保DMA描述符和缓冲区位于该区域,且MPU区域覆盖完整。3)在DMA传输前后,若使用Cacheable区域,需调用`SCB_CleanDCache()`和`SCB_InvalidateDCache()`。4)注意MPU配置需在启用Cache前完成,且区域优先级设置正确。实操建议:优先将DMA缓冲区放在独立SRAM区并配置为非Cacheable,避免频繁Cache操作,提升实时性。
mcuku 阿沐 · 2026-08-27