macompengluo 发表于 2019-10-28 15:14:34

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
   谢谢大家!



发表于 2019-10-28 16:17:00

楼主,APP对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。

macompengluo 发表于 2019-10-29 08:39:24

安 发表于 2019-10-28 16:17
楼主,APP对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。 ...

多谢回复!
APP的中断向量地址有重新设置的:
#define VECT_TAB_OFFSET0x4000U
另外,硬件复位之后APP能够正常运行,也说明APP实际已经正确地进行了升级。

发表于 2019-10-29 09:18:14

boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断?

caoenq 发表于 2019-10-29 13:37:53

各种奇葩的问题啊。

macompengluo 发表于 2019-10-30 10:26:44

安 发表于 2019-10-29 09:18
boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断?

试过了,在Bootloader跳转之前关中断__disable_irq(),在Application初始化时再开中断__enable_irq();也不行。有时间可以帮忙看看源代码吗?我附了百度网盘的链接。多谢了!

macompengluo 发表于 2019-10-30 10:27:37

caoenq 发表于 2019-10-29 13:37
各种奇葩的问题啊。

是啊,我刚从SiliconLabs切到ST,遇到各种各样的问题,不过好在大部分都搞定了,现在就差在线升级最后跳转的这一步了

发表于 2019-10-30 13:51:28

不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而不是单纯的disable。

macompengluo 发表于 2019-11-1 14:28:10

安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...

这些不用的中断我根本都没开启过,何来关闭之说?

macompengluo 发表于 2019-11-1 14:29:57

安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...

麻烦有空帮忙看看我的源代码,多谢了!
页: [1] 2
查看完整版本: STM32L073RZ Bootloader跳转到Application问题