OpenEdv-开源电子网

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

STM32 IAP更新APP不成功

[复制链接]

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
发表于 2018-12-29 17:47:17 | 显示全部楼层 |阅读模式
10金钱
现在做一个IAP更新程序,思路是这样的--上电复位2S内串口没有接收到更新指令,则跳转到app程序;串口如果有接收到特定的更新指令,就进入更新模式,且发送一段请求数据:plase send the updata file.现在上位机就发送app文件,单片机接收数据保存起来。再进行图一55行的判断,但是判断不符合条件?数据地址在图二进行的定义。对55行我的理解是判断从0x20001300(即数组首地址) + 4地址取出数据,在与上0xff000000,判断高4位是否为08,如果是,则表示文件正确?这个为什么要等于0x08000000没理解。现在就是这一步有问题,判断这一步的前面我打印出了这个值,等于0如图3所示。想问一下问什么这里需要等于0x08000000?现在是更新不了APP程序,本来烧进去的app是能正常运行,且就以此份固件生成的bin文档也更新不了。

图1

图1

2.jpg
3.jpg

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2018-12-29 17:57:27 | 显示全部楼层
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-12-29 21:40:02 | 显示全部楼层
两秒,这个时间卡的好
楼主试过效果怎么样
一分耕耘一分收获。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-3 14:44:11 | 显示全部楼层
yklstudent 发表于 2018-12-29 21:40
两秒,这个时间卡的好
楼主试过效果怎么样

设置定时器就可以的,这个没什么卡的好的。
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2019-1-10 17:40:11 | 显示全部楼层
中断向量表偏移设置好了吗?
没有脑袋
回复

使用道具 举报

头像被屏蔽

18

主题

184

帖子

0

精华

禁止发言

积分
258
金钱
258
注册时间
2019-1-10
在线时间
10 小时
发表于 2019-1-10 18:06:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-11 08:45:42 | 显示全部楼层
你这应该是没把程序刷到Flash里面.....给你个建议,用J-Flash,IAP跑完以后准备跳转之前,用J-flash查看你刷的app代码是不是跟你的.bin文件的内容一样。
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-11 08:46:42 | 显示全部楼层
或者你用j-flash把你的.bin文件烧到你要的地址上面,然后你裸跑程序,查看检查地址的数据,后能否正常跳转并且运行。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-11 09:42:40 | 显示全部楼层
美丽的时光机器 发表于 2019-1-10 17:40
中断向量表偏移设置好了吗?

设置好了的,只是更新的程序无法运行,原来通过JLINK烧录的程序是可以跳转过去。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-11 09:43:58 | 显示全部楼层
路人曦 发表于 2019-1-11 08:46
或者你用j-flash把你的.bin文件烧到你要的地址上面,然后你裸跑程序,查看检查地址的数据,后能否正常跳转 ...

我去百度下JFLASH是什么东西~
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-11 09:44:19 | 显示全部楼层
零一三南宫南 发表于 2019-1-10 18:06
哇,感谢楼主的源码了

不用谢~
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-11 10:41:53 | 显示全部楼层
=-=我之前做过网络升级,在BootLoader程序里面也是借鉴原子哥的这块检测,我当时也挺懵的,后来就是因为我Flash擦写的时候,有几个数据写错了,所以程序跑不起来,你先确定你在地址上擦写上去的数据是保对的,还是不能跳转不能运行,你再查BootLoader这块的程序。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-11 11:07:33 | 显示全部楼层
路人曦 发表于 2019-1-11 10:41
=-=我之前做过网络升级,在BootLoader程序里面也是借鉴原子哥的这块检测,我当时也挺懵的,后来就是因为我F ...

嗯,很好的思路,谢谢!
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2019-1-11 16:49:24 | 显示全部楼层
gosomewhere 发表于 2019-1-11 09:42
设置好了的,只是更新的程序无法运行,原来通过JLINK烧录的程序是可以跳转过去。

或者跳转前关闭所有中断,跳转后在开启中断? __set_PRIMASK(0);
没有脑袋
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-14 14:44:25 | 显示全部楼层
美丽的时光机器 发表于 2019-1-11 16:49
或者跳转前关闭所有中断,跳转后在开启中断? __set_PRIMASK(0);

这个设置了也不行。。。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-14 14:56:00 | 显示全部楼层
本帖最后由 gosomewhere 于 2019-1-14 14:57 编辑
路人曦 发表于 2019-1-11 10:41
=-=我之前做过网络升级,在BootLoader程序里面也是借鉴原子哥的这块检测,我当时也挺懵的,后来就是因为我F ...

帅哥,我现在用F205做这个功能,boot程序始终跳转不出去。我仿真到127行程序就停下来了,这个应该就是进入到app程序中去了。但是等了一会儿程序又跑到上面119行我设置断点的位置。又从头执行了函数。我确定app是可以单独运行的,烧进去的app我修改了中断偏移量,keil设置也设置了flash起始位置。用JLINK读出来的app程序也与keil生成的bin文件一致。现在就觉得是不是app代码里面还有什么没有设置好的。大兄弟,还有什么需要设置的吗? 截图20190114144517227.jpg
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-14 16:43:39 | 显示全部楼层
gosomewhere 发表于 2019-1-14 14:56
帅哥,我现在用F205做这个功能,boot程序始终跳转不出去。我仿真到127行程序就停下来了,这个应该就是进 ...

我当时做的没有用Keil这个开发工具,按理说你能跑到127行,说明检测是没问题的,从新跑到119行断点位置,应该是你跑APP的时候重启了。你app的代码偏移设置了嘛??
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-14 16:46:04 | 显示全部楼层
你写个点亮LED灯的小程序,当做app,你通过你这个boot程序,跳转,查一下LED是不是按你的方式在跑。如果这个LED的小程序能正常跑,你查一下你之前的那个APP是不是太大了,或者哪里有小BUG。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-14 17:34:49 | 显示全部楼层
路人曦 发表于 2019-1-14 16:43
我当时做的没有用Keil这个开发工具,按理说你能跑到127行,说明检测是没问题的,从新跑到119行断点位置, ...

app偏移设置了,在main函数第一句就这样设置的:SCB->VTOR = FLASH_BASE | 0X8000;
截图20190114173418396.jpg
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-14 17:36:34 | 显示全部楼层
路人曦 发表于 2019-1-14 16:46
你写个点亮LED灯的小程序,当做app,你通过你这个boot程序,跳转,查一下LED是不是按你的方式在跑。如果这 ...

app单独跑是没问题的,就加了中断向量偏移和keil设置。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-1-15 00:58:12 | 显示全部楼层
gosomewhere 发表于 2019-1-14 17:36
app单独跑是没问题的,就加了中断向量偏移和keil设置。

可以尝试下先跑一个简单的demo,比如跑马灯,能正常运行么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-15 10:35:45 | 显示全部楼层
路人曦 发表于 2019-1-14 16:46
你写个点亮LED灯的小程序,当做app,你通过你这个boot程序,跳转,查一下LED是不是按你的方式在跑。如果这 ...

简单的LED程序能跑仿真也不会出现重复运行的情况。有可能是APP过大了,APP中用到了两个USB口,会不会是因为这个?
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-15 10:36:20 | 显示全部楼层
正点原子 发表于 2019-1-15 00:58
可以尝试下先跑一个简单的demo,比如跑马灯,能正常运行么?

简单的LED程序能跑仿真也不会出现重复运行的情况。有可能是APP过大了,APP中用到了两个USB口,会不会是因为这个?
回复

使用道具 举报

7

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-8-21
在线时间
76 小时
发表于 2019-1-15 13:23:02 | 显示全部楼层
你检查一下你的Boot跟你的app的程序大小..然后算上你两个程序之间的偏移量,查一下内存是不是小了,如果是app过大或者boot跟app加起来过大,你可以考虑删减一些不必要的东西...尽量减少内存的使用量。
回复

使用道具 举报

12

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-2-11
在线时间
38 小时
 楼主| 发表于 2019-1-15 13:52:13 | 显示全部楼层
路人曦 发表于 2019-1-15 13:23
你检查一下你的Boot跟你的app的程序大小..然后算上你两个程序之间的偏移量,查一下内存是不是小了,如果是a ...

程序都没有超过给的flash大小。JFLASH读出来的数据都还有很多是FF。BootLoader程序中我注释掉USB初始化BootLoader就可以正常跳转到APP(也没有USB初始化)。这样看起来就是USB初始化问题,可能是USB中断向量的问题。USB程序又不是我写的,要问问写同事是怎么弄的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 04:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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