stm32中断堆栈_分析一个关于STM32 芯片异常复位的经典案例!

本文通过一个STM32L4芯片异常复位的案例,介绍了如何分析和处理此类问题。当遇到复位问题时,首先确定复位原因,然后查看复位状态寄存器。在本例中,问题由看门狗超时引起,程序在`HardFault_Handler`中停止。通过分析栈指针SP和LR,发现错误源于局部8bit数组被强制转换为uint32_t指针并进行宽操作,覆盖了栈内容,导致程序跑飞。解决办法是将局部数组改为全局数组。
摘要由CSDN通过智能技术生成

前言

本篇主要是介绍一种处理问题的思路,即当我们在做STM32应用开发过程中,遇到芯片异常复位,或者进入了异常处理时,如何通过集成开发环境,如IAR,KEIL等查看相应的ARM内核寄存器,定位出应用软件产生异常的地方!

问题描述

某STM32用户反馈,当使用STM32L4芯片的时候,程序运行一段时间后,会忽然复位。复位后程序继续运行,但是还会继续复位,原因不详!

问题分析

针对于此类问题,我们可以按照一个统一的思路去处理。分析本案例的大致步骤如下:

1、初步确定复位的原因,是硬件复位,如外部NRST被拉低,还是软件复位,包括软件直接调用复位,或者看门狗复位,还是低功耗模式如standby模式被唤醒时产生中断;

2、查看复位状态寄存器了解复位大方向,然后做进一步得拆解分析。

3、目前客户项目的复位原因是因为看门狗复位,即客户使用了IWDG,但由于某种原因没有及时喂狗,导致IWDG超时复位。初步怀疑由于客户软件的问题,程序跑飞,进入异常处理。因为客户的异常处理函数中并没有做任何动作,导致独立看门狗IWDG复位。基于此,我们先关闭IWDG,然后在所有的异常处理中,先加入死循环并打上断点,对异常原因进行捕捉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值