STM32H7的D-Cache与DMA协同核心是保证数据一致性。首先,DMA缓冲区必须按Cache行大小(通常32字节)对齐,且长度建议为Cache行整数倍,避免同一行内混合CPU与DMA访问。其次,维护操作要区分方向:CPU写、DMA读(发送)时,在启动DMA前对缓冲区执行Clean(写回)操作;DMA写、CPU读(接收)时,在DMA完成中断后对缓冲区执行Invalidate(无效化)操作。推荐使用SCB_CleanDCache_by_Addr和SCB_InvalidateDCache_by_Addr,并确保地址对齐。若使用MPU,可将DMA缓冲区配置为Write-Through或Non-Cacheable,简化维护。排查一致性问题时,先检查是否遗漏Clean/Invalidate,再确认对齐与长度,最后用调试器观察内存与Cache内容是否一致。注意:Invalidate前必须确保DMA已停止,否则可能丢失数据。
mcuku 阿沐 · 2026-09-15