OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
123
返回列表 发新帖
楼主: 流水若冰

STM32实现IAP功能的学习笔记

  [复制链接]

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-5-3
在线时间
13 小时
发表于 2017-7-27 15:02:46 | 显示全部楼层
流水若冰 发表于 2017-7-26 16:35
协议里忘记说明了,不过结合上下位机的程序应该能看出来,USART_Receive[5]中存放的是中存放的是总包数, ...

b. 程序文件的接收,每包数据为(2048 + 6)个字节,示例为:
test[2054] = {55, aa, 01, 包号,命令码,数据文件2048字节,和校验位}


如果第5位是总包数的话,那格式如下:
test[2055] = {55, aa, 01, 包号,命令码,总包数,数据文件2048字节,和校验位}
是不是每包数据为(2048 + 7)个字节了?


如果还是按(2048 + 6)个字节的话,那根据程序来看会把校验位数据也作为程序数据写入FLASH,这应该是不对的吧?
微信截图_20170727145942.png

理解的不透彻,还望楼主解惑。@流水若冰
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-7-27 15:11:58 | 显示全部楼层
quickout02 发表于 2017-7-27 15:02
b. 程序文件的接收,每包数据为(2048 + 6)个字节,示例为:
test[2054] = {55, aa, 01, 包 ...

传输总包数的时候是在命令码为SERIAL_CODE_SET_STM32_TO_UPDATE的操作中做的,
这里是指令传输,遵从的是协议a
a. 指令的接收,长度为16个字节,协议示例为
test[16] = {55, aa, 01, 指令长度,命令码,xx,...00, 和校验位}

而b是实际的程序文件传输,这是两种协议格式
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2017-7-28 13:15:04 | 显示全部楼层
@流水若冰 楼主,你这是IAR哪个版本打开的,???我用IAR6.3打开一堆的错误
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-8-1 22:01:10 | 显示全部楼层
persevere 发表于 2017-7-28 13:15
@流水若冰 楼主,你这是IAR哪个版本打开的,???我用IAR6.3打开一堆的错误

我是IAR5.5的版本比你的低啊,不过高版本打开低版本的程序应该不会有问题吧,一堆错误可能是IAR配置的问题,看看打开的工程芯片还对吗?
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-19
在线时间
11 小时
发表于 2017-8-2 17:06:10 | 显示全部楼层
楼主写的很详细,赞一个。
回复 支持 反对

使用道具 举报

1

主题

82

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3155
金钱
3155
注册时间
2017-7-10
在线时间
360 小时
发表于 2017-8-3 08:31:47 | 显示全部楼层
quickout02 发表于 2017-7-26 10:41
我的是WIN7啊,怎么用那个上位机软件选择文件后就没有反应了?用的是COM2确认没问题啊,用别的串口调试软 ...

把MCU定时器时间调大些试试
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2017-8-3 08:49:59 | 显示全部楼层
不错啊,在加个上位机神马的就配套了
回复 支持 反对

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2017-8-3 11:18:43 | 显示全部楼层
cool            
回复 支持 反对

使用道具 举报

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-5-3
在线时间
13 小时
发表于 2017-8-7 09:50:23 | 显示全部楼层
楼主,现在我遇到的问题是在收到程序升级串口命令后,能正确改写FLASH标志位并发送响应数据,但无法正确的跳转到Bootloader进行运行,请问楼主这是啥原因? 微信截图_20170807094432.png

微信截图_20170807094538.png @流水若冰
回复 支持 反对

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
发表于 2017-8-7 13:58:43 | 显示全部楼层
好样的  插眼
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-8-3
在线时间
2 小时
发表于 2017-8-9 17:03:49 | 显示全部楼层
多谢楼主,下载成功,先学习学习!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-8-10 17:03:07 | 显示全部楼层
quickout02 发表于 2017-8-7 09:50
楼主,现在我遇到的问题是在收到程序升级串口命令后,能正确改写FLASH标志位并发送响应数据,但无法正确的 ...

如果你的地址分配都正确的话,运行到 jump2app()这句的话,在仿真的情况下是没法看了,不会再跳出了,因为程序跳转到了你指定的地址,又去执行新的程序,你没法仿真了,所以这块是不能调试的,得从你的板子上看是否执行了跳转之后的程序。
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-8-10 17:03:54 | 显示全部楼层
寒寒 发表于 2017-8-3 08:49
不错啊,在加个上位机神马的就配套了

额,上位机的升级软件不也发上来了吗?
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-8-10 17:04:36 | 显示全部楼层
newnew0601 发表于 2017-8-2 17:06
楼主写的很详细,赞一个。

嘿嘿,分享经验互相学习吧
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-9-6
在线时间
7 小时
发表于 2017-9-1 11:48:06 | 显示全部楼层
楼主,你好,感谢您的无私分享,让我们这些小白受益非浅。我看到一般的IAP升级都只有重新上电后才运行IAP程序来进行升级,而如果要实现不断电循环升级,就要在APP程序中实现跳转回IAP程序的功能。而楼主的例子就是可以这样实现的,而我现在遇到的问题是,我用原子哥的例程来修改,能实现从IAP跳转到APP运行了,但在APP中却无法跳转回IAP。收到跳转指令就死机,请问是什么问题呢?
#define FLASH_ADDR_BOOT          ((uint32_t)0x08000000)
                                            if(((*(vu32*)(FLASH_ADDR_BOOT + 4)) & 0xFF000000) == 0x08000000)//判断是否为0X08XXXXXX.
                                            {       
                                                    LED0=0;
                                                iap_load_app(FLASH_ADDR_BOOT);//执行FLASH APP代码
                                            }
能执行LED0=0;
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-9-1 12:26:31 | 显示全部楼层
ljinwei6 发表于 2017-9-1 11:48
楼主,你好,感谢您的无私分享,让我们这些小白受益非浅。我看到一般的IAP升级都只有重新上电后才运行IAP程 ...

都是从小白过来的,别客气。
首先,检查iap_load_app()这个函数有没有问题,如果你能从IAP跳转到APP的话,这个函数应该     
           没问题,确认一下。可以调试进去看看是不是跳转后就死了。
然后,检查你APP程序中的中断向量表的地址设置的是否正确,APP和IAP两个程序的地址不能相
           同。
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2014-9-2
在线时间
20 小时
发表于 2017-9-13 15:15:37 | 显示全部楼层
卿卿奶酪 发表于 2016-10-24 22:58
移植了楼主的程序,但是每次升级完成后,总是跳不到APP那里,debug了一下看到在跳转那里直接进硬件中断错误 ...

应该是使用的芯片不容,RAM大小不同导致的溢出
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-9-21 09:03:02 | 显示全部楼层
借鉴借鉴
回复 支持 反对

使用道具 举报

0

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2017-7-17
在线时间
166 小时
发表于 2017-9-22 16:23:00 | 显示全部楼层
感谢楼主无私奉献,写的很详细,收藏了,有空学习学习,谢谢
回复 支持 反对

使用道具 举报

12

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-9-20
在线时间
56 小时
发表于 2017-10-9 09:57:46 | 显示全部楼层
学习、感谢分享
回复 支持 反对

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2017-10-11 15:03:28 | 显示全部楼层
楼主 你不是用的MDK吗,我下你的附件没有工程文件啊
回复 支持 反对

使用道具 举报

8

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2497
金钱
2497
注册时间
2014-12-2
在线时间
210 小时
发表于 2017-10-12 10:49:24 | 显示全部楼层
不错,很详细!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2017-10-17 12:30:34 | 显示全部楼层
1547674987 发表于 2017-10-11 15:03
楼主 你不是用的MDK吗,我下你的附件没有工程文件啊

我使用的是IAR软件啊
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
发表于 2017-10-19 20:44:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

43

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2016-4-29
在线时间
136 小时
发表于 2018-6-21 14:25:55 | 显示全部楼层
楼主 你的中断向量表地址有三套吗?

工程中要设置以下地址信息吗?
#define FLASH_Base_ADDR              0x08000000
#define FLASH_Sector_A_StartAddr     0x08019000
#define FLASH_Sector_B_StartAddr     0x0803E800
回复 支持 反对

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2018-6-28 15:03:05 | 显示全部楼层
感谢楼主,正在搞这个,学习学习!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-5-28
在线时间
22 小时
发表于 2018-7-13 09:58:15 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

6

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-7-18
在线时间
31 小时
发表于 2018-7-16 15:34:14 | 显示全部楼层
__set_MSP(0x08010000);这个可以吗?
回复 支持 反对

使用道具 举报

4

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2018-6-27
在线时间
45 小时
发表于 2018-7-16 17:22:16 | 显示全部楼层
感谢楼主的分享
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-2-28
在线时间
16 小时
发表于 2018-7-27 09:47:43 | 显示全部楼层
abc3240660 发表于 2018-6-21 14:25
楼主 你的中断向量表地址有三套吗?

工程中要设置以下地址信息吗?

这个是几个跳转地址而已,基地址也就是boot运行的地址,第二个是APP运行的地址,第三个是标志位存放的地址
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-8
在线时间
9 小时
发表于 2018-8-15 16:18:47 | 显示全部楼层
您好,楼主,我用STM32_Update\STM32_UpdateSoftware\Release\STM32_UpdateSoftware.exe下的软件升级时会一直死机
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-8
在线时间
9 小时
发表于 2018-8-15 16:20:24 | 显示全部楼层
默默之 发表于 2018-8-15 16:18
您好,楼主,我用STM32_Update\STM32_UpdateSoftware\Release\STM32_UpdateSoftware.exe下的软件升级时会一 ...

是不是.bin的文件大小有限制
回复 支持 反对

使用道具 举报

4

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-8-29
在线时间
128 小时
发表于 2018-8-18 10:26:16 | 显示全部楼层
IAP mark
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-13
在线时间
0 小时
发表于 2018-9-13 15:06:50 | 显示全部楼层
切身实用,通俗易懂,乃神人也。
回复 支持 反对

使用道具 举报

11

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-3-20
在线时间
26 小时
发表于 2018-10-12 14:47:48 | 显示全部楼层
很详细,谢谢楼主
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2018-10-27 08:48:37 | 显示全部楼层
abc3240660 发表于 2018-6-21 14:25
楼主 你的中断向量表地址有三套吗?

工程中要设置以下地址信息吗?

只有两个啊,Boot 0x08000000 地址和APP地址 0x08010000
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2018-10-27 08:54:35 | 显示全部楼层
默默之 发表于 2018-8-15 16:20
是不是.bin的文件大小有限制

bin文件大小没有限制啊,升级软件,升级时没起线程,升级过程中不要有其他操作,否则可能会导致界面卡死。
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2015-7-21
在线时间
47 小时
 楼主| 发表于 2018-10-27 08:56:32 | 显示全部楼层
因不常待在论坛,所以很多回复不及时,如有问题也可加我qq645356939来交流,添加好友请备注 原子哥论坛
一名合格的工程师一定要做到,代码虐我千百遍依然待她如初恋!
回复 支持 反对

使用道具 举报

43

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2016-4-29
在线时间
136 小时
发表于 2018-11-5 09:47:10 | 显示全部楼层
流水若冰 发表于 2018-10-27 08:56
因不常待在论坛,所以很多回复不及时,如有问题也可加我qq645356939来交流,添加好友请备注 原子哥论坛

好的 老铁!
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2018-10-23
在线时间
127 小时
发表于 2019-2-14 21:55:09 | 显示全部楼层
很详尽,非常感谢,又长知识了。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-5-13
在线时间
0 小时
发表于 2019-5-13 14:58:10 | 显示全部楼层
不错。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-2-9
在线时间
4 小时
发表于 2020-8-26 09:35:04 | 显示全部楼层
谢谢楼主分享!测试好了,再来和大家分享交流!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2021-10-18
在线时间
25 小时
发表于 2022-11-12 14:30:02 | 显示全部楼层
博主,我移植你的程序后,在串口接收到的数据出现乱码,想问下串口校验是怎么判断的?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-2-21
在线时间
3 小时
发表于 2023-1-6 15:30:55 | 显示全部楼层
本帖最后由 thanksgiving 于 2023-1-6 17:45 编辑

学习,感谢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2022-6-30
在线时间
2 小时
发表于 2024-2-27 14:08:59 | 显示全部楼层
下载了 ,没有看到project工程文件啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 06:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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