OpenEdv-开源电子网

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

STM32实现程序通过网络在线升级

[复制链接]

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
发表于 2016-7-8 14:16:53 | 显示全部楼层 |阅读模式
1金钱
有哪位大神做过STM32实现程序通过网络在线升级的,求助,欢迎大家积极踊跃的指导。

最佳答案

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

实现了TCP数据传输,接下来就简单了。 参考我们的IAP实验就好了。只是你的数据来源是TCP,我们的例程是串口。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-8 14:16:54 | 显示全部楼层
xiaoyu_stm32 发表于 2016-7-9 09:31
TCP已经可以实现简单的通信了

实现了TCP数据传输,接下来就简单了。
参考我们的IAP实验就好了。只是你的数据来源是TCP,我们的例程是串口。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12584
金钱
12584
注册时间
2015-11-5
在线时间
2152 小时
发表于 2016-7-8 14:46:10 | 显示全部楼层
跟本地升级一样,只是得做一个服务器来读取升级文件,然后分块发送,但TCP网络有分包机制,例如一个4KB的数据包有可能会分成好几个1KB的分包,这个处理起来最麻烦,其他就没什么了
回复

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
 楼主| 发表于 2016-7-8 15:35:04 | 显示全部楼层
FreeRTOS 发表于 2016-7-8 14:46
跟本地升级一样,只是得做一个服务器来读取升级文件,然后分块发送,但TCP网络有分包机制,例如一个4KB的数 ...

听得和天书一样。云里雾里的.......
回复

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
 楼主| 发表于 2016-7-9 09:31:31 | 显示全部楼层
yklstudent 发表于 2016-7-8 17:17
楼主先实现TCP通信再说,然后再谈升级吧

TCP已经可以实现简单的通信了
回复

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
 楼主| 发表于 2016-7-11 16:09:27 | 显示全部楼层
原子程序在运行过程中,有程序要更新,它是跳回到IAP程序中,实现程序的更新吗?如果是,IAP和APP程序是如何切换的呀。是用中断吗?不懂
回复

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2016-7-11 17:01:50 | 显示全部楼层
xiaoyu_stm32 发表于 2016-7-11 16:09
原子程序在运行过程中,有程序要更新,它是跳回到IAP程序中,实现程序的更新吗?如果是,IAP和APP程序是如 ...

可以用软件复位。无论是硬件复位还是软件复位,单片机都是从FLASH起始地址开始执行的,Bootloader代码一般都是从这里开始。
可以在FLASH中某个地址存一个状态标记,要升级时清除这个标记然后软件复位。Bootloader执行完成后把这个标记写上,这样就不会重复进入Bootloader了
回复

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
 楼主| 发表于 2016-7-13 10:19:04 | 显示全部楼层
513393302@qq.co 发表于 2016-7-11 17:01
可以用软件复位。无论是硬件复位还是软件复位,单片机都是从FLASH起始地址开始执行的,Bootloader代码一 ...

谢谢您的解答。还有个疑问,是不是程序运行过程中,用通信串口发送升级程序时,直接调用iap_write_appbin将升级程序写入FLASH中,并且清楚标记,进行软件复位,Bootlasder中执行时调用iap_load_app,并且将标记写上,开始执行升级后的程序。不知道我理解的对不对。
回复

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2016-7-13 13:30:50 | 显示全部楼层
xiaoyu_stm32 发表于 2016-7-13 10:19
谢谢您的解答。还有个疑问,是不是程序运行过程中,用通信串口发送升级程序时,直接调用iap_write_appbin ...

比如   在FLASH起始地址偏移  0X4000处 为 FLASH标记      如果此地址的值是0X55表示已经有用户代码了   不用进行IAP了

Bootloader代码中,先初始化,再判断FLASH起始地址偏移0X4000处是不是0X55,如果不是就进行IAP,执行完IAP后,在FLASH起始地址偏移0X4000处写0X55,然后跳到用户代码。

用户代码里,你可以加入一个升级检测,当检测到需要升级的时候,先把FLASH起始地址偏移0X4000处的0X55擦除,然后启动软件复位
回复

使用道具 举报

54

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2014-5-13
在线时间
66 小时
发表于 2016-11-4 11:41:31 | 显示全部楼层
问下,在APP程序中,如果接收到需要升级的程序数据,存放在哪儿呢,是直接放在APP开始的Flash里吗,这样放,程序应该出问题吧,求指导!
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2016-8-2
在线时间
107 小时
发表于 2016-12-10 14:54:57 | 显示全部楼层
FreeRTOS 发表于 2016-7-8 14:46
跟本地升级一样,只是得做一个服务器来读取升级文件,然后分块发送,但TCP网络有分包机制,例如一个4KB的数 ...

有例程吗,望分享帮助下
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2019-11-11
在线时间
9 小时
发表于 2020-4-15 15:25:59 | 显示全部楼层
求个能运行的远程网络在线升级的例程,有偿
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-3-20
在线时间
4 小时
发表于 2020-4-16 09:52:26 | 显示全部楼层
kkkkkkkkkk
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 06:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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