ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)

Posted yangfengwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级(含有数据校验)

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

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

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

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

ESA2GJK1DH1K基础篇: 移植源码中SmartConfig程序到自己的项目