STM32H7的DMA与D-Cache冲突本质是CPU缓存行与DMA缓冲区重叠。推荐做法:用MPU把DMA缓冲区所在区域配置为Non-cacheable(TEX=1,C=0,B=0)或Write-through(TEX=0,C=1,B=0),并设置XN防止取指。缓冲区必须按32字节Cache行对齐,大小取32字节整数倍,避免同一Cache行混放CPU变量。若必须用Cacheable,则DMA发送前调用SCB_CleanDCache_by_Addr(),接收后调用SCB_InvalidateDCache_by_Addr(),且地址和长度都要32字节对齐。注意Invalidate会丢弃未回写数据,所以接收缓冲区在DMA写入期间CPU不能访问。配置顺序:先使能MPU并加载region,再开DMA和Cache。调试时可用SCB_GetCacheInfo确认配置生效。