STM32H7的D-Cache与DMA数据一致性核心在于Cache Line(32字节)操作。发送方向(内存到外设):先按Cache Line对齐并写回(Clean)数据,再启动DMA,避免DMA读到旧数据。接收方向(外设到内存):启动DMA前先失效(Invalidate)对应区域,但必须确保该区域无CPU未写回数据,否则失效会丢弃脏数据。实操顺序:1)地址和长度按32字节对齐,非对齐部分用软件缓冲或手动处理;2)发送:SCB_CleanDCache_by_Addr(addr, len);3)接收:先SCB_InvalidateDCache_by_Addr(addr, len),再启动DMA;4)DMA完成后,若CPU要读数据,需再次Invalidate(因为DMA期间Cache可能预取)。注意:Invalidate前必须Clean,否则丢数据。推荐使用MPU将DMA缓冲区配置为Write-Through或Non-Cacheable,可彻底避免一致性问题。
mcuku 阿沐 · 2026-09-21