STM32H7 的 D-Cache 与 DMA 一致性核心在于:DMA 读内存前,CPU 若写过缓冲区,必须 Clean(写回)对应 cache line;DMA 写内存后,CPU 读之前必须 Invalidate(无效化),否则可能读到旧 cache 数据。边界条件:1) 操作地址必须按 32 字节 cache line 对齐,长度向上取整到 line 边界,否则会误清相邻数据;2) 缓冲区应放在非 cache 区或单独对齐的 cache line 上,避免与其它变量共享 line 导致伪共享;3) Invalidate 前若该 line 有脏数据会丢失,必须先 Clean 再 Invalidate;4) 使用 SCB_CleanDCache_by_Addr / SCB_InvalidateDCache_by_Addr,避免整 cache 操作影响实时性。实测陷阱:DMA 描述符/缓冲区未对齐导致偶发数据错;中断中调用 cache 维护函数耗时抖动;编译器优化把变量放寄存器导致看似 cache 问题;MPU 配置为 write-through 与 write-back 行为不同。建议 DMA 缓冲区用 __attribute__((aligned(32))) 并放在 DTCM 或配置 MPU 为非 cache 区,最稳妥。