zoukankan      html  css  js  c++  java
  • 06-STM32+ESP8266+AIR202远程升级篇-移植使用-移植STM32主动访问升级到自己的工程项目

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

     说明

     这节说明一下如何把STM32自动访问升级移植到自己的工程项目

    提醒

    经过大多数用户应用发现,基本上用户不会去移植BootLoader程序到自己的工程,

    因为BootLoader是固定烧写到单片机内部的程序,用户都是关心如何把升级程序移植到当前的应用程序上.

    好多用户只是在BootLoader的程序上做修改,比如增加液晶显示,显示更新状态等

    这节不再讲解BootLoader如何移植,只讲解如何把升级程序移植到自己的应用程序里面

    BootLoader只讲解一些细节,便于用户添加额外的功能

    BootLoader程序说明

    1.随意打开上两节的任意一个BootLoader程序

    我打开的是这一节

    2.首先用户需要注意的事项

    在更新期间主循环不要加延时!!!!

    以下标志位置一,说明开始执行了更新

    IAPStructValue.LoopListPutStart ==1    已经发送了获取文件指令,开始向环形队列写入数据

    3.如果用户使用的外部存储,可修改以下位置

    本程序校验数据是先存后取后校验.

    默认是每隔128字节校验程序文件里面的crc位(crc位是程序校验位不能写入flash)

    crc为crc-modbus  改为在前,低位在后

    4.接收数据完成

    5.如果用户是使用的其它网络模块

    需要根据自己的网络模块修改连接TCP服务器指令

    连接的IP地址和端口号IAPStructValue.IP,   IAPStructValue.Port

    该信息是解析的用户程序存入的url

    如果连接成功需要返回 1

    6.发送http请求

    上面是给TCP服务器发送信息,根据自己的模块替换

    我使用的wifi模块默认配置了透传模式(http通信方式下)

    由于我使用的wifi在https方式下不能使用透传模式,所有上面的发送才做了区分

    7.接收程序文件

    IAPHttpHead(Res);  是负责把http/https的数据头剔除掉(这个一般不需要修改)

    IAPPutDataToLoopList(Res);  是把后面的真实数据写入缓存

    如果用户的模块也是透传模式,则也不需要修改这个地方

    如果不是透传模式,则需要修改一下

    以当前程序为例

    当前程序在 https通信方式下是非透传模式

    会在每一帧数据前加有一些其它数据

    (    +IPD,此帧数据个数:真实数据    )

    为了把真实数据提取出来,程序里面做了判断处理

    8.根据自己的单片机容量修改flash分配

    注意:必须和用户程序里面设置的一样!

    注意:必须和用户程序里面设置的一样!

    注意:必须和用户程序里面设置的一样!

    再次提醒!请使用128KB及其以上的单片机,以防内存不够的问题

    再次提醒!请使用128KB及其以上的单片机,以防内存不够的问题

    再次提醒!请使用128KB及其以上的单片机,以防内存不够的问题

    如果是使用的256K及其以上的单片机最好把以上都设置成4的倍数

    如果是使用的256K及其以上的单片机最好把以上都设置成4的倍数

    如果是使用的256K及其以上的单片机最好把以上都设置成4的倍数

    因为256K及其以上flash都是每2048作为一页

    都设置成4的倍数,无论怎么计算每一项存储都是从偶数地址开始,

    9.修改默认访问程序文件的地址

    下面是程序的下载地址,如果flash里面没有存储下载地址,则默认按照这个地址下载程序文件

     其实BootLoader程序整体来看就是把程序写入环形队列,主循环从环形队列里面取出来数据写入flash

    其它搭配的程序只是为了更加方便,稳定,可靠的实现升级

    用户程序

    1.用户程序需要有看门狗

    ① 需要用到的BootLoader文件夹

    ② 一个空工程

    ③ 看门狗程序,如果用户程序里面没有看门狗程序,把文件加到自己的工程

    2.先看①

     当前并未用到 BufferManage文件

    其余的文件如果用户本身工程里面有,最好是用提供的覆盖掉

    尤其是 stmflash文件,必须使用我提供的!  里面的程序解决了官方的flash本身操作bug!

    3.接着看②

    就是一个普通的工程

    记得引入头文件

    4.把BootLoader文件夹和看门狗文件添加到工程

    把BootLoader文件放到这个位置

    把看门狗文件放到下面的位置

     添加头文件路径

    添加看门狗

    5.启动看门狗,喂狗

    6.设置中断偏移

    中断偏移要和初始化打印的保持一致

    7.记得当前用户程序stmflash要和BootLoader里面的stmflash保持一致

    8.修改info文件获取的地址

    9.main函数初始化里面写上 

    10.当前的移植工作其实基本就做完了,后面的是根据自己的模块连接TCP服务器IAPStructValue.IP

    然后获取info文件,然后解析

    具体怎么连接根据自己的程序,也可以使用我前两节提供的连接程序

    连接的IP地址: IAPStructValue.IP       (这是执行IAPInfoPathInit()以后解析的)

    连接的端口号: IAPStructValue.Port   (这是执行IAPInfoPathInit()以后解析的)

    连接成功以后

    发送get指令获取info.txt文件

    文件路径存储在这个变量里面   IAPStructValue.Path

    具体拼接:

    MainLen = sprintf((char*)MainBuffer,"GET %s HTTP/1.1 Host: %s ",IAPStructValue.Path,IAPStructValue.IP);

    然后把这条信息发给TCP服务器(Web服务器)

    11,然后需要解析 数据(以下只是说明如何解析)

    {"version":"0.0.1","size":15990,"url":"http://mnif.cn/ota/hardware/STM32ESP8266BK/user_crc.bin","info":"1.解决了部分BUG
    2.优化了部分程序"}

    1.对比版本号

    程序本身的版本号都是写在了程序里面

    需要对比 FirmwareVersion  和   "version":"0.0.1" 里面的 0.0.1是不是一致的

    2.把解析到的文件大小调用对应的API函数存储到flash

    IAPSetFileSize(u32 data);

    3.把解析到的文件路径调用对应的API函数存储到flash

    IAPSetUpdateUrl(char* ch);

    注意:请把url先存储到 IAPStructValue.Url 数组,一定要这样做!

    因为url存储的时候是存储固定大小,当前是1000字节

    存储完以后设置重启即可

    12.制作用户程序bin文件 和 info.txt文件

    1.生成bin文件

    2.打开OTA Tools软件,选择生成的bin文件

    ① 固件版本和用户程序里面设置的固件版本保持一致

    校验方式:CRC-MODBUS

    升级方式:备份升级

    校验间隔:128字节

    默认填充:0xFF

    按照上面的设置以后,把bin文件每隔128字节按照 CRC-MODBUS 计算得到的校验值插到计算数据的后面(高位在前,低位在后)

    如果最后不满128字节,则填充0xFF补全

    ② 设置固件下载的地址(只填写前面路径即可,最后的具体文件名称自动添加)

    ③ 按照上面的步骤设置完以后,点击生成固件会生成一个info.txt文件

    文件内容如上面所示

    {"version":"0.0.1","size":13780,"url":"http://mnif.cn/ota/hardware/STM32ESP8266BK/user_crc.bin","info":"1.解决了部分BUG
    2.优化了部分程序"}

    3.bin目录将会多出来两个文件

    然后把这两个文件放到服务器即可

  • 相关阅读:
    ios开发中的基本设计模式
    Swift进阶
    转帖:深入理解JavaScript系列
    触摸事件、手势识别、摇晃事件、耳机线控
    打造自己的“美图秀秀”
    地图与定位
    python 深拷贝,浅拷贝
    Django 路由(SimpleRouter, DefaultRouter,ExtendedDefaultRouter)
    Django 国际化(翻译)
    wkhtmltopdf 转换后 表格不显示 python解决方案
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/13303375.html
Copyright © 2011-2022 走看看