你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32程序停在void HardFault_Handler(void)
[复制链接]
勒布朗
提问时间:2013-9-7 12:17 /
程序停在void HardFault_Handler(void),求大神啊,快苦恼死了
赞
0
收藏
0
评论
6
分享
发布时间:2013-9-7 12:17
举报
请先
登录
后回复
6个回答
Chris-392747
回答时间:2013-9-7 23:30:36
a0a.1 0b0c
RE:stm32程序
问题太不详细了吧
赞
0
评论
回复
支持
反对
沐紫
回答时间:2013-9-9 11:30:31
a0a.1 0b0c
RE:stm32程序停在void HardFault_Handler(void)
楼主把代码贴出来,大伙帮你看看吧
赞
0
评论
回复
支持
反对
wenshijian
回答时间:2013-9-9 12:35:58
a0a.1 0b0c
RE:stm32程序停在void HardFault_Handler(void)
一般是FLASH访问错误,估计是你的指针指向的地址超出了地址区间。
不过也可能是其他原因,具体问题具体分析
赞
0
评论
回复
支持
反对
fengye5340
回答时间:2013-9-10 15:27:09
a0a.1 0b0c
RE:stm32程序停在void HardFault_Handler(void)
这个问题在使用F3F4的时候经常碰到,有时候能够很快就解决了,有时候也无法找到原因。
在打开FPU功能后,需要确认 系统启动文件里面是否开启了FPU功能,预定义里面是否加入FPU功能的编译码,还有,初始化变量最好设置为0,别空。
总体来说,出现这个错误主要是两个方面:
1、内存溢出或者访问越界
2、堆栈溢出。增加堆栈的大小。
出现问题时排查的方法:(建议参考一下)
1、发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
2、默认的HardFault_Handler处理方法是B .将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿。
这个有时候可能需要在反汇编模式下调试,因为可以是程序跑飞一会儿才出现HardFault_Handler。
3、还是将中断函数修改,打印中断时的一些信息:
HardFault_Hander()定义如下:
[plain] view plaincopyprint?
void HardFault_Handler(void)
{
uint32_t r_sp ;
r_sp = __get_PSP(); //获取SP的值
PERROR(ERROR,Memory Access Error!);
Panic(r_sp);
while (1);
}
赞
0
评论
回复
支持
反对
xiahouzuoxin
回答时间:2013-10-12 00:19:38
a0a.1 0b0c
回复:stm32程序停在void HardFault_Handler(void)
一般可能是指针使用的问题,调试方法请参考我在CSDN的博文http://blog.csdn.net/xiahouzuoxin/article/details/10068455
赞
0
评论
回复
支持
反对
jsam123
回答时间:2013-10-12 23:18:19
a0a.1 0b0c
回复:stm32程序停在void HardFault_Handler(void)
检查一下数据类型
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:stm32程序
RE:stm32程序停在void HardFault_Handler(void)
RE:stm32程序停在void HardFault_Handler(void)
不过也可能是其他原因,具体问题具体分析
RE:stm32程序停在void HardFault_Handler(void)
在打开FPU功能后,需要确认 系统启动文件里面是否开启了FPU功能,预定义里面是否加入FPU功能的编译码,还有,初始化变量最好设置为0,别空。
总体来说,出现这个错误主要是两个方面:
1、内存溢出或者访问越界
2、堆栈溢出。增加堆栈的大小。
出现问题时排查的方法:(建议参考一下)
1、发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
2、默认的HardFault_Handler处理方法是B .将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿。
这个有时候可能需要在反汇编模式下调试,因为可以是程序跑飞一会儿才出现HardFault_Handler。
3、还是将中断函数修改,打印中断时的一些信息:
HardFault_Hander()定义如下:
[plain] view plaincopyprint?
void HardFault_Handler(void)
{
uint32_t r_sp ;
r_sp = __get_PSP(); //获取SP的值
PERROR(ERROR,Memory Access Error!);
Panic(r_sp);
while (1);
}
回复:stm32程序停在void HardFault_Handler(void)
回复:stm32程序停在void HardFault_Handler(void)