CubeIDE STM32 HardFault_Handler 定位源码位置


前言

在STM32 CubeIDE 中 经常遇到 HardFault_Handler,记录下如何查看出错源码的位置


一、使用CubeIDE 的故障分析器 查看 SP 值

在调试会话期间,点击顶部菜单的 Window > Show View > 故障分析器打开窗体
滚动到下面就可以看见 sp r1 r2 等寄存器值

首先要查看R14(LR)的值,确定当前堆栈指针是MSP还是PSP。

LR = 0xFFFFFFF9 为主堆栈(MSP),LR = 0xFFFFFFFD为线程堆栈(PSP)。

二、以MSP主堆栈为例,查找sp值(通常是0x2000xxxx开头的,SP对应的主栈指针MSP为默认的栈指针,在复位后和处理器处于处理模式时,会被选择使用)对应的LR地址,可以在memory browser 窗体类输入这个值,观察显示前几个字节的值

MSP入栈的顺序,R0、R1、R2、R3、R12、返回address、PSR、LR

通常是 0000XXXX 0000XXXX 0000XXXX 0000XXXX 0000XXXX 0800463f 0800xxxx
在这里插入图片描述
具体说明可以参考STM32 HardFault问题详细分析及调试笔记

三、将 0x0800463f在汇编( dassemble)窗体里面查找对应代码位置,在右上角的查找框输入0800463f ,就能定位源码位置了,

在这里插入图片描述

也可以在编译的map中查找 ,找到0x2000xxxx附近对应的函数名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值