打印
[应用相关]

stm32进入HardFault的异常定位方法(Keil)

[复制链接]
313|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ST, ar

STM32进入HardFault_Handler处理办法

HardFault_Handler出现的情况一般有两种:
一种是:数组越界
一种是:堆栈溢出,程序指针指飞


使用特权

评论回复
沙发
花间一壶酒sd|  楼主 | 2022-7-26 15:34 | 只看该作者
方法一

在中断HardFault_Handler中的while()处打上断点,让程序执行到此处停止。

使用特权

评论回复
板凳
花间一壶酒sd|  楼主 | 2022-7-26 15:41 | 只看该作者

使用特权

评论回复
地板
花间一壶酒sd|  楼主 | 2022-7-26 15:43 | 只看该作者
在Registers里面找到R14(LR)的值,我的这里是:0xFFFFFFF9
说明一下:
0xFFFFFFF9对应的是要看MSP寄存器
0xFFFFFFFD对应的是要看PSP寄存器
所以这里需要查找的内存地址是MSP的值:0x20008828

使用特权

评论回复
5
花间一壶酒sd|  楼主 | 2022-7-26 15:49 | 只看该作者

使用特权

评论回复
6
花间一壶酒sd|  楼主 | 2022-7-26 15:52 | 只看该作者
在memory里面查找MSP的值:0x20008828,然后在对应的行里面找到地址,地址一般格式都是:0x0800BA68这样的。

使用特权

评论回复
7
花间一壶酒sd|  楼主 | 2022-7-26 16:03 | 只看该作者

使用特权

评论回复
8
花间一壶酒sd|  楼主 | 2022-7-26 16:06 | 只看该作者
在Disassembly里面右键选择Show Code at Address,把找到的地址输进去进行搜索,然后就会找到相对应的代码,这里的代码就是在进入循环中断之前的时候的情况,仔细查看这部分函数被调用或者数组内存使用情况。

使用特权

评论回复
9
花间一壶酒sd|  楼主 | 2022-7-26 16:08 | 只看该作者

使用特权

评论回复
10
花间一壶酒sd|  楼主 | 2022-7-26 16:09 | 只看该作者

使用特权

评论回复
11
花间一壶酒sd|  楼主 | 2022-7-26 16:10 | 只看该作者
方法二

在中断HardFault_Handler中的while()处打上断点,让程序执行到此处停止。

使用特权

评论回复
12
花间一壶酒sd|  楼主 | 2022-7-26 16:11 | 只看该作者
在keil中打开Call Stack + Locals,然后在HardFault_Handler上 右键选择:Show Caller Code,就会跳转到进入循环中断之前的函数处。仔细查看这部分函数被调用或者数组内存使用情况。

使用特权

评论回复
13
花间一壶酒sd|  楼主 | 2022-7-26 16:36 | 只看该作者

使用特权

评论回复
14
玛尼玛尼哄| | 2022-7-27 18:29 | 只看该作者
谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

1144

帖子

2

粉丝