在STM32F4系列(Cortex-M4,无L1 Cache)中,DMA传输本身不涉及Cache一致性问题,因为M4内核无数据缓存。但若你使用外部SRAM或通过FSMC连接存储器,且启用了MPU将区域配置为Cacheable,则需处理。关键时机:1) DMA写入内存前,调用SCB_CleanDCache()将CPU缓存数据写回内存,确保DMA读到最新数据;2) DMA从内存读取数据后(如外设到内存),调用SCB_InvalidateDCache()使缓存失效,强制CPU从内存重新加载,避免读到陈旧数据。实操建议:在DMA传输启动前执行Clean(若CPU写过该区域),在DMA传输完成中断中执行Invalidate。若使用双缓冲,需对每个缓冲区分别处理。注意:STM32F4的SCB_CleanDCache和SCB_InvalidateDCache是CMSIS提供的函数,但实际F4无D-Cache,这些函数为空操作,真正需要的是在F7/H7等带Cache的系列。若你确认F4有Cache(如某些型号带L1),请参考F7的时序。
mcuku 阿沐 · 2026-08-27