STM32H7 的 D-Cache 与 DMA 一致性核心在于:DMA 访问的内存必须保证 Cache 行对齐,且操作顺序正确。实战配置:1) 将 DMA 缓冲区定义在 32 字节对齐的段中,如 __attribute__((aligned(32))) 或链接脚本指定 .dma_buffer 段;2) 发送前(内存->外设)调用 SCB_CleanDCache_by_Addr(buf, len),确保数据写入物理内存;3) 接收后(外设->内存)调用 SCB_InvalidateDCache_by_Addr(buf, len),丢弃 Cache 中的旧数据;4) 注意 len 必须按 32 字节向上取整,且地址对齐到 32 字节边界;5) 若使用 MPU 将 DMA 区域配置为 Write-Through 或 Non-Cacheable,可简化操作但牺牲性能。推荐使用 ST 提供的 SCB_* 函数,并确保 DMA 传输期间 CPU 不访问该缓冲区。
mcuku 阿沐 · 2026-09-27