上节实现远程更新是更新的STM32F103C8T6的单片机html
这节将告诉你们如何移植到其它型号的单片机.缓存
这一节以 STM32F103RET6 (512KB Flash 64KB RAM) 为例 服务器
我使用个人这块板子
网络
你们测试的时候能够按照下面的方式接到本身的GPRS模块(Air202 / SIM800)测试
单片机串口1 接到GPRS的AT指令配置串口spa
单片机引脚PB2 接到GPRS的复位引脚3d
一,因为是移植的F103系列因此BootLoader程序咱能够不用移植,直接先拷贝过去htm
二,调整下Flash的分配blog
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 源码位置
一,配置用户程序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,启动运行.
其它的皆是为了稳定性而作的配合性程序