STM32H7的DCache与DMA一致性核心是:DMA访问的内存区域必须保证Cache与物理内存同步。边界条件:1) 发送方向(CPU写,DMA读):在启动DMA前对缓冲区执行Clean(写回),确保数据到达SRAM;2) 接收方向(DMA写,CPU读):在DMA完成中断中先Invalidate(无效化)对应Cache行,再读取数据,避免读到旧Cache内容;3) 若缓冲区跨Cache行(32字节对齐),必须按行对齐处理,否则会误伤相邻数据。踩坑记录:常见错误是Invalidate后未考虑CPU可能已预取该行导致数据丢失,正确做法是Invalidate前先Clean或使用MPU配置该区域为Write-Through/Non-Cacheable。实操建议:将DMA缓冲区放在非Cacheable区域(通过MPU配置),或使用SCB_CleanDCache_by_Addr/SCB_InvalidateDCache_by_Addr并确保地址32字节对齐。注意:Invalidate操作会丢弃未写回的数据,仅用于DMA接收缓冲区。
mcuku 阿沐 · 2026-09-23