你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L073RZ Bootloader跳转到Application问题

[复制链接]
希望在转角 提问时间:2019-10-28 15:14 /
悬赏10ST金币未解决
     我在用“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
     谢谢大家!



收藏 评论14 发布时间:2019-10-28 15:14

举报

14个回答
废鱼 回答时间:2019-10-28 16:17:00
楼主,APP对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。
希望在转角 回答时间:2019-10-29 08:39:24
安 发表于 2019-10-28 16:17
楼主,APP对应的中断向量地址是否有重新设置。需要根据配置的FLASH地址进行配置。 ...

多谢回复!
APP的中断向量地址有重新设置的:
#define VECT_TAB_OFFSET  0x4000U
另外,硬件复位之后APP能够正常运行,也说明APP实际已经正确地进行了升级。
废鱼 回答时间:2019-10-29 09:18:14
boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断?
Ankky 回答时间:2019-10-29 13:37:53
各种奇葩的问题啊。
希望在转角 回答时间:2019-10-30 10:26:44
安 发表于 2019-10-29 09:18
boot中用到哪些中断?再跳转到APP后,是否没有关闭无用的中断?

试过了,在Bootloader跳转之前关中断__disable_irq(),在Application初始化时再开中断__enable_irq();也不行。有时间可以帮忙看看源代码吗?我附了百度网盘的链接。多谢了!
希望在转角 回答时间:2019-10-30 10:27:37
caoenq 发表于 2019-10-29 13:37
各种奇葩的问题啊。

是啊,我刚从SiliconLabs切到ST,遇到各种各样的问题,不过好在大部分都搞定了,现在就差在线升级最后跳转的这一步了
废鱼 回答时间:2019-10-30 13:51:28
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而不是单纯的disable。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

希望在转角 回答时间:2019-11-1 14:28:10
安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...

这些不用的中断我根本都没开启过,何来关闭之说?
希望在转角 回答时间:2019-11-1 14:29:57
安 发表于 2019-10-30 13:51
不是关闭中断,是要把你不用的中断配置设置为关闭。比如USB中断,定时器中用不到就需要关闭NVIC的配置,而 ...

麻烦有空帮忙看看我的源代码,多谢了!
废鱼 回答时间:2019-11-2 09:17:41
楼主,请把附件上传到本贴中。外部连接无法下载。
希望在转角 回答时间:2019-11-5 14:15:17
安 发表于 2019-11-2 09:17
楼主,请把附件上传到本贴中。外部连接无法下载。

文件太大了,上传不了。百度网盘的链接都不行吗
butterflyspring 回答时间:2019-11-5 15:54:03
跳转的主要问题就是跳转方式和偏移地址。APP软件编译时要在编译器设置好偏移地址,因为你前面已经放置了IAP(bootloader是官方内置的程序,当然很多用户把自己编写的启动升级程序习惯叫BOOTLOADER)。 其次就是跳转方式,主要是跳转的位置。位置是由中断向量表里的内容决定的。官方有这个参考例程,你可以打开详细看,其实也可以直接用。

\STM32Cube_FW_L0_V1.10.0\Projects\STM32L073Z_EVAL\Applications\IAP\IAP_Main\EWARM
STM32L0 IAP Jump.PNG

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

希望在转角 回答时间:2019-11-6 13:20:42
butterflyspring 发表于 2019-11-5 15:54
跳转的主要问题就是跳转方式和偏移地址。APP软件编译时要在编译器设置好偏移地址,因为你前面已经放置了IAP ...

我就是参考了官方的说明和例程来做的哈。可以帮忙看看源代码吗?
希望在转角 回答时间:2019-11-6 13:21:26
butterflyspring 发表于 2019-11-5 15:54
跳转的主要问题就是跳转方式和偏移地址。APP软件编译时要在编译器设置好偏移地址,因为你前面已经放置了IAP ...

可以加我QQ吗?我QQ传给你。
289846318
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版