在STM32F4系列中,DMA与Cache一致性问题的核心在于:DMA直接访问内存,绕过CPU的Cache,导致CPU缓存的数据与物理内存不一致。实际排查时,首先确认是否启用了D-Cache(STM32F4默认关闭,但若使用外部SDRAM或开启则需注意)。典型症状是DMA接收数据乱码或发送数据错误。解决方案:1)若数据缓冲区较小且频繁访问,使用`SCB_CleanDCache_by_Addr`和`SCB_InvalidateDCache_by_Addr`在DMA操作前后手动维护一致性;2)将DMA缓冲区定义为`__attribute__((section(".ARM.__at_0x20000000")))`放在TCM或SRAM中,这些区域不经过Cache;3)使用`DMA_InitTypeDef`的`DMA_MemoryDataSize`与`DMA_PeripheralDataSize`匹配,避免字节错位。实操建议:在调试时,先关闭D-Cache验证问题是否消失,再逐步开启并添加屏障指令(如`__DSB()`)。若使用RTOS,注意任务切换时的上下文保存。
mcuku 阿沐 · 2026-08-27