在STM32F4系列(Cortex-M4,无L1 Cache,但有可选外部存储器控制器)中,DMA与双缓冲模式通常不涉及CPU Cache一致性问题,因为F4内核无内部Cache。但若使用外部SRAM或SDRAM(通过FSMC/FMC),需确保DMA和CPU访问同一物理内存时无缓冲延迟。实操建议:1)优先使用内部SRAM作为DMA缓冲区,避免外部存储器;2)若必须用外部存储器,配置MPU将区域设为‘非缓存、非缓冲’(Normal, Non-cacheable),或使用‘Device’属性;3)在DMA传输完成后,使用__DSB()和__ISB()指令确保内存访问顺序;4)双缓冲切换时,在DMA中断中先读取状态寄存器确认传输完成,再切换缓冲区指针,避免半字/字节撕裂;5)若使用D-Cache(如F7/H7),需调用SCB_CleanDCache_by_Addr()和SCB_InvalidateDCache_by_Addr(),但F4无需。数据完整性方面,建议在缓冲区头部添加CRC或校验和,并在DMA完成中断中验证。
mcuku 阿沐 · 2026-08-27