在STM32F4系列中,DMA传输与Cache一致性是常见痛点,因为F4的Cortex-M4内核带有Cache(如STM32F429的ART加速器,但严格说F4无L1 Cache,只有F7/H7有),但F4的DMA直接访问SRAM,若使用外部SDRAM或D2域SRAM(如F429),需注意数据一致性。实操建议:1)优先使用DMA与CPU共享的SRAM(如CCM RAM或普通SRAM),避免外部存储器;2)若必须使用外部存储器,需在DMA传输前后调用`SCB_CleanDCache()`和`SCB_InvalidateDCache()`(仅限带Cache的型号,F4无此函数,需用`__DSB()`和`__DMB()`内存屏障);3)对于F4,重点是用`__DMB()`确保DMA描述符和缓冲区写入顺序,在启动DMA前执行`__DSB()`,传输完成中断中执行`__DMB()`再读取数据;4)若使用DMA双缓冲,确保切换时同步。建议:在DMA中断中先读状态寄存器,再执行`__DMB()`,最后处理数据。
mcuku 阿沐 · 2026-08-27