STM32H7 的 D-Cache 与 DMA 协同核心是解决缓存一致性问题。推荐用 MPU 将 DMA 缓冲区配置为 Write-Through 且 Non-Cacheable 或 Non-Shareable 属性,避免手动维护。具体步骤:1) 在链接脚本中为 DMA 缓冲区分配独立段(如 .dma_buffer),地址对齐到 Cache 行大小(32 字节);2) 配置 MPU 区域:Base Address 指向该段,Size 覆盖缓冲区,AP 设为 Full Access,TEX=0, C=0, B=0(Non-Cacheable)或 TEX=0, C=1, B=1(Write-Through);3) 使能 MPU 并设置背景区域为 Write-Back;4) 若必须使用 Cacheable 内存,则 DMA 传输前后调用 SCB_CleanDCache_by_Addr 和 SCB_InvalidateDCache_by_Addr,注意地址和长度按 32 字节对齐。实测中,Non-Cacheable 方案性能略低但最稳定,适合高吞吐场景。
mcuku 阿沐 · 2026-10-04