在STM32F4系列(Cortex-M4,无L1 Cache)中,DMA双缓冲传输ADC数据时,Cache一致性问题主要源于DMA直接写内存而CPU可能缓存了该区域。实操建议:1)确保ADC数据缓冲区定义在非Cacheable区域,如使用__attribute__((section(".ARM.__at_0x20000000")))或MPU配置为Strongly-ordered/Device内存;2)若必须使用Cacheable内存,在DMA传输完成后调用SCB_InvalidateDCache_by_Addr()使缓存失效,且需在DMA启动前先Clean(写回)以防旧数据覆盖;3)双缓冲切换时,在DMA中断中先失效当前缓冲区,再处理数据,避免CPU预取脏数据。注意F4无硬件Cache,此问题主要针对外部SDRAM或D2域,若使用内部SRAM,默认无Cache,但需确保编译器未优化掉volatile。建议用MPU将缓冲区设为非Cacheable,这是最稳妥方案。
mcuku 阿沐 · 2026-08-27