这两天在移植STemWIN,还没有上操作系统,把原子哥移植好的探索者F407ZGT6的程序移植到了自己的开发板上,用的都是STM32F407ZGT6,也使用的1MB的内存,型号是一样的,所以在移植的过程中需要修改的地方比较少,都是修改引脚配置,在把各个模块都移植成功的前提下,才移植了EMWIN,但是移植上去的EMWIN总会进入HartFault异常,当不使用EMWIN的时候又是正常的,只要使用EMWIN,程序就会进入HartFault异常,EMWIN的配置都按照自己开发板进行了修改,肯定没有遗漏的地方。
精确的数据访问冲突
指令访问冲突
上面的截图就是在HardFault输出的信息,从输出的信息可以看到是由于BUS总线异常引起的,要么是精确指令的访问冲突,要么是指令访问冲突,不知道有没有人遇到过这种情况,麻烦告诉一下这种错误应该怎么解决,非常感谢。
奇迹发生在今天早上,在查找问题无望的情况下。我重新建立了工程,把需要用到的模块调试之后加入了EMWIN,问题还是之前那样,仍然进入了硬件异常。从HardFault硬件异常输出的信息可以看到,我们次进入硬件异常其实都是因为BUS ERROR,也就总线异常引起的,只不过因为没有开启MemMeng、BUS、USE三个异常,而导致直接进入了HardFault异常。错误原因中看到详细信息,基本上每次都是指令冲突访问和精确冲突的数据访问,于是我天马星空的想到了外部SRAM的问题,因为昨天的调试过程中,有一段时间发现不适用外部的SRAM,EMWIN是正常工作的,虽然之后还是进入了HardFault。
基于以上两点,我想到了可能是FSMC初始化的问题,因为LCD和外部的SRAM都用到了FSMC,之前学习LCD的时候懒得去看LCD的手册,直接把原子哥调好的时序拿来用了,所以我在工程中把FSMC的时间稍微做了修改,把事件延长了一点。然后编译,烧录到开发板当汇总,发现程序正常工作了。 真TMD欲哭无泪啊,问题终于找到了。
然而,当我把FSMC的参数有改回去的时候,发现程序还是正常工作的,与之前进入HardFault的代码一模一样,程序居然没有进入HardFault,搞的我挺懵逼的,反正现在是没有进入硬件异常了,我也不想再钻牛角尖了,后面有时间在慢慢研究一波吧。
“Use MicroLIB”取消打钩之后,程序初始化通信测试可执行。但是到了while(1)循环中,又会调到HardFault
一周热门 更多>