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

STM32出现硬件错误可能有以下原因:

(1)数组越界操作;

(2)内存溢出,访问越界;

(3)堆栈溢出,程序跑飞;

(4)中断处理错误;

遇到这种情况,可以通过以下2种方式来定位到出错代码段。

方法1:

1.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。

1.2 在Keil菜单栏点击“View”——“Registers Window”,在寄存器查看窗口查找R14(LR)的值。如果R14(LR) = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值,如果R14(LR) = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值。我的程序R14(LR) = 0xFFFFFFF9,接下来以此为例。

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

1.4 在Keil菜单栏点击“View”——“Disassembly Window”,在“Disassembly”窗口中右击,在下拉菜单中选择“Show Disassemblyat Address...”。在弹出框“Show Code atAdress”的地址框中输入地址0x08003CB9进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。仔细查看附近区域的相关代码来排查错误具体原因。

方法2:

2.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。

2.2 在Keil菜单栏点击“View”——“Call Stack Window”弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况。

STM32硬件错误HardFault_Handler的处理方法相关推荐

  1. STM32硬件错误(HardFault_Handler)位置判断

    1.在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击"STOP"停止仿真. 1.2 在Keil菜单栏点击"View ...

  2. CubeIDE stm32硬件错误调试

    在单片机中,经常会出现硬件错误.跳转到HardFault_Handler()错误中断 void HardFault_Handler(void) {/* USER CODE BEGIN HardFaul ...

  3. stm32 硬件IIC使用方法说明与示例---LIS3DH的IIC通信

    有时我们可能需要MCU进行速率较高的IIC总线通信,一般stm32的IIC默认传输速率是100kpbs,最大为400kpbs.现在大部分项目会使用程序IO模拟的IIC,使用方便,具体网上例子很多. 这 ...

  4. stm32进入HardFault的异常定位方法

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

  5. MINIGUI常见错误集及解决方法

    MINIGUI常见错误集及解决方法 个人前言:其中错误1到16是直接转载的一篇博客,在移植MiniGUI过程中碰到的问题远远不止这些,我只是拿这16个先开个头,以后会将我自己在移植MiniGUI的过程 ...

  6. 计算机主板与检测,主板知识详解:CPU自动检测和硬件错误的侦测

    主板知识详解:CPU自动检测和硬件错误的侦测 1.CPU 的自动检测 以前的老式主板,需要用户自己设定 CPU 的外频.倍频以及电压等参数(一般都是通过跳线来设定).现在生产的主板,都能自动检测到这 ...

  7. 计算机错误代码0X000000be,win7电脑出现蓝屏错误0x000000BE的解决方法

    相信大家都遇到过电脑蓝屏的情况,而且蓝屏故障是一件非常麻烦的事情,前不久小编电脑出现蓝屏并且提示错误代码是0x000000BE,很多用户可能会直接选择重装系统,其实不用这么麻烦,出现0x000000B ...

  8. STM32硬件IIC的BUG问题

    问题描述 大概是这样,使用STM32硬件IIC作为主机通讯,只要不发送错误的从机地址, 通讯一直都是没问题的,因为验证程序的关系,所以在程序中修改了一下从机地址, 这时候就出现了问题,下面直接看图把 ...

  9. 12. STM32——硬件IIC驱动OLED屏幕显示

    STM32--硬件IIC驱动OLED屏幕显示 OLED屏幕 OLED屏幕特点 OLED屏幕接线说明 OLED屏幕显存 OLED屏幕原理 OLED屏幕常用指令 OLED屏幕字模软件的使用 写命令 写数据 ...

最新文章

  1. python2.7和3.5相互兼容吗_以与Python 2.7和Python 3.5兼容的方式使用abc.ABCMeta
  2. 趣事:一根网线发起的攻击
  3. Mybatis 学习系列文章
  4. mysql设置参数不生效_关于mysql的wait_timeout参数 设置不生效的问题【转】
  5. c++学习笔记之成员函数
  6. LoadCursor 加载不同的鼠标光标
  7. MySQL 基础 ———— 子查询
  8. 解压大于4g的文件_python解压压缩包
  9. 【华为云技术分享】Volcano火山:容器与批量计算的碰撞
  10. 自动驾驶感知-车道线系列(二)——Canny边缘检测
  11. PAT乙级.1013.数素数
  12. 霍尼韦尔摄像头ip地址修改_Honeywell 安防系统使用手册(IP-ALARM-II).pdf
  13. 人事代理行业 薪酬福利外包市场:老树发新芽,数字 化转型提质增效
  14. blendshapes
  15. Maven详解【Idea搭建Maven项目、Maven常用指令、Maven的传递性和依赖性、排除依赖】
  16. 《华尔街》观后笔记7——阳光交易
  17. vue 总结一项目建立及文件夹结构配置
  18. 如何解决SQL Server 2008 无法连接到(local)(服务器名称)
  19. mybatis-plus雪花算法生成Id使用详解
  20. 法国西南部发生火车追尾事故 已造成至少40人伤

热门文章

  1. NGINX的几个应用场景
  2. qt 提高图片加载速度
  3. Java编程基础篇第二章
  4. Oracle数据库基础知识点汇总
  5. QLibrary执行load失败
  6. Core Text 入门
  7. Matlab Robotic Toolbox V9.10工具箱(四):常用函数
  8. 2018-2019-1 20189218《Linux内核原理与分析》第五周作业
  9. apache 服务器安全配置
  10. 区别用户使用的终端设备代码 转 https://segmentfault.com/a/1190000012957023