STM32L496复位时偶发硬故障问题(Thumb指令相关?)
STM32L496电源循环复位偶发硬故障分析
故障现象
STM32L496微控制器在电源循环复位时偶发硬故障,且仅在部分固件版本中出现。经定位,故障根源为一段汇编代码的地址读取逻辑异常:原本应通过LDR指令加载向量表地址到R3寄存器,再通过BX指令跳转,但有时读取的向量表地址会偏移1字节,导致跳转失败触发硬故障。
正常与异常执行对比
正常执行流程
LDR R3, [R0] ---> R3 = [0x20001188] = 0x080422F0 LDR R3, [R3, #8] ---> R3 = [0x080422F8] = 0x0801E421 BX R3 ---> 跳转至Thumb指令地址0x0801E421(位[0]置1符合Cortex-M4要求)
向量表对应数据
[0x080422F8] = 0x0801E421(复位后应加载的中断向量地址)[0x080422FC] = 0x0801E441(下一个向量地址)
异常故障状态
硬故障时核心转储显示R3 = 0x410801E4,该值等价于从偏移1字节的地址0x080422F9读取数据:将下一个向量地址的最低字节0x41移位到了最高位,破坏了原本的有效地址。此现象可重复触发,但调试模式下单步执行从未出现,仅在电源循环复位场景下频发。
关键观察与疑点
- 已知Cortex-M4采用Thumb指令集,跳转地址位[0]必须置1,推测故障与地址偏移1字节直接相关,但无法解释为何仅在电源循环场景及部分固件版本中出现。
- 已尝试增大线程栈空间、多次调整代码逻辑排查,问题仍未解决。
内容的提问来源于stack exchange,提问作者Nick Fritz
相关产品推荐
相关产品推荐

