STM32F407进入HardFault异常

2019-07-20 06:02发布

这两天在移植STemWIN,还没有上操作系统,把原子哥移植好的探索者F407ZGT6的程序移植到了自己的开发板上,用的都是STM32F407ZGT6,也使用的1MB的内存,型号是一样的,所以在移植的过程中需要修改的地方比较少,都是修改引脚配置,在把各个模块都移植成功的前提下,才移植了EMWIN,但是移植上去的EMWIN总会进入HartFault异常,当不使用EMWIN的时候又是正常的,只要使用EMWIN,程序就会进入HartFault异常,EMWIN的配置都按照自己开发板进行了修改,肯定没有遗漏的地方。

精确的数据访问冲突 精确的数据访问冲突 指令访问冲突 指令访问冲突
上面的截图就是在HardFault输出的信息,从输出的信息可以看到是由于BUS总线异常引起的,要么是精确指令的访问冲突,要么是指令访问冲突,不知道有没有人遇到过这种情况,麻烦告诉一下这种错误应该怎么解决,非常感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
晨曦的love
1楼-- · 2019-07-20 07:43
       小伙伴们,我的问题终于解决啦!  说起来很是坎坷啊,其实每个模块单独调试的时候都是正常的,但是一加上EMWIN,就进入硬件异常。期间做了很多尝试,甚至把ARM Cortex-M3与Corex-M4权威指南其中的一些章节看了一遍,说实话,讲的真TM的深奥,有些东西太偏底层,理解起来不是很容易,然而问题还是没有解决。
     奇迹发生在今天早上,在查找问题无望的情况下。我重新建立了工程,把需要用到的模块调试之后加入了EMWIN,问题还是之前那样,仍然进入了硬件异常。从HardFault硬件异常输出的信息可以看到,我们次进入硬件异常其实都是因为BUS ERROR,也就总线异常引起的,只不过因为没有开启MemMeng、BUS、USE三个异常,而导致直接进入了HardFault异常。错误原因中看到详细信息,基本上每次都是指令冲突访问和精确冲突的数据访问,于是我天马星空的想到了外部SRAM的问题,因为昨天的调试过程中,有一段时间发现不适用外部的SRAM,EMWIN是正常工作的,虽然之后还是进入了HardFault。
     基于以上两点,我想到了可能是FSMC初始化的问题,因为LCD和外部的SRAM都用到了FSMC,之前学习LCD的时候懒得去看LCD的手册,直接把原子哥调好的时序拿来用了,所以我在工程中把FSMC的时间稍微做了修改,把事件延长了一点。然后编译,烧录到开发板当汇总,发现程序正常工作了。  真TMD欲哭无泪啊,问题终于找到了。
     然而,当我把FSMC的参数有改回去的时候,发现程序还是正常工作的,与之前进入HardFault的代码一模一样,程序居然没有进入HardFault,搞的我挺懵逼的,反正现在是没有进入硬件异常了,我也不想再钻牛角尖了,后面有时间在慢慢研究一波吧。
晨曦的love
2楼-- · 2019-07-20 12:54
    问题大概找到了,现在的现象是不使用外部的SRAM程序就是正常的,但是SRAM在单独测试的时候也是正常的,所以究竟是什么原因导致我使用外部的SRAM的时候进入HardFault暂时还不清楚,我用的开发板是启明的STM32F407ZGT6开发板,是一个最小系统板,多一个SRAM可以使用。   至于具体原因,正在排查。  希望遇到过这个问题的小伙伴或者是知道是什么原因的大神能给予一个正确的答案。
晨曦的love
3楼-- · 2019-07-20 18:53
 精彩回答 2  元偷偷看……
大雁JeffreyYan
4楼-- · 2019-07-20 23:26
没看到GUI的初始函数。
xiaokun
5楼-- · 2019-07-21 01:58
我在一个工程里面移植串行通信协议也遇到了类似问题。 很奇怪。  然后在“Option for target”窗口里的“target”栏把
“Use MicroLIB”取消打钩之后,程序初始化通信测试可执行。但是到了while(1)循环中,又会调到HardFault

一周热门 更多>