原子哥和众高手们好,我的做项目对体积有要求,所以选择了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的地址设置有关,不知道这里应该是怎么设置,原版的库函数是否需要修改,谢谢原子哥和众高手们 最后附上程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
想了所有办法,还是不行,最后换了块新的芯片从新焊了板子,就在没有出现问题,不好意思了,自己折腾好几天...一直以为是配置的工程问题,不知道芯片在什么情况下可能已经有所损坏了。
仅仅是设置中断向量偏移.一般不会导致进入hardfault的.
你直接用我们寄存器版本的代码,移植到你的板子试试吧.用我们提供的SYSTEM文件夹,不要用官方的,试试.
一周热门 更多>