在STM32H7上,DMA与D-Cache共存时,必须保证DMA缓冲区所在内存区域对CPU而言是Non-Cacheable,或严格做Cache维护。推荐用MPU配置:先使能MPU并设置PRIVDEFENA,选一个空闲region(如Region 0),配置RBAR为缓冲区起始地址(32字节对齐),RASR中SIZE按区域大小、AP=0b011(全访问)、TEX=0b000、C=0、B=0、S=0,即Normal Non-Cacheable;XN按需设置。注意region不能与已用区域重叠,且DMA描述符和缓冲区都要覆盖。配置后调用SCB_CleanInvalidateDCache()清一次残留,再启动DMA。验证方法:DMA接收后直接读缓冲区并与发送端比对;同时用调试器查看该地址在Cache维护前后是否变化,或在DMA完成中断里读数据并做CRC校验。若数据稳定且不再错位,说明配置生效。切忌只配DMA缓冲区而漏掉描述符区域。