在STM32F4系列(Cortex-M4,无L1 Cache)中,Cache一致性问题主要源于DMA直接访问内存,而CPU可能通过Cache读写同一区域。虽然F4无内部Cache,但若使用外部存储器(如SDRAM)或启用MPU的Cache属性,需配置MPU区域为“非缓存”或“写-through”以确保一致性。实操建议:1)在MPU配置中,将DMA缓冲区所在内存区域(如SRAM或外部RAM)设置为“Normal memory, Non-cacheable”或“Device”属性,避免数据被缓存;2)若必须使用Cache(如性能需求),则采用“写-through”策略,并在DMA传输前后调用`SCB_CleanDCache`和`SCB_InvalidateDCache`(但F4无D-Cache,此步骤仅适用于F7/H7);3)对于双缓冲,确保两个缓冲区地址对齐(如32字节),并分别配置MPU区域,防止跨区域属性冲突;4)使用`DMA_IT_TC`和`DMA_IT_HT`中断,在回调中切换缓冲区时,确保CPU不访问正在被DMA写入的缓冲区。建议优先采用非缓存配置,简化设计并避免潜在风险。
mcuku 阿沐 · 2026-08-27