专栏首页知识分享20-STM32+ESP8266+AIR202/302远程升级方案-扩展-移植远程升级包实现STM32F072+DTU远程升级单片机程序(基于STM32CubeMX)

20-STM32+ESP8266+AIR202/302远程升级方案-扩展-移植远程升级包实现STM32F072+DTU远程升级单片机程序(基于STM32CubeMX)

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

说明

当前很多用户也在使用STM32CubeMX开发单片机程序,

这节说明一下在STM32CubeMX的基础上移植进去远程升级程序.

注:所有STM32F0XXX系列的单片机请参考这节移植使用!

前要

在移植到别的单片机之前,用户需要对自己的单片机有如下的了解:

1.会使用Flash存储数据,是非常的了解Flash的使用!

2.知道怎么跳转程序运行!(这个都是固定的几句程序,找找资料)

3.会使用定时器.

以上缺一不可!

注:(基础知识不再重复,请用户从第一节开始看!)

因为是使用的DTU,请用户自行配置DTU连接自己的WEB服务器

可以配置成TCP模式,可以配置成我的服务器,先测试下

IP地址: mnif.cn 端口号: 80

配置完成以后发送个指令

GET /1.txt HTTP/1.1\r\nHost: mnif.cn\r\n\r\n

然后会看到返回

开始移植(BootLoader程序制作)

1.新建CubeMX 工程

2.配置两个串口,我串口1就负责打印日志,串口2负责和网络模组通信

串口1,我设置的115200

串口2,波特率根据自己的选择,我的模组是115200

3.配置工程

4.让每个功能都生成单独的文件,最后点击生成工程

5.打开工程,或者自己去工程目录打开

6.把移植文件放到自己的工程

7.工程添加两个Group

注意:在工程名上右键选择 Add group 这种方式添加!另一种方式会卡住.一个bug

8.添加头文件

9.编译下工程

10.修改为自己单片机的头文件包含

11.然后再编译一下,如果出现以下数据类型没有定义

12.最简单的方式是在自己的 stm32fxxxx.h的头文件里面加入

typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8;

typedef __IO uint32_t vu32; typedef __IO uint16_t vu16; typedef __IO uint8_t vu8;

13.编译一下(替换自己的复位重启程序)

14.把自己的延时1ms函数放到此处

15.替换自己的请求文件发送函数(发送GET协议),

注:假设DTU配置好了透传模式.(我使用的串口2,根据自己的修改)

只要往串口发送数据,数据就直接发送给了服务器.

如果自己的程序文件是https访问的,请自行编写https方式发送数据的方式.

16.关闭自己在BootLoader程序里面使用的所有中断

17.修改stmflash.c文件里面的实现程序(根据自己的单片机修改)

读写半字

指定地址写入指定长度的半字数据

写一个半字,并加入判断写入的是否正确

指定地址读取指定长度的半字数据

擦除页

注意:假设需要擦除20KB,BootLoader会传进来20.

BootLoader里面只是传进来需要擦除的KB数.

如果自己的单片机是以1024字节一页,那么此函数直接控制擦除20页即可.

如果自己的单片机是以2048作为一页,那么此函数就应该擦除10页!

所以源码里面有一句 if(STM_SECTOR_SIZE==2048){PageCnt=PageCnt/2;}

18.在主程序里面写上以下程序

注:如果使用的是DTU,DTU已经连接了服务器,所以屏蔽掉需要自己实现连接的部分 AutoConnectTCP()

19.把 IAPTimerOut(); 函数放到1ms定时器中断函数里面

我放到了滴答定时器里面

20.重定向printf打印(可以没有,最好有!)

注:假设使用的串口1作为日志打印,根据自己的修改

注:最好使用中断发送

21.如果自己的串口使用的阻塞方式发送的printf数据,需要屏蔽下面的部分

22,把 IAPPutDataToLoopList(char Res); 和 IAPHttpHead(char Res);

函数放到和模块通信的串口中断接收里面

稍后....大口大口的吃饭中..

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1.1-STM32+ESP8266基础教程-硬件使用说明

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn8266ForSTM32"...

    杨奉武
  • 001-STM32+BC26基本控制篇-硬件使用说明

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/" framebo...

    杨奉武
  • 1-STM32+ESP8266基本控制篇-硬件使用说明

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLESP8266A/1/" fra...

    杨奉武
  • 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

    在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.I...

    张高兴
  • stm32进入HardFault_Handler的定位方法

    写程序偶尔会遇到程序死机的现象。这个时候,就需要debug来定位。 通常情况下,程序会进入HardFault_Handler的死循环(针对stm32系列),我...

    用户4645519
  • 以计算机视觉为例,告诉你如何将AI引入你的工作

    导语:对不少企业来说,如何开始一个 AI 业务是一个难题,需不需要 AI 来进行业务的辅助?是否需要组建一个自己的算法团队?我们整理了格灵深瞳创始团队:苑维然先...

    智能算法
  • 微软开源的WebUI自动化测试神器Playwright​​​​​​​

    前言: 现如今,Web开发与发布的速度是非常快的;Web应用变得越来越复杂,而且可以在所有设备上运行——我们的手机、平板电脑和台式机等,每个设备都运行不同的浏览...

    软测小生
  • RxJava2--基本使用

    RxJava是通过事件传递,并且在传递过程中对事件内部数据进行修改,最终发送给接收者的响应式框架。

    None_Ling
  • 8.3 串口读写

    何谓串口?串口就是一个计算机接口,用于数据通信,例如计算机。老一点的PC和笔记本都有串口,工控机一般配置有串口,如果没有可以到淘宝上买USB-串口转换器...

    周星星9527
  • Component之SIO

    包含了它之后,VxWorks就会调用usrSerial.c的usrSerialInit()来加载串口设备

    Taishan3721

扫码关注云+社区

领取腾讯云代金券