stm32进入硬件错误中断hardfault的原因剖析以及如何定位(必看)

这篇具有很好参考价值的文章主要介绍了stm32进入硬件错误中断hardfault的原因剖析以及如何定位(必看)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

指令集方面:arm一般高端处理器,比如cortex-a系列,都是32位的arm指令。而cortex-m0,1,3,4等低端处理器,也叫做单片机,为了增加代码密度(同样存储器内可以存更多指令),用的是thumb指令集(而且仅支持这个指令集),这个指令集大多数指令是16位的,少数是32位的。这就是为什么上面的调试图中,看到指令都是两个字节,而有的是4个字节。比较老的arm7,arm9等处理器,支持thumb指令和arm指令,需要通过指令告诉处理器,显式的进行指令转换,这个因此需要编译器提供支持。

注意:stm32f1(cortex-m3内核)单片机,仅支持thumb指令,在blx rx跳转指令执行时,会坚持rx寄存器存的地址,的最低为是不是1,如果不是,那么stm32会认为我们企图切换到arm指令,但是arm指令stm32不支持,因此会跳入hardfault硬件错误中断。stm32进入硬件错误中断时候,会在相应的状态指示寄存器里置为,用来提醒用户,是什么问题导致的错误。

只有三种错误类型,但是都会进入产生硬件错误中断。

HardFault错误

这个会在SCB->HFSR寄存器中通过位来标识产生的是什么错误,我们可以在进入了硬件错误中断,查看该寄存器的位来知道发生的是什么错误类型。具体哪位是干嘛的,自己查查Cortex-m3与m4权威指南这本书,讲得真心不错。

1. MemManage错误:存储器管理错误

存储器访问越权,写入MPU保护的只读区域,压栈错误等等。

会在SCB->CFSR寄存器第一个字节显示

2.Bus总线错误

比如访问了非法的存储器位置等。

会在SCB->CFSR寄存器第二个字节显示

3.Usage使用错误

比如非对齐访问,试图切换到arm指令状态等,我上面说的就是这个错误。

会在SCB->CFSR寄存器高半字显示

如果我们在keil mdk中进行调试,可以在HardFault函数处打断点,进入后,菜单栏选择Peripherals -> Core Peripherals -> Fault reportes窗口,看到各个错误寄存器的可视化信息显示,如下图:我这个错误就是由于rx = 20007800, blx rx, 地址rx中的地址最低为不为1,因此出现了使用错误,这个位表示我试图切换到arm指令,因此产生了错误。

stm32进入硬件错误中断hardfault的原因剖析以及如何定位(必看)

 文章来源地址https://www.toymoban.com/news/detail-407370.html

到了这里,关于stm32进入硬件错误中断hardfault的原因剖析以及如何定位(必看)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决STM32在延时时无法进入中断的问题

    问题: 在使用zigbee模块时,使用串口作为无线收发的载体,与stm32通信,使用DHT11作为简单的受控源,出现了bug: 当在while(1)里使用delay函数,或者使用DHT11_Read_Data函数时,程序无法进入串口接收中断,无法使用远程控制 其中的while函数为: 解决思路: 检查接线之后,我首

    2024年02月12日
    浏览(39)
  • STM32 HAL库 CAN双机通信接收无法进入中断、中断没有反应的解决方法

    在调试HAL库下的CAN双机(双F103ZET6)通信时,阻塞轮询接收完全正常,但是中断接收没有反应。翻看了GL的烧脑之路总结(一):Cubemx创建CAN通信工程,无法进入CAN中断的原因这篇文章以后,核实自己的硬件电路没有问题,于是对自己的工程文件进行整理,把 ①HAL_CAN_ConfigFi

    2024年02月04日
    浏览(62)
  • STM32 hal库编程定时器清除中断标志位,开启定时器中断会立即进入中断的问题

    1、如果不清除中断标志位,开启定时器中断的话,不能完成相应的计时,会立即进入中断。 2、如果在开启定时器中断前清除了中断标志位,就会等待计时完成再出发中断。 3、主要是针对单次计时使用,尤其是对第一次计时有要求的程序。

    2024年02月01日
    浏览(57)
  • STM32F407的CAN2无法进入can接收中断的解决办法

    这个问题困扰了我两天,今天偶然看到一篇文章有讲这个:STM32 CAN1 CAN2 不能同时工作,最后原因竟然是。。。。 看了之后恍然大悟。下面贴上我的初始化代码: 主函数进行中断优先级分组和CAN初始化调用及使能 初始化代码: 中断服务函数: 效果展示:  CAN逻辑分析仪数据

    2024年02月13日
    浏览(47)
  • 【STM32】HardFault问题详细分析及调试笔记

    目录 1. 概述 2. 问题描述 3. 问题分析 4. 相关知识 4.1异常和中断 4.2 中断输入与挂起行为 4.3 Cortex-M4处理器的寄存器简介 4.4  C实现的异常处理 4.5 栈帧 4.6 异常返回值 4.7 异常流程 5. 问题定位 5.1 确定栈指针 5.2 确定LR的值 5.3 查询C代码位置 5.4 确定PSP栈 5.5 处理方法 6. 总结   

    2023年04月15日
    浏览(66)
  • STM32-调用 vTaskStartScheduler API 后出现 HardFault

    STM32 移植 FreeRTOS 后调用 vTaskStartScheduler() 后出现 HardFault 异常。 原因分析: FreeRTOS 配置头文件 FreeRTOSConfig.h 中与中断有关的配置和通过系统接口 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) 设置的中断分组冲突。 在 FreeRTOSConfig.h 中设置的中断最低优先级为 15 ,说明 可编程中

    2024年01月22日
    浏览(39)
  • stm32cube出现Hardfault的调试方法(emwin死机)

    在STM32芯片开发中,当程序运行时出现HardFault异常,通常是由于以下原因引起的: 程序中出现了无效的指令,比如指向不存在的内存地址或未初始化的指针; 栈溢出,导致程序无法正常运行; 部分寄存器值异常,例如SP(栈指针)、PC(程序计数器)、LR(链接寄存器)等;

    2024年02月07日
    浏览(40)
  • STM32单片机的 Hard-Fault 硬件错误问题追踪与分析

    目录 1、了解STM32的寄存器组 1.1、Cortex-M3的通用寄存器组 1.1.1、通用目的寄存器 R0-R7 1.1.2、通用目的寄存器 R8-R12 1.1.3、R13 — 堆栈指针(SP) 1.1.4、R14 — 连接寄存器(LR) 1.1.5、R15 — 程序计数器(PC) 1.2、Cortex‐M3 的特殊功能寄存器 1.2.1、xPSR — 状态寄存器 1.2.2、中断屏蔽寄

    2024年02月13日
    浏览(42)
  • 从原因到解决方案,深入剖析网络错误问题

    当计算机系统中的客户端(例如浏览器、应用程序等)尝试连接到远程服务器时,网络连接错误是一种常见的问题。这种错误可能会对用户造成很大的困扰,因为它可能导致无法访问网站或无法使用某些在线应用程序。而网络错误其实是我们日常开发中很难完全避免掉的一个

    2024年02月07日
    浏览(62)
  • (STM32基础)STM32常用中断介绍

    主程序运行过程中,出现中断请求,编译器会保护主程序断点现场,跳出优先处理中断,中断程序运行完成后,跳回主程序继续运行断点后的主程序。 注意分清:中断、中断优先级、中断嵌套三个概念。 1、 中断通道就是中断源 ,STM32具体到某个型号不一定有68个中断这么全

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包