OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2816|回复: 8

关于IAP的bootloader升级程序后,原先在bootloader里面运行的LED灯,在跳转过去的程序里面任然在运行,为什么

[复制链接]

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-8-21
在线时间
19 小时
发表于 2018-11-16 15:38:57 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 HongLJ 于 2018-11-16 15:40 编辑

我最近在看原子个的IAP升级程序,我把原子里面的bootloader程序里面改成led灯常亮,然后升级程序,发现转到新升级的程序时,led灯仍然点亮着,可是我没有在升级的程序里面对led的IO口进行过初始化和其他操作,这是为什么,求大佬指点,谢谢!!

最佳答案

查看完整内容[请看2#楼]

跳转之前复位下GPIO口,原来初始化过led的引脚,跳转之前没复位,对led的GPIO来说他的寄存器的值你没复位过
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-16 15:38:58 | 显示全部楼层
跳转之前复位下GPIO口,原来初始化过led的引脚,跳转之前没复位,对led的GPIO来说他的寄存器的值你没复位过
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-8-21
在线时间
19 小时
 楼主| 发表于 2018-11-16 15:40:43 | 显示全部楼层
自顶,自顶,求大佬解惑!!
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-8-21
在线时间
19 小时
 楼主| 发表于 2018-11-16 16:56:35 | 显示全部楼层
szczyb1314 发表于 2018-11-16 16:40
跳转之前复位下GPIO口,原来初始化过led的引脚,跳转之前没复位,对led的GPIO来说他的寄存器的值你没复位过

那我要完成按照新程序里面的来运行的话,我需要在这之前复位所有的寄存器的值,我需要怎么操作
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-17 12:23:57 | 显示全部楼层
HongLJ 发表于 2018-11-16 16:56
那我要完成按照新程序里面的来运行的话,我需要在这之前复位所有的寄存器的值,我需要怎么操作

最好是bootloader里跳转之前复位所有你初始化过的外设,时钟,中断,GPIO,外设(串口、定时器等)等,APP里面需要啥初始化啥
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-8-21
在线时间
19 小时
 楼主| 发表于 2018-11-18 14:18:19 | 显示全部楼层
szczyb1314 发表于 2018-11-17 12:23
最好是bootloader里跳转之前复位所有你初始化过的外设,时钟,中断,GPIO,外设(串口、定时器等)等,AP ...

我试过用软复位操作,但是程序会跳转到0x08000000处,所以有没有一个可以复位所有寄存器的操作,但是不进行跳转,我自己来控制跳转的地址呢?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-18 16:12:46 | 显示全部楼层
HongLJ 发表于 2018-11-18 14:18
我试过用软复位操作,但是程序会跳转到0x08000000处,所以有没有一个可以复位所有寄存器的操作,但是不进 ...

没有,自己手动复位寄存器
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

6

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-7-18
在线时间
31 小时
发表于 2018-11-19 11:12:30 | 显示全部楼层
我一般在定义一个模块xxx_Init()的时候也定义一个xxx_DeInit(),跳之前所有模块DeInit(一般来说BTLoader不会有太多模块),,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-20 02:28:32 | 显示全部楼层
因为会保持这个配置,除非你复位IO口,否则会保持不变
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表