你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32 hardfault问题分析经验分享

[复制链接]
攻城狮Melo 发布时间:2024-7-29 13:50
在平时项目开发的时候,我们难免会遇到单片机程序进入hardfult

常见的导致单片机进入hardfult有以下原因:
堆栈溢出、数组越界、野指针、非对齐访问


接下来,我就跟大家详细介绍两种定位错误的方法,帮助大家尽快找到问题根源并解决问题

定位错误
方法一  Show Caller Code
在hardfult中断处加入断点,当进入hardfult,我们在Call Stack+Locals信息框中,右键,选择show caller code可查到进入hardfault时运行前的代码,但这不一定准。

微信图片_20240729134833.png


方法二  开源库CmBacktrace
CmBacktrace(Cortex Microcontroller Backtrace)是一款针对ARM Cortex-M系列MCU的错误代码自动追踪、定位,错误原因自动分析的开源库。主要特性如下:

支持的错误包括:
断言(assert)
故障(hard fault,memory Management Fault,Bus Fault、Usage Fault、Debug Fault)
故障原因 自动诊断:可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器。

输出错误现场的函数调用栈(需配合addr2line工具进行精确精确定位),还原发生错误时的现场信息,定位问题代码位置、逻辑更加快捷、准确。也可以在正常状态下使用该库,获取当前的函数调用栈

适配Cortex-M0/M3/M4/M7 MCU

支持IAR、KEIL、GCC编译器

下面我们以实例过程移植及使用(Keil)
1、下载源码,解压,如下图

微信图片_20240729134829.png


其中cm_backtrace文件夹下就是核心文件,我们移植需要用到的。

2、将cm_backtrace文件添加到工程目录下,由于我们是使用keil工程,所以需要在fault_handler文件内选择keil文件下的文件

微信图片_20240729134826.png


3、添加到工程中,添加头文件、勾选C99模式

微信图片_20240729134823.png


微信图片_20240729134820.png


4、这时我们可以编译一下工程,编译后提示比较多错误

微信图片_20240729134817.png


5、从错误看出,有一些宏定义和预处理没找到,那是因为cmb_cfg.h的文件我们还没修改,该文件需要设置,我们设置如下:

微信图片_20240729134814.png


6、修改完cmb_cfg.h宏定义后,我们重新编译一下工程,提示还有一个错误,cmb_fault.c和stm32f10x_it.c文件的HardFault_Handler函数重定义了

微信图片_20240729134811.png


7、在stm32f10x_it.c文件中,找到HardFault_Handler函数并将其屏蔽

微信图片_20240729134808.png


8、这时我们重新编译,错误消除。

我们在main.c文件里编写需要测试的代码,如下:

微信图片_20240729134805.png




9、下载并运行程序:

微信图片_20240729134801.png


10、可以看到串口输出的错误信息,我们根据提示运行命令:
addr2line -e USART_TEST.axf -a -f 0800157e 080015ce

运行命令需要运行工具addr2line,该工具在CmBacktrace源文件tool文件夹内,

微信图片_20240729134758.png


11、根据系统版本,我们将addr2line.exe文件复制到工程目录下.axf所在的文件夹中:

微信图片_20240729134755.png


12、在该文件夹中,我们按下shift键同时点击鼠标右键

微信图片_20240729134752.png


13、在powershell中,输入 start cmd并回车运行

微信图片_20240729134749.png


14、这时会弹出cmd.exe的界面,我们输入addr2line -e USART_TEST.axf -a -f 0800157e 080015ce 命令,并运行

微信图片_20240729134746.png


15、可以看到addr2line.exe工具给我们定位出的错误代码行数

微信图片_20240729134743.png


使用CmBacktrace库能帮助我们有效快速地定位HardFault错误

转载自:创客技术日记
如有侵权请联系删除

收藏 评论0 发布时间:2024-7-29 13:50

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版