历史上的今天
返回首页

历史上的今天

今天是:2025年12月20日(星期六)

2022年12月20日 | 分析一个关于STM32 芯片异常复位的经典案例!

2022-12-20 来源:zhihu

前言

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


问题描述

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


问题分析

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

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

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

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




4、正如我们所猜测,的确是由于程序跑飞导致。程序停在了void HardFault_Handler(void) 。通过查看 SP 以及回溯栈里面的内容,找到了对应的LR,具体方法如下:



当中断产生时,按照上图所示的顺序进行压栈,同时栈指针SP--,即: R0, R1, R2, R3, R12, LR, PC,xPSR。


如上图所示,当产生异常时,如果call stack窗口显示不出来的话,只能根据core的寄存器手动回溯栈,以找到出错时的指针。根据ARM core的说明,SP+6,即红框的部分,为中断处理后LR和PC,据此可以追溯函数异常时的位置!
5、根据出错时的PC和LR,发现是浮点运算的函数,初步判断是因为浮点运算导致,比如没有对齐导致的Hardfault,但实际检查发现,并不是浮点运算的问题!
6、问题一时陷入了僵局。但有一点是确定的,是因为栈的区域被异常覆盖或者改写导致产生hard fault,
7、由于问题可以稳定复现,采取逐个排除法最终发现了问题的所在:当把一个局部数组变量改为全局数组时,问题消失!由于局部数组变量是保存在栈当中,所以怀疑是对这个局部数组变量使用不当导致了栈被覆盖或者改写!追查这个局部变量数组:


经检查发现,这个原先是8bit的局部变量的数组,在最后被强制转换成了uint32_t *类型的指针,由于是指针, 在对其进行++或--操作时,都是按照4字节宽带操作的,这就相当于扩大了4倍,覆盖了后面的栈的内容, 导致了程序跑飞!


小结
当芯片异常复位或者进入异常处理(如Hard fault, Mem Manage, Bus fault等)时,首先考虑的是,如何快速的复现这个问题,当问题被稳定复现的时候,可以通过调试工具在异常处理的地方打上断点停留,这样就可以获取到栈指针SP,通过SP去看栈里面的内容去回溯栈。当然,如果栈的内容被无端改写时,栈里面的内容,如保存的LR就没有太大的参考意义。不过,可以通过观察栈里面的内容,去估测是哪个模块或者函数异常修改了栈的内容,进而定位最终的问题源!


推荐阅读

史海拾趣

Heyco公司的发展小趣事

进入20世纪50年代,Heyco开始设计和生产应力缓解电线保护线扣,这一创新产品迅速成为公司的主打系列之一。随着技术的不断进步,Heyco逐渐将产品线扩展到包括电缆配件、钉子固定器、紧固件等多种工业零部件,以及电气连接器和电线保护系统。这些产品广泛应用于汽车制造、医疗设备、能源水电、机械设备维护以及建筑施工安装等多个领域,展现了Heyco强大的技术实力和市场适应性。

FINTEK公司的发展小趣事

FINTEK公司深知技术创新是企业持续发展的核心动力。因此,公司不断加大研发投入,建立了完善的研发体系和激励机制。通过与国内外知名高校和研究机构的合作,FINTEK在人工智能、物联网、5G通信等前沿领域取得了多项重要技术突破。这些创新成果不仅提升了公司的核心竞争力,也为电子行业的未来发展贡献了重要力量。

乾坤(Cyntec)公司的发展小趣事

产品质量是企业的生命线。乾坤公司深谙此道,因此在发展过程中始终注重质量管理体系的建立和完善。公司引进了国际先进的质量管理理念和方法,通过ISO 9001质量管理体系认证,并严格执行每一道生产工序的质量控制。为了确保产品质量的稳定性和可靠性,乾坤还建立了完善的产品测试和验证流程,每一批产品都要经过严格的质量检测才能出厂。这些举措不仅提升了产品质量,也赢得了客户的广泛认可和信赖。

Edcon Components Netherlands Cv公司的发展小趣事

Edcon Components Netherlands Cv自成立之初,就深知技术创新是企业生存和发展的关键。在电子行业飞速发展的背景下,公司投入大量资源进行研发,成功推出了一系列高性能、低成本的电子元器件。这些产品不仅满足了市场对高质量电子产品的需求,还为公司赢得了良好的口碑。随着技术的不断迭代更新,Edcon逐渐在电子元器件市场占据了重要地位。

Entegris公司的发展小趣事

在晶圆盒传输业务上,Entegris与台湾的家登精密之间发生了一场长达数年的专利侵权诉讼。Entegris最终获得了胜诉,家登被要求赔偿超过3,000万美元。这一胜利不仅保护了Entegris的知识产权,也进一步巩固了其在半导体材料市场的地位。

博流(Bouffalo Lab)公司的发展小趣事

博流公司的卓越表现引起了业界的广泛关注。2019年,公司荣获了Red Herring Top 100 Asia大奖,这是对其在AIoT/边缘计算SOC芯片研发领域的快速成长和技术实力的高度认可。此外,博流还获得了多项国内外专利和荣誉,证明了公司在行业内的领先地位。

问答坊 | AI 解惑

模拟集成电路

随着信息技术及其产业的迅速发展,带动着当今社会进入到一个崭新的信息化时代。微电子技术是信息技术的核心技术,模拟集成电路(IC)又是微电子技术的核心技术之一,因而模拟IC成为信息时代的重要技术发展目标。  模拟IC包含了纯模拟信号处理功能 ...…

查看全部问答>

边干边学LabVIEW仪器控制——献给初入自动化测试领域的工程师

伟大的军事指挥官林彪把复杂的战术总结出了“一点两面”、“四快一慢”、“三三制”等,从田里、山里出来的战士们在这些浅显的道理面前,特别容易懂也特别容易用,这些浅显的战术道理,把四野铸就成了一支攻无不克,战无不胜的虎狼之师。   &n ...…

查看全部问答>

急!!

用libero的时候,不小心把左边work下面的文件删了(不是物理删除),但想添加回来却无从入手,新开一个project也一样,新写的v文件也没法综合(那些图标都是灰色) 求教libero高手,怎样把work那里的东西弄回来啊…

查看全部问答>

求助:什么是硬件延时

软件延时貌似就是执行空指令 那硬件延时又是整样的啊? 能给个8051的硬件延时图吗? 还有如果用硬件延时延时的话 #include #define uint unsigned int #define uchar unsigned char void dlms(void) { uint j; uint i; for( ...…

查看全部问答>

Easy51 单片机开发板,嵌入式入门的最佳选择。

    Easy51单片机开发板支持Atmel AT89S51/52/53、STC89C51/52/53等多种标准51单片机,是集学习、实验、开发于一体的初学者快速入门套件,是嵌入式入门的最佳选择。     Easy51单片机开发板提供了键盘、数码管、蜂鸣器、液晶 ...…

查看全部问答>

请问幻灯片是怎么产生与传输的?

请问 幻灯片是怎么产生与传输的? 给点交流意见。 给点资料?网站地址什么的。 谢了。…

查看全部问答>

中断问题

本帖最后由 dontium 于 2015-1-23 13:27 编辑 我的主程序里面有许多的调用函数,那我有什么办法可以知道是在执行哪个调用函数的时候产生的中断啊? …

查看全部问答>

TMS320F28335 中TBCLK的值是多少啊?

//  Some useful Period vs Frequency values //  SYSCLKOUT =     150MHz         100 MHz //  ----------------------------------------- //    ...…

查看全部问答>

STM32F407网口的数据传输速度?

有没有哪位大虾测试过STM32F407的网络数据传输速度? 看了ST网站上的资料,没有看到相关的测试。STM32F407的主频不低,CPU的速度应该不是网络数据传输的瓶颈,有没有同学做过测试的,给大家共享下。 …

查看全部问答>

【MSP430 编译器使用经验】+教你如何用IAR入门430

安装IAR后需要破解。至于如何破解相信网上很多资料。可以下载一个注册机。然后就行了,如果你没破解就算程序完全对的编译也不会通过的。 先打开IAR软件。之后。NEW-》workspace          点击project    ...…

查看全部问答>