STM32L073RZ Bootloader跳转到Application问题
我在用“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对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。 安 发表于 2019-10-28 16:17
楼主,APP对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。 ...
多谢回复!
APP的中断向量地址有重新设置的:
#define VECT_TAB_OFFSET0x4000U
另外,硬件复位之后APP能够正常运行,也说明APP实际已经正确地进行了升级。 boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断? 各种奇葩的问题啊。 安 发表于 2019-10-29 09:18
boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断?
试过了,在Bootloader跳转之前关中断__disable_irq(),在Application初始化时再开中断__enable_irq();也不行。有时间可以帮忙看看源代码吗?我附了百度网盘的链接。多谢了! caoenq 发表于 2019-10-29 13:37
各种奇葩的问题啊。
是啊,我刚从SiliconLabs切到ST,遇到各种各样的问题,不过好在大部分都搞定了,现在就差在线升级最后跳转的这一步了 不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而不是单纯的disable。 安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...
这些不用的中断我根本都没开启过,何来关闭之说? 安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...
麻烦有空帮忙看看我的源代码,多谢了!
页:
[1]
2