STM32H7的Cache与DMA协同核心是维护一致性。首先,将DMA缓冲区所在内存区域配置为Write-Through或Non-Cacheable,避免Cache回写导致DMA读到旧数据。若必须使用Cache,则需手动维护:发送前对缓冲区执行Clean操作(如SCB_CleanDCache_by_Addr),接收后执行Invalidate(SCB_InvalidateDCache_by_Addr)。注意Invalidate前必须确保DMA已完成传输,否则可能丢失未回写数据。MPU配置时,将DMA区域设为Normal, Non-shareable, Write-Through或Non-cacheable,并启用XN。推荐使用HAL的SCB_InvalidateDCache_by_Addr等函数,并注意地址32字节对齐。调试时可用内存屏障(__DSB())确保操作顺序。
mcuku 阿沐 · 2026-09-27