STM32如何查找hardfault原因
STM32出现HardFault_Handler故障的原因主要有两个方面:
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。
出现问题时排查的方法:
发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。
注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
编写问题代码如下:
void StackFlow(void)
{
int a[3],i;
for(i=0; i<10000; i++)
{
a[i]=1;
}
}
void SystemInit(void)
{
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset CFGR register */
RCC->CFGR = 0x00000000;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;
StackFlow();
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
。。。。。。。。。。。。。。
}
DEBUG如下图
SP值为0x20008560,查看堆栈里面的值依次为R0~R3、R12、LR、PC、XPRS, 例如R0(10 27 00 00), 显然堆栈后第21个字节到24字节即为LR,该地址0x08001FFD即为异常前PC将要执行的下一条指令地址(即StackFlow()后面的语句处 RCC->CR &= (uint32_t)0xFFFBFFFF)
另一种方法:
默认的HardFault_Handler处理方法不是B .这样的死循环么?楼主将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿
__asm void wait()
{
BX lr
}
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
wait();
}
STM32如何查找hardfault原因相关推荐
- (五)stm32工程代码HardFault异常查错调试方法
(五)stm32工程代码HardFault异常查错调试方法 参考文章: (1)(五)stm32工程代码HardFault异常查错调试方法 (2)https://www.cnblogs.com/zhan ...
- stm32 常见错误及原因【持续更新】
stm32 开发中,经常会出现一些错误,下面总结一些常见错误及可能原因: 1,Default_Handler 出一这个错误 最常见的原因是 开启了中断,但没有对应的中断响应函数 2,HardFault ...
- STM32跳入HardFault Handler中断分析
为什么80%的码农都做不了架构师?>>> ARM芯片STM32出现HardFault Handler硬件中断一般有两种情况: 访问越界导致的Acess Violation或者内 ...
- 酒店管理系统软件测试找bug,软件测试查找bug原因
想要修复bug,首先面临找到bug原因的难题,好比一根针掉到地上,怎么找到这根针?这个问题就交给各国大妈去解决了 中国大妈会根据针掉落的方向,落地点等,去确定查找范围,然后目测去寻找到针 德国大妈会把 ...
- 利用万用表查找漏电原因
电器是我们日常生活中不可分割的一部分,形形色色的日用电器,随着时间的增加,部分电器电路零件老化与问题,再加上阴雨潮湿的天气,电器电路难免会出现漏电的状况.漏电问题的原因有很多,经常会报修检查,相信在检 ...
- 快速排序为何先要从右向左查找的原因
假设我们现在对"6 1 2 7 9 3 4 5 10 8"这个10个数进行排序.首先在这个序列中随便找一个数作为基准数.为了方便,就让第一个数6作为基准数吧.接下来,需要将这个序列 ...
- stm32怎么查看什么原因引起的nmi_为什么会有口臭,口臭是什么原因引起的,口臭是怎么回事...
口臭是让人尴尬的问题,严重影响了我们的日常生活,说话总是被嫌弃,不说谈恋爱被嫌弃,工作更是各种不顺,关键是试了各种偏方,却都没用,这才是最让人苦恼的. 一般健康的体质是不会有口臭的,天生自带口臭的很少 ...
- Android Studio查找错误原因
为什么80%的码农都做不了架构师?>>> gradlew compileDebugSources --stacktrace -info 参考: https://www.cnbl ...
- STM32串口通讯数据丢失原因分析及解决办法
在进行串口通讯实验时,一时不仔细可能会发现通讯不正常,数据丢失的现象,包括丢失第一个字符,或只收到最后一个字符等等,本文接下来将就这类问题展开讨论. 首先是通过MCU向上位机发送数据: 若程序如下图所 ...
最新文章
- 【ABAP】SUBMIT程序相互调用
- 面向.NET开发人员的Dapr——分布式世界
- 11 MM配置-主数据-定义物料类型的编码范围
- 蚂蚁金服开源服务注册中心 SOFARegistry
- springboot添加ojdbc6报错
- labeltool标注工具使用说明
- STM32F4 + HAL库 + W25Q256的验证
- 【学习总结匈牙利算法到KM算法】
- 显著性水平与p值的区别
- 计算机键盘怎么输入平方,word里平方2怎么打_在word里输入㎡符号的方法
- Python基础 [...,]三点切片
- VS2013使用教程总结(1)---忽略安全检查
- ArcGIS工具 - 批量删除空图层
- scale-free
- matlab ax=b x=,matlab 求解 Ax=B 时所用算法
- html的音频在线地址,HTML 音频(Audio)
- 人工神经网络原理及应用,人工神经网络教程PDF
- java 面试题带答案,大量教程
- Greenplum集群部署和架构优化,我总结了5000字的心得
- DELL PC服务器PowerEdge 管理工具OMSA的使用
热门文章
- 不是技术也能看懂搜索引擎
- 阿里巴巴P9大佬雷卷与中间件小哥重新定义:高段位程序员的学习之道
- Java线程详解(13)-锁
- 03.native方法(JNI)
- python json库安装_win 安装python的cjson库
- 成功解决ModuleNotFoundError: No module named ‘sklearn.lda‘
- DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍)、全景分割挑战简介、案例应用等配图集合之详细攻略
- DL之CNN优化技术:学习卷积神经网络CNN的优化、实践经验(练习调参)、从代码深刻认知CNN架构之练习技巧
- ML之DR之PCA:利用PCA对手写数字图片识别数据集进行降维处理(理解PCA)
- BC:带你温习并解读《中国区块链技术和应用发展白皮书》—概述