STM32H7的D-Cache与DMA一致性核心是:DMA访问的内存区域必须按Cache Line(32字节)对齐,且长度最好是32字节整数倍。若不对齐,回写/失效会波及相邻数据,导致数据损坏。实战顺序分两种:1) DMA读(外设到内存):先Invalidate D-Cache(按地址范围),再启动DMA接收,DMA完成后CPU读取前需再次Invalidate(若DMA期间CPU未访问该区域,可只做一次)。2) DMA写(内存到外设):CPU先填好数据,然后Clean D-Cache(回写),再启动DMA发送。注意:Invalidate前必须确保Cache中没有未回写的脏数据,否则会丢失。推荐使用SCB_InvalidateDCache_by_Addr和SCB_CleanDCache_by_Addr,地址需32字节对齐。若使用MPU将DMA缓冲区配置为Write-Through或Non-Cacheable,可简化操作。
mcuku 阿沐 · 2026-09-24