搜索
bottom↓
回复: 27

STM32 任何程序 都进hardfault。。。。

[复制链接]

出0入0汤圆

发表于 2013-8-25 17:06:19 | 显示全部楼层 |阅读模式
自己做了一个STM32F103ZET6的板子,JTAG,VCC,VBAT,VDDA,BOOT1/0,VSSA,GND,晶振都已经检查正常,JTAG能读出内核和ID,能下进去程序,但是运行任何程序都直接进hardfault,同样程序,同样设置,在红牛的zet6板子上工作正常。求分析办法?难道芯片焊接坏掉了?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-8-25 17:12:14 | 显示全部楼层
启动模式对了么?程序里面开了中断么,先关掉所有中断试一下

出0入0汤圆

 楼主| 发表于 2013-8-25 17:41:24 | 显示全部楼层
BEdiy 发表于 2013-8-25 17:12
启动模式对了么?程序里面开了中断么,先关掉所有中断试一下

点灯这样的程序都会进hardfault

出0入0汤圆

发表于 2013-8-25 18:12:21 | 显示全部楼层
表示我也想知道原因

出0入0汤圆

发表于 2013-8-25 18:19:35 | 显示全部楼层
仿真,找到是哪个语句导致的是关键。

出0入0汤圆

 楼主| 发表于 2013-8-25 18:41:37 | 显示全部楼层
lcofjp 发表于 2013-8-25 18:19
仿真,找到是哪个语句导致的是关键。

我F11单步,走到  LDR     R0, =__main      
                    BX      R0  就进中断了

出0入0汤圆

 楼主| 发表于 2013-8-25 18:45:07 | 显示全部楼层
现在对hardfault的异常,有没有什么好的处理办法?我发现使用MSP SP=0x200003f8, LR= 0xfffffff9,如何找到中断前压栈前最后一条语句?网上说的都不清楚,互相复制粘贴

出0入0汤圆

发表于 2013-8-25 18:48:37 | 显示全部楼层
Mrdingding 发表于 2013-8-25 18:45
现在对hardfault的异常,有没有什么好的处理办法?我发现使用MSP SP=0x200003f8, LR= 0xfffffff9,如何找到 ...

主堆栈 的 第7个是出错的PC指针。

出0入0汤圆

发表于 2013-8-25 18:48:49 | 显示全部楼层
这个就得靠你自己了,看看寄存器的内容是否异常,慢慢调。

出0入0汤圆

 楼主| 发表于 2013-8-25 18:57:39 | 显示全部楼层
channe 发表于 2013-8-25 18:48
主堆栈 的 第7个是出错的PC指针。

能否具体说下怎么计算,我总在hardfault这里困惑,前面弄系统也在这里难受了很久,今天终于快找到希望了。感谢

出0入42汤圆

发表于 2013-8-25 19:04:09 | 显示全部楼层
LZ把工程打包传上来看看吧,就流水灯那个

出0入0汤圆

 楼主| 发表于 2013-8-25 19:16:48 | 显示全部楼层
wshtyr 发表于 2013-8-25 19:04
LZ把工程打包传上来看看吧,就流水灯那个

都是用红牛自带的历程,红牛的板子上能工作,我这个板子什么都不改,直接下载进去,就不能工作,进hardfault

出0入0汤圆

发表于 2013-8-25 19:39:30 | 显示全部楼层
用的是多大的晶振?我曾经也遇到过,因为我用了16M的晶振,有时候能正常工作,一段时间后就进HARDFAULT,后来换8M晶振就好了

出0入0汤圆

发表于 2013-8-25 19:43:41 | 显示全部楼层
Mrdingding 发表于 2013-8-25 18:57
能否具体说下怎么计算,我总在hardfault这里困惑,前面弄系统也在这里难受了很久,今天终于快找到希望了 ...

进入错误中断之后,
查看 MSP 的地址,
用内存查看器看这个地址,
转成32位的格式
第七个就是PC地址,
然后看汇编窗口里这个地址对应C的行。

出0入0汤圆

 楼主| 发表于 2013-8-25 20:05:39 | 显示全部楼层
eastboy 发表于 2013-8-25 19:39
用的是多大的晶振?我曾经也遇到过,因为我用了16M的晶振,有时候能正常工作,一段时间后就进HARDFAULT,后 ...

晶振没问题,用的8M的,现在在startup_stm32f10x_hd.s中的LDR     R0, =__main 时候进hardfault
                                                                                   BX      R0

出0入0汤圆

发表于 2013-8-25 20:17:11 | 显示全部楼层
设置main函数就挂了?

出0入0汤圆

发表于 2013-8-25 17:06:20 | 显示全部楼层
本帖最后由 goolloo 于 2013-8-25 20:33 编辑


PS。图上有个错误,第六行是RETURN ADDRESS,但是编辑软件不太好,自动换行了,第七行是PSR,第八行是LR

第一步是要判断地址在MSP 还是PSP,但是我忘了。。。

第二步,根据里面的地址直接在memory里面查找,然后把memory窗口的宽度调整到32位的宽度(8个F)

然后,第六行就是返回地址了。搜索对应的地址就应该可以找到问题了。

方法来自http://bawomingyun.blog.163.com/ ... 287201263195918867/

截图是我自己随便找的工程,没有问题,所以地址不是对应的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-8-25 20:37:53 | 显示全部楼层
goolloo 发表于 2013-8-25 20:17
设置main函数就挂了?

所有程序,随便运行到  BX    R0就挂了。。

出0入42汤圆

发表于 2013-8-25 20:43:24 | 显示全部楼层
记得红牛自带的例程用的是老的2.x.x的库,在main函数之前是不调用SystemInit函数的,既然LZ一开始就进hardfault了,用跟踪堆栈的方法未必有效。
LZ可以试试我这个空工程,看能跑到main不。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-26 00:51:37 | 显示全部楼层
mark            

出0入0汤圆

 楼主| 发表于 2013-8-26 15:55:02 | 显示全部楼层
分数给17楼了,还有感谢19楼,问题解决,换了一个片子一切正常了。。。快速焊接,片子都会坏

出0入0汤圆

 楼主| 发表于 2013-8-26 15:55:56 | 显示全部楼层
跟17楼学会了Hardfault的处理方法,十分感谢

出0入0汤圆

发表于 2015-7-15 09:28:00 | 显示全部楼层
我也遇到harddefault了,不是芯片问题

出0入0汤圆

发表于 2016-6-27 00:07:22 | 显示全部楼层
mark.................

出0入0汤圆

发表于 2016-7-10 22:12:45 | 显示全部楼层
MARK,hardfault现场还原!感谢各位!

出0入0汤圆

发表于 2016-7-31 18:36:04 | 显示全部楼层
本帖最后由 csq463276932 于 2016-7-31 18:40 编辑

stm32 HardFault_Handler调试及问题查找方法   

http://www.51hei.com/bbs/dpj-39846-1.html


STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。

出现问题时排查的方法:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Returnaddress、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址。

出0入0汤圆

发表于 2016-8-15 17:18:21 | 显示全部楼层
csq463276932 发表于 2016-7-31 18:36
stm32 HardFault_Handler调试及问题查找方法   

http://www.51hei.com/bbs/dpj-39846-1.html

加一句代码再借用KEIL MDK直接定位,好用。

出0入0汤圆

发表于 2016-8-15 17:39:09 | 显示全部楼层
学习了。 谢谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表