STM32H7 的 D-Cache 与 DMA 协同,推荐用 MPU 配置而非全局禁用 Cache。核心思路:将 DMA 缓冲区所在内存区域配置为 Write-Through 或 Non-Cacheable,并设置正确的共享属性。具体步骤:1) 在 MPU 中为该区域分配一个 region,设置 TEX=0, C=0, B=0(Strongly Ordered 或 Normal Non-Cacheable),或 TEX=0, C=1, B=0(Write-Through);2) 使能该 region 并设置 AP 和 XN 属性;3) 确保 DMA 描述符和缓冲区地址对齐到 Cache line(32 字节);4) 若使用 Write-Back,则需在 DMA 传输前后调用 SCB_CleanDCache_by_Addr 和 SCB_InvalidateDCache_by_Addr。注意:避免将整个 SRAM 设为 Non-Cacheable,否则性能下降。推荐将 DMA 缓冲区单独放在一个 MPU region,并设为 Non-Cacheable 或 Write-Through,这样既保证一致性,又保留其他区域的 Cache 性能。
mcuku 阿沐 · 2026-09-17