STM32 通过 WIFI 实现远程 OTA 升级:探索与实践 📅 发布时间:2026/7/9 2:54:35 👁️ 浏览次数: 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 连接实现远程 OTAOver - the - Air升级。整体升级流程概述整个升级过程涉及到用户程序、BootLoader 以及自建服务器之间的协同工作。用户程序负责定时与云端交互获取升级信息BootLoader 则在检测到升级标志后执行实际的下载和写入操作。升级文件处理升级文件是 BIN 文件不过在此之前需要用配套的 exe 文件对原始 bin 文件进行特殊处理。具体来说就是每隔 128 个字节进行 CRC16 校验并将校验结果添加到后面。这一步骤大大增强了数据的可靠性防止在传输和存储过程中数据发生错误。虽然这里没有给出这个 exe 文件的具体代码实现但它背后的原理大致如下以下为伪代码示意实际实现需根据具体语言和库# 假设使用 Python 实现 CRC16 校验 import binascii def crc16(data): crc 0xFFFF for byte in data: crc ^ byte for _ in range(8): if crc 0x0001: crc 1 crc ^ 0xA001 else: crc 1 return crc # 读取 bin 文件数据 with open(original.bin, rb) as f: bin_data f.read() new_data bytearray() for i in range(0, len(bin_data), 128): chunk bin_data[i:i 128] new_data.extend(chunk) crc_result crc16(chunk) new_data.extend(crc_result.to_bytes(2, byteorderbig)) # 写入新的 bin 文件 with open(processed.bin, wb) as f: f.write(new_data)在上述代码中crc16函数实现了 CRC16 校验算法。我们以 128 字节为一块读取原始 bin 文件数据对每一块进行 CRC16 校验并将校验结果追加到数据块之后最终生成新的 bin 文件。单片机端升级实现用户程序部分用户程序主要负责与网络模块交互通过 HTTP 的 GET 指令获取云端 info 文件进而获取服务器中的固件程序版本和下载地址等关键信息。这里以 C 语言为例假设已经有一个网络库net_lib来实现网络相关功能实际开发中可能是像 lwIP 这样的网络协议栈#include net_lib.h // 假设 info 文件格式为 versionxxxurlxxx void get_update_info() { char info[256]; if (net_lib_get(http://your_server.com/info, info, sizeof(info))) { char version[32], url[256]; sscanf(info, version%[^]url%s, version, url); // 与自身版本号对比 if (strcmp(version, current_version)! 0) { // 写入 flash 并设置更新标志 write_flash(url); set_update_flag(); // 重启 system_reset(); } } } // 定时调用获取升级信息 void user_program() { while (1) { // 假设每隔 60 秒检查一次 delay(60000); get_update_info(); } }在上述代码中getupdateinfo函数通过netlibget从云端获取 info 文件内容并解析出版本号和下载地址。通过与当前版本号对比若不一致则将下载地址写入 flash 并设置更新标志然后重启设备。userprogram函数则以固定时间间隔调用getupdate_info来周期性检查升级。BootLoader 部分当设备重启进入 BootLoader 后它会检测更新标志。若检测到标志则提取固件下载地址通过 HTTP 下载程序文件并写入 flash完成升级。以下是 BootLoader 关键部分代码示意#include net_lib.h void bootloader() { if (check_update_flag()) { char url[256]; get_download_url(url); char bin_data[130]; int total_size 0; FILE *flash_file fopen(flash.bin, wb); net_lib_get_file(url, [](char *data, int size) { // 每 130 字节检验一次数据 for (int i 0; i size; i 130) { int read_size (size - i 130)? size - i : 130; memcpy(bin_data, data i, read_size); // 这里需要实现 CRC16 校验检查 if (check_crc16(bin_data, read_size)) { fwrite(bin_data, 1, read_size, flash_file); total_size read_size; } else { // 校验失败处理 fclose(flash_file); remove(flash.bin); return; } } }); fclose(flash_file); // 将下载的文件写入真正的 flash write_to_real_flash(flash.bin); clear_update_flag(); } // 跳转到用户程序 jump_to_user_program(); }在这段代码中bootloader函数首先检查更新标志若存在则获取下载地址。通过netlibgetfile以回调方式下载文件数据每次读取 130 字节进行 CRC16 校验这里checkcrc16函数需自行实现校验通过则写入临时文件全部下载完成后将临时文件写入真正的 flash 并清除更新标志最后跳转到用户程序。资料说明本次升级方案提供了 bootloader 源码一份方便大家根据实际需求进行定制修改。还有 bin 文件 CRC 检验处理的 exe 文件一份无需我们从头实现 CRC16 校验及数据追加操作。另外还有操作说明一份能帮助快速上手整个升级流程的搭建和配置。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 升级为产品的后续功能更新和优化提供了极大的便利。希望这篇博文能对正在研究 STM32 OTA 升级的朋友们有所帮助。
乔治·凯南:两个世界的人生 pdf 乔治凯南:两个世界的人生 弗兰克科斯蒂廖拉 (Frank Costigliola) / 2026-1 / 上海人民出版社 链接:pan.baidu.com/s/1j_f90baeUtS4Z14fcIa2ag?pwdkrzc 提取码:krzc乔治凯南(1904—2005)是美国外交史中最重要的人物之一,也是最复杂… 2026/7/7 9:31:20
【从零入门23种设计模式14】行为型之命令模式 一、命令模式的核心本质 命令模式是行为型设计模式的核心,核心定义: 将请求(操作 / 行为)封装为独立对象,使请求的发起者(调用者)与请求的执行者(接收者)完全解耦&#… 2026/5/17 10:25:01
2026年Java线程面试题,持续更新 前言 这篇文章是我近期面试遇到的一些问题(技术类),做的一个总结。 注意: 1.有些问题没有标准答案,需要读者朋友在网上查找。 2.有些问题答案太长,三言两语道不尽,直接给了链接,… 2026/7/7 14:21:05
Claude Code 高效编程实践 + 审查未提交代码 一、项目级:写好 CLAUDE.md(最重要)在项目根目录建 CLAUDE.md(提交进 Git 与团队共享),Claude Code 每次启动自动读取,相当于给 AI 注入"项目 README 编码规范":# 项目概… 2026/7/9 2:54:15
网络安全工具箱:100+ 工具分类速查与选型建议 文章目录 一、为什么需要「工具地图」而不是「工具清单」?二、选型四维模型(先看这个再用表)三、信息收集(Reconnaissance)— 15 个四、扫描与枚举(Scanning & Enumeration)— 14 个五、目录… 2026/7/9 2:54:15
CFCA精品可可设计师高级大考:将虚幻灵感转化为硬核数据模型,实现表达意图的绝对复现 在业余爱好者的圈子里,“表达意图”这四个字听起来充满文艺气息,但在残酷且真实的精品巧克力商业环境中,我必须强调它其实是极其硬核的生存指标。它的潜台词是:你到底有没有能力,将脑海中构想的精品可可风味微观结构&a… 2026/7/9 2:52:14
【ROS 2 机器人技术】动作通信(Action)详解及机器人移动控制实战(附完整项目代码) 前言 在机器人开发中,我们经常需要执行一些耗时较长的任务,比如让机器人导航到目标点、抓取物体、机械臂轨迹跟踪等。这些任务不仅要能发送目标,还需要实时反馈进度,并支持中途取消。ROS 2 中的 动作(Action࿰… 2026/7/9 2:50:13
事务与并发控制:当多人同时操作数据库 事务与并发控制:当多人同时操作数据库一句话总结:事务通过 ACID 特性保证操作的完整性;并发控制通过锁机制和多版本并发控制(MVCC)协调多个事务同时执行,防止丢失修改、读脏数据、不可重复读和幻读四大问题… 2026/7/9 2:48:12
2026 AI 招聘智能体实践:视觉语义架构驱动的安全人才寻访方案 做过招聘数字化的团队大概率都踩过封号的坑:辛辛苦苦养了数月的核心招聘账号,跑几天批量人才寻访就触发风控被永久封禁,甚至连带企业主体受到平台限制。随着 2026 年主流招聘平台全面升级生物行为风控体系,传统基于 DOM 注入、API… 2026/7/9 2:48:12
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08