打印
[其他ST产品]

STM32 出现 hardfault_handler 处理方法

[复制链接]
229|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
v26g7l|  楼主 | 2023-1-30 13:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Hardfault_handler产生原因
1、遇到错误问题是数据类型不对,导致该步骤永远不能执行到,跳至硬件错误中断;所以硬件中断可尝试查找数据类型错误。

2、堆栈设置错误也会跳至hardwarefault;

3、如果上电后, 在调试时, 执行单步, 会在不确定位置的地方产生HardFault_Handle, 检查一下你的时钟配置(外部晶振频率, SysTemInit/PLLConfig相关函数以及晶振频率宏定义), 可能是超频了...导致了STM32不稳定.

4、如果在使用某些参数时,使用的类型与其定义的类型不同,也可能导致出现跳转hardfault,这种情况下, 一般是不固定的跳转hardfalt,排查问题较麻烦;

5、如果你使用片上flash做参数存储,那么你需要注意了,参数存储区最好从flash的后部往前存,避免参数区与代码区的互相覆盖。如果参数被覆盖了,或者代码被覆盖了,这也会导致跳转hardfault

使用特权

评论回复
评论
v26g7l 2023-1-30 13:22 回复TA
版权声明:本文为CSDN博主「言之兮兮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_39888010/article/details/126840317 
沙发
v26g7l|  楼主 | 2023-1-30 13:24 | 只看该作者
通过Keil调试问题定位问题位置
void HardFault_Handler(void)
{
    /* 用于确认进入HardFault问题位置 */
    uint32_t r_psp, r_msp;
    r_psp = __get_PSP();
    r_msp = __get_MSP();
    /*
        1.读取PSP和MSP的值,通过和SP值进行对比,确认当前是指向PSP还是MSP
        2.在Memory中打开存储位置,找到08开头格式的地址
        3.在Disassembly输入08开头格式的地址,定位出现问题的具体位置   
    */
   
    /* if Hard Fault exception occurs, go to infinite loop */
    while (1) {
    }
}、

使用特权

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

本版积分规则

25

主题

117

帖子

0

粉丝