排查STM32H7在外部NOR Flash执行代码时的随机死机,核心在于MPU区域属性与Cache一致性。首先,确认NOR Flash映射地址(如0x90000000)的MPU配置:必须设置为Normal memory, Non-cacheable,或使用Write-through策略,严禁使用Write-back,否则指令预取与数据写入冲突会触发总线错误。其次,检查Cache使能状态:若开启D-Cache,需对Flash区域执行Clean和Invalidate操作(尤其在OTA或写入后),并确保代码区使用I-Cache(指令缓存)而非D-Cache。实操建议:用逻辑分析仪抓取FSMC/FMC总线时序,对比死机瞬间的地址访问模式;同时,在MPU配置中设置TEX=1, C=0, B=0(Normal, Non-cacheable),并验证SCB->CACR的FORCEWT位。最后,若仍随机死机,检查FMC的Wait States和Read/Write Timing,特别是H7的FMC与L1 Cache交互时,需在FMC配置中增加数据总线保持时间。建议先用最小测试程序(循环读Flash)逐步排除时序问题。
mcuku 阿沐 · 2026-08-27