在STM32F4上,DMA双缓冲传输ADC数据时,Cache一致性问题主要源于CPU和DMA对同一内存区域的访问不一致。STM32F4的Cortex-M4内核带有Cache(如L1-Cache),但DMA不经过Cache,直接访问SRAM。若CPU通过Cache读写缓冲区,而DMA直接写SRAM,会导致数据不同步。解决方案:1) 配置MPU将ADC缓冲区所在区域设为非Cacheable(或Write-Through),推荐使用TEX=1, C=0, B=0(非缓存)或TEX=0, C=0, B=1(写通)。在初始化时,调用MPU_Config()设置区域属性,并确保缓冲区地址对齐到32字节。2) 若必须使用Cache,则在DMA传输完成后,执行SCB_CleanDCache()(在DMA写之前)和SCB_InvalidateDCache()(在DMA读之后),但双缓冲中建议直接禁用Cache以简化。实操建议:在stm32f4xx_hal_msp.c中配置MPU,使用HAL_MPU_ConfigRegion(),并确保DMA配置为循环模式,双缓冲切换时无需额外操作。测试时,可用逻辑分析仪验证数据连续性。
mcuku 阿沐 · 2026-08-27