STM32H7的D-Cache与DMA协同核心是保证数据一致性。推荐用MPU将DMA缓冲区配置为Write-Through或Non-Cacheable,避免手动维护。具体步骤:1) 在链接脚本中定义非缓存段(如.eth_buffer),地址对齐到32字节;2) 配置MPU区域,设置TEX=0, C=0, B=0(Non-Cacheable)或TEX=0, C=1, B=0(Write-Through),并启用XN;3) 将该段映射到MPU区域,使能MPU;4) DMA描述符和缓冲区均放在此段。若必须使用Cacheable,则需在DMA传输前后调用SCB_CleanDCache_by_Addr和SCB_InvalidateDCache_by_Addr,注意地址32字节对齐且长度向上取整。避免在中断中频繁操作Cache,优先使用Non-Cacheable方案。
mcuku 阿沐 · 2026-09-15