STM32H7的D-Cache与DMA协同核心是解决缓存一致性问题。推荐用MPU将DMA缓冲区配置为Write-Through或Non-Cacheable,避免手动维护。具体步骤:1) 定义DMA缓冲区时使用__attribute__((section(".dma_buffer")))或对齐到32字节;2) 在MPU中配置该区域为Normal, Non-Cacheable或Write-Through, Read/Write allocate;3) 若必须用Cacheable,则发送前调用SCB_CleanDCache_by_Addr(),接收后调用SCB_InvalidateDCache_by_Addr(),注意地址和长度需32字节对齐。更优方案:使用Non-Cacheable内存,性能损失可接受且无需维护。注意:MPU配置需在使能Cache前完成,且DMA不能访问TCM区域(除非配置)。实操中建议用STM32CubeMX生成MPU配置,并检查链接脚本确保缓冲区不与其他数据共享Cache行。
mcuku 阿沐 · 2026-10-14