OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4237|回复: 5

STM32F407进入HardFault异常

[复制链接]

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
发表于 2018-4-19 16:11:37 | 显示全部楼层 |阅读模式
10金钱
这两天在移植STemWIN,还没有上操作系统,把原子哥移植好的探索者F407ZGT6的程序移植到了自己的开发板上,用的都是STM32F407ZGT6,也使用的1MB的内存,型号是一样的,所以在移植的过程中需要修改的地方比较少,都是修改引脚配置,在把各个模块都移植成功的前提下,才移植了EMWIN,但是移植上去的EMWIN总会进入HartFault异常,当不使用EMWIN的时候又是正常的,只要使用EMWIN,程序就会进入HartFault异常,EMWIN的配置都按照自己开发板进行了修改,肯定没有遗漏的地方。

精确的数据访问冲突

精确的数据访问冲突

指令访问冲突

指令访问冲突

上面的截图就是在HardFault输出的信息,从输出的信息可以看到是由于BUS总线异常引起的,要么是精确指令的访问冲突,要么是指令访问冲突,不知道有没有人遇到过这种情况,麻烦告诉一下这种错误应该怎么解决,非常感谢。

最佳答案

查看完整内容[请看2#楼]

小伙伴们,我的问题终于解决啦! 说起来很是坎坷啊,其实每个模块单独调试的时候都是正常的,但是一加上EMWIN,就进入硬件异常。期间做了很多尝试,甚至把ARM Cortex-M3与Corex-M4权威指南其中的一些章节看了一遍,说实话,讲的真TM的深奥,有些东西太偏底层,理解起来不是很容易,然而问题还是没有解决。 奇迹发生在今天早上,在查找问题无望的情况下。我重新建立了工程,把需要用到的模块调试之后加入了EMWIN,问 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
 楼主| 发表于 2018-4-19 16:11:38 | 显示全部楼层
       小伙伴们,我的问题终于解决啦!  说起来很是坎坷啊,其实每个模块单独调试的时候都是正常的,但是一加上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,搞的我挺懵逼的,反正现在是没有进入硬件异常了,我也不想再钻牛角尖了,后面有时间在慢慢研究一波吧。
FSMC.png
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
 楼主| 发表于 2018-4-19 21:32:21 | 显示全部楼层
    问题大概找到了,现在的现象是不使用外部的SRAM程序就是正常的,但是SRAM在单独测试的时候也是正常的,所以究竟是什么原因导致我使用外部的SRAM的时候进入HardFault暂时还不清楚,我用的开发板是启明的STM32F407ZGT6开发板,是一个最小系统板,多一个SRAM可以使用。   至于具体原因,正在排查。  希望遇到过这个问题的小伙伴或者是知道是什么原因的大神能给予一个正确的答案。
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
 楼主| 发表于 2018-4-19 22:38:53 | 显示全部楼层
   还是有问题,虽然没有使用SRAM,但是我在程序中使用GUI_SetBkColor();函数有问题,会进入HardFault.
(W5[5C~MC4HNV([E$[M0VN5.png
D]]FVZ{3@DC%OSPK~E%T(]I.png
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2018-7-14
在线时间
2 小时
发表于 2018-7-26 01:00:58 | 显示全部楼层
没看到GUI的初始函数。
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
发表于 2018-9-21 09:50:27 | 显示全部楼层
我在一个工程里面移植串行通信协议也遇到了类似问题。 很奇怪。  然后在“Option for target”窗口里的“target”栏把
“Use MicroLIB”取消打钩之后,程序初始化通信测试可执行。但是到了while(1)循环中,又会调到HardFault
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 07:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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