谷动谷力

 找回密码
 立即注册
查看: 3735|回复: 0
收起左侧

STM32硬件错误HardFault_Handler的处理方法

[复制链接]
发表于 2022-6-24 22:56:12 | 显示全部楼层 |阅读模式
STM32硬件错误HardFault_Handler的处理方法
( D: c1 E, L. z- X$ X7 s; e( W+ }
来源:网路素材
, Z. T8 @, s3 W1 R; d0 v% Z

      在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。这说明STM32出现了硬件错误。

640?wx_fmt=jpeg.jpg
5 F" [9 V+ e( F  V- _6 H
* O) [/ i( O8 j+ C" G
STM32出现硬件错误可能有以下原因:

: {; f; D* N# K- Z; m9 Z
(1)数组越界操作;

+ [6 n7 \1 @* F. w
(2)内存溢出,访问越界;
) c: Q9 E9 s) g# b1 L) d9 x# m2 x
(3)堆栈溢出,程序跑飞;

( g. Z+ Q/ C+ R5 z( f4 p: U
(4)中断处理错误;
2 [1 T$ B4 f8 [& {9 d1 L9 s
遇到这种情况,可以通过以下2种方式来定位到出错代码段。
" K7 _  `  \) ?/ O) f+ j1 B9 [8 [
方法1:
: d- v4 L8 o6 `% n
1.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。
9 Y( T. ]+ w# ~+ B) V2 |
640?wx_fmt=jpeg.jpg
; g& D, e# E, ]8 d8 v9 h
1.2 在Keil菜单栏点击“View”——“Registers Window”,在寄存器查看窗口查找R14(LR)的值。如果R14(LR) = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值,如果R14(LR) = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值。我的程序R14(LR) = 0xFFFFFFF9,接下来以此为例。

% s$ ]  w- n2 N+ c) H7 x  T2 E
640?wx_fmt=png.jpg

8 s7 ^, o6 G# m8 K, z/ E
1.3 在Keil菜单栏点击“View”——“Memory Windows”——“Memory1”,在“Address”地址栏中输入MSP的值:0x20001288,然后在对应的行里找到地址。地址一般以0x08开头的32位数。本例中,地址为0x08003CB9。

6 ]' ^, m* U; n/ j: M/ r' @  j
640?wx_fmt=png.jpg
# s% |; {6 [  k+ @! i
1.4 在Keil菜单栏点击“View”——“Disassembly Window”,在“Disassembly”窗口中右击,在下拉菜单中选择“Show Disassemblyat Address...”。在弹出框“Show Code atAdress”的地址框中输入地址0x08003CB9进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。仔细查看附近区域的相关代码来排查错误具体原因。" R) t% E( F# K- |6 _

8 Z! _6 m. D8 U2 m% G9 `% O8 o2 `
640?wx_fmt=jpeg.jpg

, O: w7 W5 n/ d8 w) n
方法2:

! d7 ]& H; w7 A) ]4 ^4 K
2.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。
640?wx_fmt=jpeg.jpg

. C; e. j0 d9 n. s5 w% W+ p$ K
2.2 在Keil菜单栏点击“View”——“Call Stack Window”弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况。
( U' x( {0 G9 i$ f4 ]8 _1 g: w  I

; V. m* \& ]5 Q' N' i  \0 m) j

- h! B9 K. k7 o: o& A! n% _2 ~! s7 g/ h; n& ~4 W6 G+ D
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-3-29 14:15 , Processed in 0.101363 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表