news 2026/7/23 3:24:28

STM32 通过 WIFI 实现远程 OTA 升级

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32 通过 WIFI 实现远程 OTA 升级

stm32 远程升级 OTA升级 使用WIFI连接升级 芯片 stm32f103系列 升级方式:wifi模块?自建服务器 升级文件为BIN文件,需要使用配套的exe文件将原来的bin文件内的数据,每隔128个字节进行crc16检验,并添加到后面。 单片机下载后,每下载130个字节便检验一下数据,让升级变得稳定可靠。 升级过程: 用户程序里面每隔一定时间控制网络模块使用http的GET指令获取云端info文件 然后从文件里面获取服务器里面的固件程序版本和固件程序下载地址等信息 如果与自身版本号对比不一致,就把固件程序下载地址写入flash,然后设置更新标志,重启, 重启执行BootLoader以后,BootLoader程序检测到更新标志,则提取固件下载的地址, 然后使用http下载程序文件,把程序文件写入flash,完成升级. 资料包含bootloader源码一份,bin文件crc检验处理的exe文件一份,操作说明一份

在嵌入式开发领域,STM32 系列芯片凭借其强大的性能和丰富的外设深受开发者喜爱。今天咱就唠唠如何基于 STM32F103 系列芯片,利用 WIFI 连接实现远程 OTA 升级。

整体升级思路

整个升级过程涉及多个环节,从获取云端信息到下载升级文件并最终完成升级,每个步骤都紧密相扣。

1. 准备工作

我们手头有 bootloader 源码一份,用于在芯片启动时引导升级流程;还有 bin 文件 crc 检验处理的 exe 文件一份,这是对原始 bin 文件进行数据处理的关键工具;当然,操作说明也必不可少,它能帮我们更清晰地了解整体流程。

2. 升级文件处理

升级文件是 BIN 文件,但在使用前,需要通过配套的 exe 文件进行特殊处理。这个处理过程就是每隔 128 个字节对 bin 文件内的数据进行 CRC16 检验,并把检验结果添加到后面。为啥要这么做呢?这是为了在后续下载过程中确保数据的准确性和完整性,就好比给每一段数据都贴上一个“真伪标签”。

3. 用户程序部分

用户程序承担着获取云端信息并决策是否需要升级的重任。它每隔一定时间就会控制网络模块,通过 HTTP 的 GET 指令去获取云端的 info 文件。这 info 文件里可是藏着关键信息,比如服务器里面的固件程序版本、固件程序下载地址等。代码示例如下(伪代码,仅示意逻辑):

// 假设网络模块初始化函数 void network_module_init(void) { // 初始化网络模块相关寄存器等操作 } // 获取云端info文件函数 void get_cloud_info_file(void) { char http_get_cmd[100]; sprintf(http_get_cmd, "GET /info.txt HTTP/1.1\r\nHost: your_server_domain\r\n\r\n"); // 通过网络模块发送http_get_cmd指令 // 接收并解析返回的数据,提取固件版本和下载地址等信息 }

这里通过sprintf构建 HTTP GET 指令,然后通过网络模块发送出去,接收数据后解析提取关键信息。接着,程序会把获取到的固件版本与自身版本号进行对比,如果不一致,就把固件程序下载地址写入 flash,并设置更新标志,随后重启设备。

4. BootLoader 部分

设备重启后,BootLoader 程序闪亮登场。它会检测到更新标志,一旦检测到,就开始提取固件下载的地址。然后使用 HTTP 下载程序文件,并将程序文件写入 flash,至此完成升级。下面是简单的 BootLoader 检测更新标志代码示例:

// 假设更新标志存储在特定地址 #define UPDATE_FLAG_ADDR 0x12345678 void bootloader(void) { if (*(volatile uint32_t*)UPDATE_FLAG_ADDR) { char download_addr[50]; // 从特定地址提取下载地址 get_download_addr(download_addr); // 使用HTTP下载程序文件 http_download(download_addr); // 将下载的程序文件写入flash write_to_flash(downloaded_file); } // 正常启动用户程序等其他操作 }

在这个代码里,首先检查更新标志地址处的值,如果为真则表示需要升级,接着获取下载地址并执行下载和写入 flash 的操作。

5. 下载数据校验

为了让升级变得更加稳定可靠,单片机在下载过程中每下载 130 个字节便会检验一下数据。这个检验就是用到之前添加的 CRC16 检验结果。因为之前对每 128 字节数据都计算并添加了 CRC16 检验值,现在每下载 130 字节(128 字节数据 + 2 字节 CRC16 检验值),就可以重新计算这 128 字节数据的 CRC16 值,并与之前添加的检验值对比,如果一致则说明数据无误,反之则表示数据在传输过程中可能出现错误,需要采取相应措施(比如重新下载等)。

自建服务器与 WIFI 模块

这里采用自建服务器与 WIFI 模块配合的方式实现远程升级。WIFI 模块负责与自建服务器建立连接,传递各种指令和数据。自建服务器则存储着升级所需的 info 文件和固件程序等。通过这种方式,我们就能在自己的可控环境下完成 STM32 芯片的远程 OTA 升级,既保证了升级的灵活性,又能根据实际需求调整服务器端的逻辑。

stm32 远程升级 OTA升级 使用WIFI连接升级 芯片 stm32f103系列 升级方式:wifi模块?自建服务器 升级文件为BIN文件,需要使用配套的exe文件将原来的bin文件内的数据,每隔128个字节进行crc16检验,并添加到后面。 单片机下载后,每下载130个字节便检验一下数据,让升级变得稳定可靠。 升级过程: 用户程序里面每隔一定时间控制网络模块使用http的GET指令获取云端info文件 然后从文件里面获取服务器里面的固件程序版本和固件程序下载地址等信息 如果与自身版本号对比不一致,就把固件程序下载地址写入flash,然后设置更新标志,重启, 重启执行BootLoader以后,BootLoader程序检测到更新标志,则提取固件下载的地址, 然后使用http下载程序文件,把程序文件写入flash,完成升级. 资料包含bootloader源码一份,bin文件crc检验处理的exe文件一份,操作说明一份

总的来说,通过这一系列步骤,我们成功地在 STM32F103 系列芯片上搭建起了基于 WIFI 的远程 OTA 升级系统,为产品的后期维护和功能更新提供了极大的便利。希望这篇博文能给正在研究相关内容的小伙伴们一些帮助和启发!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 15:14:29

从实验室到实战场:WEEX BUILDERS 巴黎站,AI 交易的开发者叙事正在成形

巴黎的夜,比想象中更热闹。在塞纳河畔不远的一处活动空间里,终端界面在台上同时亮起,策略回测曲线与系统日志在投影幕上不断刷新。这里不是一场常规分享会,而是 WEEX BUILDERS 全球巡回巴黎站 的现场——开发者、量化研究者与技术…

作者头像 李华
网站建设 2026/7/20 15:43:07

【C++】异常处理机制全解析

文章目录一、C 异常的底层实现机制1. 核心思想:异常表 栈展开 (Stack Unwinding)2. 零成本异常处理(GCC/Clang)3. MSVC 的 SEH 实现二、核心关键字的原理1. throw:异常触发的核心2. try:异常监控域标记3. catch&#…

作者头像 李华
网站建设 2026/7/20 15:14:11

Jimeng LoRA保姆级教程:文件夹自动扫描+safetensors识别+自然排序配置

Jimeng LoRA保姆级教程:文件夹自动扫描safetensors识别自然排序配置 1. 项目简介 今天给大家介绍一个特别实用的工具——Jimeng LoRA测试系统。如果你正在训练LoRA模型,或者需要测试不同训练阶段的模型效果,这个工具能帮你节省大量时间。 …

作者头像 李华
网站建设 2026/7/23 2:20:43

零基础玩转SDPose-Wholebody:一键部署全身姿态检测模型

零基础玩转SDPose-Wholebody:一键部署全身姿态检测模型 1. 项目概述 SDPose-Wholebody是一个基于扩散先验技术的全身姿态估计模型,能够精准检测人体133个关键点。这个模型特别适合想要快速上手人体姿态检测的初学者,因为它提供了完整的Dock…

作者头像 李华
网站建设 2026/7/22 1:43:35

通义千问轻量模型:开发者API文档检索效率提升35%

通义千问轻量模型:开发者API文档检索效率提升35% 1. 引言:开发者每天浪费在找文档上的时间 如果你是一名开发者,下面这个场景你一定不陌生:为了调用一个API,你需要先找到它的官方文档。你打开搜索引擎,输…

作者头像 李华
网站建设 2026/7/20 15:36:57

深度学习项目训练环境:快速搭建与实战应用

深度学习项目训练环境:快速搭建与实战应用 你是否经历过这样的场景:花三天配环境,调两天报错,跑一小时显存溢出,最后发现是CUDA版本和PyTorch不兼容?或者刚下载完代码,却卡在“ModuleNotFoundE…

作者头像 李华