通过您提供的 SCB 寄存器信息分析可知:
HFSR=0x4000_0000 → FORCED 位有效,说明是低优先级 Fault 升级来的 HardFault。
CFSR=0x0001_0000 → Bus Fault 的 PRECISERR 位置 1,即精确的数据总线访问错误。
BFAR=0x2000_FF1C → 故障地址在 SRAM 顶部栈区附近。
完整的故障路径是:
Flash Erase 执行中
→ 此时来了一个中断
→ CPU 响应中断,自动压栈(写 SRAM)
→ SP 落到 0x2000_FF1C 附近
→ Flash Erase 期间 AHB Bus 可能暂停/限制 SRAM 并发写
→ 栈写操作失败 → PRECISERR → HardFault
结论:Flash Erase 期间发生中断,中断响应的压栈操作在 Flash 操作占用的 AHB Bus 上失败了。
建议:Flash Erase/Program 前必须调用 SuspendAllInterrupts() 关全局中断,这是标准做法,不是规避 bug 的 workaround。