一、使用硬件
所用芯片:STM32F103RCT6
所用wifi模块:安信可ESP 01S(以ESP8266为核心封装的芯片) + 华邦w25q128外部FLASH模块
所用云平台:阿里云(飞燕平台+物联网平台)
所用协议:MQTT协议
二、前置知识
接下来依次介绍,我给出相关知识链接,后期我会以一个一个补全相关知识,现在请先浏览一遍官方给的相关知识,能更容易理解我的代码:
1 .STM32F103RCT6 这是一个M3内核的ARM架构的芯片,也是我使用的最小系统板上所用到的芯片。
内存:48kSROM + 256K FLASH 主频:最大72MHZ
其余芯片资料请参考官方网站STM32F103 - Arm Cortex-M3 Microcontrollers (MCU) 72 MHz - 意法半导体STMicroelectronics
2.模块为安信可的ESP 01S(安信可封装的esp8266模块)华邦w25q128
ESP8266系列模组专题 | 安信可科技 (ai-thinker.com)
3.平台为阿里云平台,需要用到物联网平台和生活物联网/飞燕平台
4.MQTT协议 + pahomqtt库
5.IAP升级相关知识(参考我前面的文章)
STM32F1的IAP升级_stm32f103 提高flash写入速度-CSDN博客
三、OTA升级
1.相关概念
OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新设备固件或软件的方法。 这项技术广泛应用于现代物联网(IoT)设备、智能手机、汽车、嵌入式系统等领域,提供了一种无需物理连接的便捷更新方式。
MQTT是一个建立在TCP/IP上的基于主题,订阅,发布 的一个轻量级的应用层的通信协议。
我们使用AT指令集,基于esp8266先和阿里云建立TCP/IP连接,再与阿里云建立MQTT连接。
2.地址分配:
分为四个区域,三个标志位。
区域 地址范围 功能
BootLoader 内部FLASH:0X0800 0000 - 0X0800 6800(16K) 引导程序,进行升级判断等功能
APP1区 内部FLASH:0X0800 6800 - 0X0804 0000(240K) 功能代码,运行项目程序
APP1_FLAG 内部FLASH:0X0803 FFFC- 0X0804 0000(4Byte) APP1的标志位,判断是否存在
APP2区 外部FLASH:0X0000 0000 - 0X0004 0000(240K) 升级的代码需要存放的区域
APP2_FLAG 外部FLASH:0X0003 FFFC- 0X0004 0000(4Byte) 升级码标志位,判断是否存在
APP1备份区 外部FLASH:0X0004 0000 - 0X0008 0000(240K) 正在运行程序的备份区
BACK_UP 外部FLASH:0X0007 FFFC- 0X0008 0000(4Byte) 备份区标志位,判断是否存在
3.代码流程
我们依旧分为三个工程,BootLoader,APP1,APP2。
(1)BootLoader
(2)APP1
相比于IAP的APP1代码,我们的OTA的APP1代码就要简单的多,只需在运行时判断是否有更新标志的产生即可。
目作者很忙,代码没时间些,先更新下流程图,代码后面补上