stm32F405RGT6概率性进入硬件错误中断hard fault

2019-07-21 03:40发布

原子哥和众高手们好,我的做项目对体积有要求,所以选择了stm32F405RGT6这种64角的芯片,使用官方提供的库函数开发。写了最简单的IO口亮灯的程序,程序会概率性卡死到无法启动,使用JLink发现程序会概率性的进入hard fault,一步一步寻找出错点,发现在官方文件在system_stm32f4xx.c中的 systeminit() 函数在执行最后一句  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;的时候会概率性进入hard fault。而且发现只要将断点设在这里,让程序停一下,再执行就不会进入hard fault,感觉是程序在执行main函数之前哪里没有准备好,需要停一下才能顺畅。

在组建工程时我按照探索者教程中的工程组件方式组建,其中stm32F405RGT6和stm32F407ZGT6的工程组建只有芯片选择不同,其他文件都是通用的,在网上查过很多,在micro Lib 的选项打钩了也没有解决问题。上边那句  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;应该是和flash的地址设置有关,不知道这里应该是怎么设置,原版的库函数是否需要修改,谢谢原子哥和众高手们  最后附上程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
crimsonblood
1楼-- · 2019-07-21 04:37
回复【4楼】正点原子:
---------------------------------
想了所有办法,还是不行,最后换了块新的芯片从新焊了板子,就在没有出现问题,不好意思了,自己折腾好几天...一直以为是配置的工程问题,不知道芯片在什么情况下可能已经有所损坏了。
crimsonblood
2楼-- · 2019-07-21 07:33
我自己顶一下,这种错误是在是太难找了
crimsonblood
3楼-- · 2019-07-21 10:19
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-21 15:16
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
仅仅是设置中断向量偏移.一般不会导致进入hardfault的.
你直接用我们寄存器版本的代码,移植到你的板子试试吧.用我们提供的SYSTEM文件夹,不要用官方的,试试.

一周热门 更多>