zoukankan      html  css  js  c++  java
  • 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,启动运行.

      其它的皆是为了稳定性而做的配合性程序

        

  • 相关阅读:
    ubuntu 下python安装及hello world
    mongodb数据库学习【安装及简单增删改查】
    samba服务器共享开发【windows下开发linux网站】
    系统架构一:snmp+mrtg服务器监控
    记.gitignore的一次惊心动魄
    第一章 引论 第二章 算法分析
    渗透测试实践指南(1)
    day7
    day5 io模型
    day4(带)
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11824045.html
Copyright © 2011-2022 走看看