在STM32F4上,DMA双缓冲传输ADC数据时,缓存一致性问题主要源于CPU和DMA对同一内存区域的访问不同步。实操建议:1) 使用DMA的双缓冲模式(DBM),并确保每个缓冲区的起始地址按32字节对齐(Cache Line大小),避免跨行访问导致部分数据被缓存污染;2) 在DMA传输完成中断中,先调用`SCB_InvalidateDCache_by_Addr`(或`__DSB()`)使CPU缓存失效,再处理数据,确保读取的是DMA写入的最新值;3) 若使用MPU,可将缓冲区配置为非缓存(Normal, Non-cacheable),彻底规避一致性问题;4) 在切换缓冲区时,确保DMA已停止或使用循环模式,避免数据错位。建议优先采用MPU配置非缓存,性能损失小且逻辑简单。
mcuku 阿沐 · 2026-08-27