|
STM32F769DK 云端固件升级例程软件开发文档+ f! A" L" c1 s1 [) ?) q$ G 1. 前言 STM32F769DK 云端固件升级例程分为两部分:Bootloader 和用户应用程序。 该软件基于 STM32F7Cube 库运行在 STM32F769I-DISCO 探索板上,利用百度的 IoT 平台实现了从云端更新固件的功能。 Bootloader 部分主要负责将新版本用户应用程序从 QSPI Flash 烧到 MCU 内部 Flash 中,并跳转到应用程序运行,功能相对简单。 " u( b/ f. T' v' Z1 \% V 用户应用程序部分除了用户自己的功能程序外,还包括固件版本云端推送,固件文件云端下载以及断点续传等功能,程序结构相对复杂。 本文档主要介绍用户应用程序这部分。也会对 Bootloader 做简单介绍。 ' g% T6 ?1 |. M' o! N: D 用户应用程序软件包包括以下功能组件2 Q( y9 \- H w& C. X. o2 D 从云端更新固件的应用程序代码% w+ r0 }+ q# Y( r! Y% ^ - MbedTLS(用于建立和云端的安全连接)' o5 R% `2 ~, d6 p) R - LwIP(使用有线连接时的 TCP/IP 协议栈)4 J9 D5 f8 T' C# @; `! D" S; C% h* n - FreeRTOS - Paho Embedded MQTT(MQTT 客户端在 STM32 上的实现)) h! H' Y3 o/ b% _6 k! E; D - cJSON(封装和解析 MQTT 数据包负载) - STM32F769I-Disc 的板级驱动(包括 QSPI Flash,LCD,Wifi 模块等驱动)& J/ s- f# F( m# N o) s4 U) A - STM32F7 系列的 HAL库 支持 IAR Embedded Workbench IDE,V7.80.4 及以上版本。1 s' C) K% G' n; P; j- X! u+ r# F% [ 本例程仅作为 STM32 无线远程升级功能的参考。 % z+ v; T3 `* }8 \( V- l! g 2. 软件架构 用户应用程序的软件分层如下图,应用层程序可以通过接口函数调用各层的服务。 - STM32F7Cube HAL 库:HAL 驱动层向上层软件提供了使用各个外设的接口函数。包括通常的或扩展属性的 APIs。, @, G$ @! m, B. g" U2 s I# @5 D( p 上层的中间件,应用程序等可以通过调用这些 API 函数来操作外设,这样便不会使得上层的软件依赖于某个特定的; E& h1 G3 K9 c( L/ D MCU。使得程序更具有复用性,并且容易移植到其他的 MCU 系列上去。 z! Q: A. M( P5 v8 d; b" \8 H - STM32F769DK BSP 板级驱动:针对 STM32F769DK 这块板子上使用到的外设和资源,提供了相应的 API 函数,比 如 LED 灯的控制,按键的操作等。 - LwIP 协议栈:TCP/IP 协议的实现。 - mbedTLS: 支持设备与云端建立 TLS 连接。 - Paho:Paho Embedded MQTT 实现 MQTT 客户端部分的协议。支持与云端建立 MQTT 通信。/ A5 e* K/ h# {' t2 Y - cJSON:针对嵌入式系统,提供 JSON 格式数据的解析。8 `& e& d. [8 |+ y4 Q - FreeRTOS: 轻量级的实时操作系统。: c" @7 {0 a1 K$ V- z ( H3 C8 e" B% I& W 除此以外,应用层还实现了: - 连接百度 IoT 平台的 MQTT 客户端: 基于 Paho,根据百度 IoT 平台的连接逻辑进行封装实现。 - HTTP 客户端:在 MCU 端实现了 HTTP 客户端,支持通过 TCP 或者 TLS 的方式从云端下载文件。, @' |; T; F5 Q# f6 s2 ~ - 远程固件更新的程序:实现云端推送,自动下载,以及断点续传的逻辑。% C2 l# I$ {& x1 \ ! E2 t5 i9 v7 K+ {' C
5 _* X _) ?7 V9 | - Z: m7 W. q9 e' S6 ~' O; O/ H & |0 M/ `9 M2 u: H l5 ?% V 3. 文件结构 # v7 r) E& C1 {% B, E 用户应用程序的文件结构如下:
6 X0 I1 N4 i) k+ z5 a/ m 4. 软件模块$ N* P: n* | {8 }8 }) B 4.1 网络 抽象层 在实际的应用中,设备端可能通过多种方式连接到云端。比如以太网,WIFI,2G/3G 等。所以程序中增加了网络抽象层,来 支持在不同连接方式上的切换。 9 h- l7 p& k3 n* t$ D& G- O' D & w' h# Z6 D/ ]2 A6 ?) o ..." f& M% P. E% y' R' B# ? : i+ P- e( o/ d" v4 T 了解更多,请下载后阅读 4 r: `% V- W4 s( T- c0 q 下载地址1>> 下载地址2>> 更多实战经验>> 9 P; @8 G: N5 k T. g . y, f9 c; f- v, h5 n |
| 支持,谢谢分享 |
| 好东西,,谢谢分享! |
OTA好实例,谢谢分享 |
基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...
STM32F746G-DISCO移植lvgl9.0性能基准测试
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
入门嵌入式,为什么STM32是“优选起步”?
嵌入式-单片机-STM32 EXTI中断
STM32单片机进行除零运算,为何程序不崩溃?
STM32 LL为什么比HAL高效?
STM32时钟详解
微信公众号
手机版