前言

上节实现远程更新是更新的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透传方式)的更多相关文章

  1. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块AT指令TCP透传方式,定时访问升级(含有数据校验)

    实现功能概要 单片机定时使用http访问云端的程序版本,如果版本不一致, 然后通过http下载最新的升级文件,实现远程升级STM32程序. 兼容Air202 ,SIM800 测试准备工作(默认访问我的 ...

  2. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级(兼容Air202,SIM800)

    实现功能概要 单片机定时使用http访问云端的程序版本, 如果版本不一致,然后通过http下载最新的升级文件,实现远程升级STM32. 兼容Air202,SIM800 测试准备工作(默认访问我的服务器 ...

  3. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级

    实现功能概要 前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级. 这一节,在用户程序里面加入MQTT通信,执行用户程序的时候,通过接收MQTT的升级命令实现升级 ...

  4. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块AT指令TCP透传方式,MQTT通信控制升级(含有数据校验)-APP用户程序制作过程

    前言 这一节和上一节是搭配的 给大家鱼,也必须给鱼竿! 我期望自己封装的代码,无论过了多少年都有应用的价值! 这节说明一下制作APP用户程序的过程 咱是用MQTT通信控制模块实现升级,所以首先自己的程 ...

  5. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于WIFI模块AT指令TCP透传方式,定时访问升级(含有数据校验)

    实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootL ...

  6. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(WIFI模块AT指令TCP透传方式),定时访问升级

    前言 学习此代码所需: 实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说 ...

  7. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块(Air202,SIM800)AT指令TCP透传方式,MQTT通信控制升级

    实现功能概要 这节和上一节的功能一样(只不过上节是利用Wi-Fi模块,这节是利用GPRS模块) 用户程序里面加入MQTT通信,执行用户程序的时候, 通过接收MQTT的升级命令实现升级. 凡是可以实现M ...

  8. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块(ESP8266)AT指令TCP透传方式,MQTT通信控制升级(加入数据校验)

    前言 这节演示下,上两节写的利用MQTT来控制STM32控制的程序 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootLoader程序(请自行下载) 首先BootLo ...

  9. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,升级流程源码详细说明

    前言 1.BootLoader程序,升级简要流程图 2.其实主要的就是把程序文件写入环形队列,然后环形队列取出来数据写入Flash 3.用户程序,简要流程图 下面的读一下,有个印象就可以: 说白了就是 ...

随机推荐

  1. SpringBoot第十七篇:定时任务

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11076555.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   相信大家对 ...

  2. linux kernel debug

    1. sysrq http://www.chinaunix.net/old_jh/4/902287.html 常用的SysRq命令(序列)  重启机器的SysRq命令序列是 k(SAK) s(sync ...

  3. FastDFS与hadoop的HDFS区别

    主要是定位和应用场合不一样 HDFS: 要解决并行计算中分布式存储数据的问题.其单个数据文件通常很大,采用了分块(切分)存储的方式. FastDFS: 主要用于大中网站,为文件上传和下载提供在线服务. ...

  4. python网络爬虫(1)——安装scrapy框架的常见问题及其解决方法

    Scrapy是为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板. 其实在Linux和 Mac安装,就简单的pip命令即可: pip i ...

  5. C# word格式转换为pdf

    引用 Microsoft.Office.Interop.Word 这个dll,可以在解决方案浏览器中搜索到并下载. 源码如下: public bool WordToPDF(string sourceP ...

  6. 彻底搞懂JVM类加载器:基本概念

    本文阅读时间大约9分钟. 写在前面 在Java面试中,在考察完项目经验.基础技术后,我会根据候选人的特点进行知识深度的考察,如果候选人简历上有写JVM(Java虚拟机)相关的东西,那么我常常会问一些J ...

  7. 使用gacutil把COM组件注册到全局缓存GAC中

    我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制.还有一种注册方式,使用 ...

  8. Python基础(三)--流程控制之if、while、for,break与continue

    一.流程控制之if……else…… if语句是指编程语言中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一 if 条件1: 缩进的代码块 elif 条件2: 缩进的代码 ...

  9. AMQP与RabbitMQ

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10922433.html 一:AMQP是什么 AMQP(Advanced Message Queuing Pr ...

  10. dapi 基于Django的轻量级测试平台六 怎样使用压测功能

    QQ群: GitHub:https://github.com/yjlch1016/dapi JMeter非GUI模式下: jmeter -n -t jmx脚本 -l jtl文件 -e -o 测试报告目 ...