1、时钟不匹配问题
我遇到的情况是由于bootload和APP两个代码的时钟源不匹配导致app不运行。bootload用了内部时钟,APP用了外部8M时钟。导致跳转到APP代码时运行到时钟配置就卡死,而时钟没配置成功就无法初始化IO口,也没法发出信号做出提示,看着像app区的代码不运行,但其实还是运行了的。时钟初始化不成功卡死,设置了看门狗,这个时候就会复位。
处理方式:将bootload和APP的时钟源配置成相同的。
2、跳转APP后中断卡死
现象:运行之后发现能正常跳转至APP程序中,并且没有跑飞,只是无法进入中断,其他可以正常运行。
解决办法1:程序下载完毕后 先关闭总中断,__set_FAULTMASK(1);然后软件复位,复位完后只初始化所需要的设备,判断标志位,关闭已经打开的对应中断,跳转APP程序。
解决办法2:程序下载完毕后 先关闭总中断,__set_FAULTMASK(1);然后软件复位,复位完后判断标志位,关闭总中断__set_FAULTMASK(1),跳转APP程序,打开总中断__set_FAULTMASK(0),开始运行代码。
原因:FAULTMASK是一个中断屏蔽寄存器,当它置1时,只有NMI能响应,其他的中断或者fault都无法响应,为0的时候表示没有异常,才能正常响应中断,属于特权级。 因此,在进入APP程序中,应该使用__set_FAULTMASK(0);打开FAULTMASK全局中断,可以加在SystemInit()函数开始部分或者main()函数中。
软件复位:强制整个系统复位,包括CPU内核、外设、时钟等,等效于硬件复位
地址跳转:仅改变程序执行流,不重置硬件状态(如外设寄存器、中断标志位)

最低0.47元/天 解锁文章
2937

被折叠的 条评论
为什么被折叠?



