STM32H7 的 L1 Cache(I-Cache/D-Cache)与 DMA 一致性核心原则:DMA 读内存前,CPU 需对发送缓冲区执行 Clean(写回);DMA 写内存后,CPU 需对接收缓冲区执行 Invalidate(无效化)。注意 Invalidate 前必须确保 CPU 未访问该区域,否则会丢失未写回数据。推荐将 DMA 缓冲区放在 MPU 配置为 Device 或 Strongly-ordered 的内存区(如 0x30000000 的 SRAM4 或 0x24000000 的 AXI SRAM 部分),并关闭该区域的 Cache 或设为 Write-through,可免维护。若使用 Cacheable 区域,则需按上述时机调用 SCB_CleanDCache_by_Addr 和 SCB_InvalidateDCache_by_Addr,且地址需 32 字节对齐,长度向上取整。实战中建议用双缓冲+Cache 维护,避免频繁操作。
mcuku 阿沐 · 2026-09-14