STM32F769DK云端固件升级例程软件开发文档
https://www.stmcu.com.cn/Designresource/design_resource_detail?file_name=%E5%88%A9%E7%94%A8MQTT%E5%8F%8A%E4%BA%91%E5%AD%98%E5%82%A8%E5%AE%9E%E7%8E%B0STM32%E8%BF%9C%E7%A8%8B%E6%97%A0%E7%BA%BF%E5%8D%87%E7%BA%A7%E4%BE%8B%E7%A8%8B%E7%9A%84%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3&lang=EN&ver=1
STM32F769DK云端固件升级例程分为两部分:Bootloader和用户应用程序。
该软件基于STM32F7Cube库运行在STM32F769I-DISCO探索板上,利用百度的IoT平台实现了从云端更新固件的功能。
Bootloader部分主要负责将新版本用户应用程序从QSPI Flash烧到MCU内部Flash中,并跳转到应用程序运行,功能相对简单。
用户应用程序部分除了用户自己的功能程序外,还包括固件版本云端推送,固件文件云端下载以及断点续传等功能,程序结构相对复杂。
用户应用程序软件包包括以下功能组件
从云端更新固件的应用程序代码
MbedTLS(用于建立和云端的安全连接)
LwIP(使用有线连接时的TCP/IP协议栈)
FreeRTOS
Paho Embedded MQTT(MQTT客户端在STM32上的实现)
cJSON(封装和解析MQTT数据包负载)
STM32F769I-Disc的板级驱动(包括QSPI Flash,LCD,Wifi模块等驱动)
STM32F7系列的HAL库
用户应用程序的软件分层如下图,应用层程序可以通过接口函数调用各层的服务。
在实际的应用中,设备端可能通过多种方式连接到云端。比如以太网,WIFI,2G/3G等。所以程序中增加了网络抽象层,来支持在不同连接方式上的切换。
MQTT协议在TCP之上,属于应用层的协议,它基于发布/订阅模式的轻量级通信协议,适用资源受限设备,低带宽,高延时,不稳定网络中进行消息传输。
Baidu的MQTT客户端,基于Paho的MQTT客户端实现。这部分的代码由三部分组成:对网络接口函数的封装,百度IoT客户端的操作和对MQTT消息的处理。分别位于baidu_iot_network_wrapper.c,baidu_iotclient.c和mqtt_msg_handler.c文件中。
收到云端推送的新固件下载信息后,程序会自动通过HTTP来下载新的固件,然后根据用户的选择进行更新。这个模块由2部分内容组成:
通过HTTP下载文件
将下载的固件烧写到外部QSPI Flash中
代码在http_util.c和rfu.c两个文件中。
从云端下载的固件先被保存在QSPI Flash中。QSPI Flash除了保存从云端下载的固件,还保存下载过程的一些状态信息,比如下载的版本,下载的连接,下载失败的标志等。
在stm32f769i_discovery_qspi.c文件中,提供了读写QSPI Flash的接口函数:BSP_QSPI_Erase_Sector(), BSP_QSPI_Erase_Block(), BSP_QSPI_Write(), BSP_QSPI_Read()等。
在qspi_flash_if.c文件中,则提供了对状态信息读写的接口函数。
过程复杂,结合软件实际操作学习效果更好!
STM32F769DK云端固件升级例程.pdf
(658.58 KB)
|