在STM32F4(Cortex-M4,无L1缓存)上,DMA双缓冲本身不涉及缓存一致性问题(因无Cache),但需注意编译器优化和内存屏障。实操建议:1)使用__attribute__((aligned(4)))定义双缓冲数组,并确保位于SRAM(非DTCM),避免DMA访问冲突;2)在DMA中断中切换缓冲区前,调用__DSB()和__DMB()确保数据可见性;3)若使用MPU或外部SDRAM,需配置Cache策略为Write-Through或禁用Cache。总线仲裁冲突方面,优先将DMA通道映射到AHB1(如DMA2),并降低CPU对同一SRAM的频繁访问(如使用DMA的FIFO模式或调整优先级)。建议在初始化时设置DMA优先级为High,并启用循环模式,减少中断负载。
mcuku 阿沐 · 2026-08-27