你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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)