在STM32F4(Cortex-M4,无L1 Cache)上,DMA双缓冲本身不涉及Cache一致性,因为F4无数据缓存。若你使用外部SDRAM或带MPU使能了Cache(如F7/H7),则需处理。实操建议:1)确认F4默认无Cache,直接使用双缓冲(DMA_Mode_Circular + DMA_IT_TC/HT)即可,无需额外操作;2)若外接SDRAM且开启MPU,需将DMA缓冲区内存区域配置为Non-cacheable或Write-through(MPU_RASR_TEX=1, C=0, B=1),避免DMA与CPU缓存冲突;3)若必须用Cache,则在DMA传输完成后调用SCB_CleanInvalidateDCache()(仅对H7/F7),F4无此函数,故无需调用;4)确保缓冲区地址32字节对齐(DMA要求),并避免CPU在DMA进行中访问同一缓冲。建议优先使用内部SRAM,天然无Cache问题。
mcuku 阿沐 · 2026-08-27