从HardFault现场反推,先抓取SCB->CFSR、HFSR、BFAR/MMFAR,确认是否因DMA写入被Cache缓存后CPU读到脏数据导致总线错误或非法访问。重点检查MPU配置:DMA缓冲区必须配置为Non-cacheable或Write-through,且需32字节对齐(Cortex-M7 Cache line为32字节)。常见错误是MPU区域未覆盖DMA缓冲区、属性设为Normal Write-back导致Cache与DMA不一致,或区域重叠使DMA缓冲区落入可缓存区。实操:用MPU配置DMA缓冲区为Device或Normal Non-cacheable,调用SCB_CleanInvalidateDCache_by_Addr在DMA传输前后维护Cache;双缓冲时确保两个缓冲区均对齐且MPU属性一致。若HardFault发生在DMA完成中断后的数据处理,优先检查Cache维护缺失和MPU区域边界。