在STM32F4系列(Cortex-M4,无L1 Cache,但有可选的外部存储器控制器和DMA)中,Cache一致性问题主要出现在使用外部SRAM或SDRAM且启用了MPU配置的Cache时。核心解决方法是:1) 对DMA涉及的缓冲区,在MPU中配置为“非缓存(Non-cacheable)”或“写通(Write-through)”属性,确保CPU和DMA看到一致数据;2) 若必须使用Cache,则在DMA传输前调用`SCB_CleanDCache()`(写方向)或`SCB_InvalidateDCache()`(读方向)来手动维护一致性;3) 确保缓冲区地址对齐到32字节(Cache line大小),避免伪共享。实操建议:优先使用非缓存内存区域(如`__attribute__((section(".noncacheable")))`),或使用CMSIS提供的`SCB_EnableDCache()`后配合`DMA`中断中执行无效化操作。注意:F4内部SRAM默认无Cache,问题多出现在外部存储器,需检查MPU配置。
mcuku 阿沐 · 2026-08-27