STM32H7的D-Cache与DMA数据一致性核心在于:DMA直接访问物理内存,而CPU可能通过D-Cache访问同一区域,导致数据不一致。实战步骤:1) 用MPU将DMA缓冲区配置为Write-Through或Non-Cacheable,最简单可靠,但会牺牲性能。2) 若必须Cacheable,则发送前调用SCB_CleanDCache_by_Addr(),接收后调用SCB_InvalidateDCache_by_Addr(),注意地址和长度需32字节对齐。3) 避免在DMA传输期间CPU访问该缓冲区。4) 对于双向DMA,建议使用Non-Cacheable区域或手动维护。推荐使用HAL库的SCB_*函数,并确保MPU区域与链接脚本一致。注意:Invalidate操作会丢弃未回写的脏数据,务必先Clean再Invalidate。
mcuku 阿沐 · 2026-10-04