我在用“NUCLEO-L073RZ”开发板调试IAP功能。 Bootloader定义在0x8000000开始的16KB地址范围,Application定义在0x8004000开始的Flash地址。 已经通过GUI和Bootloader,将一个LED闪烁功能的Application下载到了MCU的0x8004000开始的Flash地址(通过软件已经读出Flash数据) Bootloader程序里在最后跳转到Application的程序调用之后,发现程序已经跳出了Bootloader,但是Application并没有运行起来; 我后来又尝试了直接软件复位MCU(因为我的Bootloader程序初始化时会判断,如果Application的Flash地址有数据,则会跳转到Application去),Application也没有运行起来; 但是,最后当我按了复位按键之后,Application就运行起来了! 百思不得其解!我把源代码放到了百度网盘,有兴趣的朋友请帮忙一起分析一下: Bootloader: https://pan.baidu.com/s/1uUU7lItNWMpmK_DJ9cknDg Application: https://pan.baidu.com/s/16N-lUtGi0Bx0E98Uf5nmsA 谢谢大家! |
多谢回复!
APP的中断向量地址有重新设置的:
#define VECT_TAB_OFFSET 0x4000U
另外,硬件复位之后APP能够正常运行,也说明APP实际已经正确地进行了升级。
试过了,在Bootloader跳转之前关中断__disable_irq(),在Application初始化时再开中断__enable_irq();也不行。有时间可以帮忙看看源代码吗?我附了百度网盘的链接。多谢了!
是啊,我刚从SiliconLabs切到ST,遇到各种各样的问题,不过好在大部分都搞定了,现在就差在线升级最后跳转的这一步了
评分
查看全部评分
这些不用的中断我根本都没开启过,何来关闭之说?
麻烦有空帮忙看看我的源代码,多谢了!