在STM32F4系列(Cortex-M4,无L1 Cache)中,DMA与CPU共享SRAM,不存在硬件Cache一致性问题。你遇到的随机数据错乱,更可能源于编译器优化或DMA缓冲区未对齐。实操建议:1)将DMA缓冲区定义为volatile,并用__attribute__((aligned(4)))确保4字节对齐,避免DMA突发访问越界;2)若使用DCMI或以太网等外设,需检查DMA描述符和缓冲区的内存属性,确保在CCM RAM(若用)与DMA可达区域间正确映射;3)在DMA传输完成中断中,使用__DSB()指令确保内存访问顺序,再读取数据;4)若你实际用的是带Cache的H7系列,则需在DMA前后调用SCB_CleanDCache和SCB_InvalidateDCache。建议先用逻辑分析仪或打印DMA传输长度和源地址,排除配置错误。
mcuku 阿沐 · 2026-08-27