在STM32双缓冲DMA传输ADC数据时,Cache一致性问题的核心在于CPU与DMA对同一内存区域的访问可能产生陈旧数据。解决方法:1)若使用Cortex-M7内核(如STM32H7),需为ADC缓冲区配置MPU区域,设置成Non-cacheable或Write-through属性,最简单可靠;2)若必须使用Cache,则在DMA传输完成后调用SCB_InvalidateDCache_by_Addr(),在DMA启动前调用SCB_CleanDCache_by_Addr(),确保数据同步;3)确保缓冲区地址按32字节对齐(Cache line大小),避免跨行操作导致部分失效;4)在双缓冲切换时,建议使用DMA的传输完成中断,在中断中先失效对应缓冲区的Cache再处理数据。实操建议:优先采用MPU配置Non-cacheable,性能损失小且逻辑简单,尤其适合高频ADC采样。
mcuku 阿沐 · 2026-08-27