ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)
前言
上节实现远程更新是更新的STM32F103C8T6的单片机
GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级
这节将告诉大家如何移植到其它型号的单片机.
这一节以 STM32F103RET6 (512KB Flash 64KB RAM) 为例
我使用我的这块板子

大家测试的时候可以按照下面的方式接到自己的GPRS模块(Air202 / SIM800)
单片机串口1 接到GPRS的AT指令配置串口
单片机引脚PB2 接到GPRS的复位引脚
直接上菜
一,由于是移植的F103系列所以BootLoader程序咱可以不用移植,直接先拷贝过去

二,调整下Flash的分配
2.1 自己自行调整哈,不过要注意最好设置成2的倍数因为512KB的Flash单片机都是以2KB作为一页

三,其它大家应该知道的配置(以下根据自己使用的芯片选择)



四,编译下载,看下打印的信息
user1ROMStart: 0x8004000 //用户程序1开始的地址
user1ROMSize : 0x3d000 //用户程序1大小 249856字节 == 244KB
user2ROMStart: 0x8041000 //用户程序2开始的地址
user2ROMSize : 0x3d000 //用户程序2大小 249856字节 == 244KB

五,当前Flash分配

六,然后呢,还有一点,大家可以修改一个地方.这个是预留的,方便不同的用户
6.1 在BootLoader里面呢,其实每隔30S访问一下升级,不过是受升级标志限制的

6.2 通过上面的章节咱知道在BootLoader里面想操作升级,需要按下PB5等待3S指示灯快闪以后,写入升级标志重启,然后实现的升级
如果运行在BootLoader里面超过30S其实就说明没有用户程序可执行(或者在升级中)
我现在希望只要是运行在BootLoader里面超过30S,就主动访问升级去吧!让芯片主动一点
所以做以下更改

七,最后呢!修改下访问的http路径


现在看用户程序
一,假设用户程序是什么也没有的,我以下面的作为用户程序的底层


二,打开那个程序,首先咱弄的简洁点,这个程序就是控制PC13 500Ms亮 500Ms灭,其它功能就不做了
咱远程更新的时候只要发现PC13 500Ms亮 500Ms灭就说明更新进去了

三,拷贝BootLoader里面的stmflash 到咱当前工程

四,然后呢需要拷贝IAP文件(可以拷贝BootLoader里面的,也可以拷贝上几节用户程序里面的)
建议拷贝上几节用户程序里面的IAP文件,因为上几节用户程序里面的IAP相对于BootLoader里面的做了很多裁剪(省内存)
无所谓哈,拷贝哪个都一样用,里面所有的操作都一样,只不过BootLoader里面的IAP文件比较庞大点,占用内存大点

五,整理下工程

六,添加上处理升级部分
6.1 获取更新的状态,为了简洁了当我就直接拷贝源码

6.2 我是从原先用户程序的这里拷贝的

6.2 处理更新状态
这个处理状态主要就是用来清零升级的状态.

6.3 源码位置

现在用户程序的处理升级部分的完了,接着配置下生成bin文件
一,配置用户程序1
1.1,还记得上面打印的不

1.2,配置用户程序1

1.3 配置下生成的用户程序1的bin文件名字 我设置的是 Progect.bin

二,配置用户程序2
2.1 拷贝出来一份用户程序


2.2 打开STM32F10xTemplate - 副本程序,首先把基本配置先检查一遍

\

2.2 打开STM32F10xTemplate - 副本程序,配置生成bin文件

2.3 配置下生成的用户程序2的bin文件名字 我设置的是 Progect2.bin

测试
一,拷贝记录设备版本的updatainfo.txt文件,和用户程序1文件(Progect.bin),用户程序2文件(Progect2.bin)到服务器



最终效果

二,下载BootLoader程序

三,等待大约30S
3.1 我监控的数据 大家会发现执行了用户程序,但是会每隔5S重启

3.2 其实忘了告诉大家一讲事情了,BootLoader 里面的程序配置,对用户程序同样有效,所以用户程序需要有喂狗程序
可以自己加上喂狗程序以后,大家重新测试.

结语
该程序代码可以比较方便的移植到F103全系列的型号上.
其实大家不必急于弄懂我的程序,因为这套升级程序我测试了很多很多次,做了很长时间,最终总结成现在的
如果不明白流程,可以问我哈.
其实无论再怎么变,本质改变不了,环形队列缓存数据,写入Flash,启动运行.
其它的皆是为了稳定性而做的配合性程序
ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)的更多相关文章
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块AT指令TCP透传方式,定时访问升级(含有数据校验)
实现功能概要 单片机定时使用http访问云端的程序版本,如果版本不一致, 然后通过http下载最新的升级文件,实现远程升级STM32程序. 兼容Air202 ,SIM800 测试准备工作(默认访问我的 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级(兼容Air202,SIM800)
实现功能概要 单片机定时使用http访问云端的程序版本, 如果版本不一致,然后通过http下载最新的升级文件,实现远程升级STM32. 兼容Air202,SIM800 测试准备工作(默认访问我的服务器 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级
实现功能概要 前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级. 这一节,在用户程序里面加入MQTT通信,执行用户程序的时候,通过接收MQTT的升级命令实现升级 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块AT指令TCP透传方式,MQTT通信控制升级(含有数据校验)-APP用户程序制作过程
前言 这一节和上一节是搭配的 给大家鱼,也必须给鱼竿! 我期望自己封装的代码,无论过了多少年都有应用的价值! 这节说明一下制作APP用户程序的过程 咱是用MQTT通信控制模块实现升级,所以首先自己的程 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于WIFI模块AT指令TCP透传方式,定时访问升级(含有数据校验)
实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootL ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(WIFI模块AT指令TCP透传方式),定时访问升级
前言 学习此代码所需: 实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块(Air202,SIM800)AT指令TCP透传方式,MQTT通信控制升级
实现功能概要 这节和上一节的功能一样(只不过上节是利用Wi-Fi模块,这节是利用GPRS模块) 用户程序里面加入MQTT通信,执行用户程序的时候, 通过接收MQTT的升级命令实现升级. 凡是可以实现M ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块(ESP8266)AT指令TCP透传方式,MQTT通信控制升级(加入数据校验)
前言 这节演示下,上两节写的利用MQTT来控制STM32控制的程序 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootLoader程序(请自行下载) 首先BootLo ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,升级流程源码详细说明
前言 1.BootLoader程序,升级简要流程图 2.其实主要的就是把程序文件写入环形队列,然后环形队列取出来数据写入Flash 3.用户程序,简要流程图 下面的读一下,有个印象就可以: 说白了就是 ...
随机推荐
- Spring Cloud(十四):Ribbon实现客户端负载均衡及其实现原理介绍
年后到现在一直很忙,都没什么时间记录东西了,其实之前工作中积累了很多知识点,一直都堆在备忘录里,只是因为近几个月经历了一些事情,没有太多的经历来写了,但是一些重要的东西,我还是希望能坚持记录下来.正好 ...
- Linux基础及入门介绍
一.linux发展历程 ①1969年unix诞生贝尔实验室 ②谭宁邦:minix unix ③斯托曼(stallman),公司:自由软件基金会(FSF) 项目:GNU 规则:GPL(所有人可以自由传播 ...
- 应用Redis分布式锁解决重复通知的问题
研究背景: 这几天被支付宝充值后通知所产生的重复处理问题搞得焦头烂额, 一周连续发生两次重复充钱的杯具, 发事故邮件发到想吐..为了挽回程序员的尊严, 我用了Redis的锁机制. 事故场景: 支付宝下 ...
- 循环节 + 矩阵快速幂 - HDU 4291 A Short problem
A Short problem Problem's Link Mean: 给定一个n,求:g(g(g(n))) % 1000000007 其中:g(n) = 3g(n - 1) + g(n - 2), ...
- DNS 服务器无法正常解析时,可以尝试这样!
DNS 服务器无法正常解析时,可以尝试这样! ========================================================================联通:12 ...
- Centos7利用rsync实现文件同步
0x01 测试环境 CentOS 7.4 Rsync服务端:192.168.204.130 CentOS 7.4 Rsync客户端:192.168.204.168 0x02 rsync同步方式 第一种 ...
- 【翻译】tus----一个可续传文件上传的开放协议
tus tus是一个可续穿文件上传协议,它以Http协议为载体,统一了一个文件断点续传的标准. 这篇文章翻译自https://tus.io/ 目前该协议版本信息如下: Version: 1.0.0 ( ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- 对比ubuntu与centos系统
CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...
- web攻击日志分析之新手指
0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取 ...