核心原则:把DMA缓冲区放在MPU配置为Non-cacheable或Write-through的区域,并保证32字节对齐。具体做法:1) 在链接脚本中单独划出一段SRAM(如0x30000000起的SRAM4或DTCM),用MPU_Region配置该区域为Normal memory、Non-cacheable(TEX=1,C=0,B=0)或Write-through(TEX=0,C=1,B=0);2) DMA描述符和缓冲区都放此区域,地址按32字节对齐,长度按32字节整数倍;3) 若必须用Cacheable区域,则发送前调用SCB_CleanDCache_by_Addr,接收后调用SCB_InvalidateDCache_by_Addr,且地址必须32字节对齐,否则会误伤相邻数据;4) 注意H7的AXI SRAM默认Cacheable,DTCM不经过Cache但DMA1/2无法访问,需用BDMA或MDMA;5) 配置MPU后调用SCB_EnableDCache,顺序不能反。调试时可用__DSB()保证顺序。