当前位置: 首页 > news >正文

从零打造可落地的直流电机 PID 驱动系统(五):通过蓝牙实现 STM32 程序的远程升级

前言

大家好!在之前的系列文章中,我们已经基于STM32F103C8T6 主控 + DRV8833 驱动 + HC-05 经典蓝牙模块搭建了完整的无线电机控制系统,并开发了功能丰富的 Android 蓝牙控制 APP,实现了电机启停、无级调速、PID 参数在线修改和实时转速显示等核心功能。

然而,在实际产品开发和部署过程中,我们经常会遇到这样的问题:当设备已经安装到现场或者交付给用户后,发现了 bug 需要修复,或者想要添加新功能时,传统的通过 JTAG/SWD 下载线更新固件的方式就变得非常不便,甚至不可能实现。

这就是 OTA(Over-The-Air,空中下载)技术的价值所在。通过 OTA 升级,我们可以在不接触设备硬件的情况下,通过蓝牙无线连接直接更新 STM32 的程序固件,大大降低了产品的维护成本,提升了用户体验。

本文将延续之前的硬件平台和 Android APP 架构,从零教你如何为直流电机 PID 驱动系统添加蓝牙 OTA 升级功能。我们将详细讲解 IAP(In Application Programming,在应用编程)的基本原理、Bootloader 的设计与实现、固件传输协议的选择,以及如何在已有的 Android APP 中集成 OTA 升级功能。全程代码带详细注释,零基础也能一步步跟着做。

一、OTA 升级技术原理

1.1 IAP 与 OTA 的关系

IAP(In Application Programming)即在应用编程,是指用户自己的程序在运行过程中对 MCU 内部 Flash 的部分区域进行烧写的技术。OTA 升级则是在 IAP 技术的基础上,通过无线通信接口(如蓝牙、Wi-Fi 等)来传输新的固件数据,从而实现远程固件更新。

简单来说:

  • IAP 是基础:提供了在程序运行时修改 Flash 内容的能力
  • OTA 是应用:利用无线通信将 IAP 的能力扩展到远程场景

1.2 Flash 分区规划

要实现 OTA 升级,我们需要对 STM32F103C8T6 的 64KB 内部 Flash 进行合理的分区。根据其资源特点,我们采用最简洁可靠的 "Bootloader + APP" 双分区方案:

地址范围用途大小
0x08000000 - 0x08003FFFBootloader 区16KB
0x08004000 - 0x0800FFFF应用程序区48KB
0x08003FF0 - 0x08003FFF升级标志区16 字节

分区说明

  • Bootloader 区:存放引导加载程序,负责检查是否有新固件需要更新,并在必要时将新固件写入应用程序区,最后跳转到应用程序执行
  • 应用程序区:存放我们的主程序(直流电机 PID 驱动程序)
  • 升级标志区:用于存储升级标志位、固件大小和 CRC 校验值等关键信息,是 Bootloader 和 APP 之间通信的桥梁

1.3 完整升级流程

整个蓝牙 OTA 升级过程可以分为以下几个步骤:

  1. 设备启动:STM32 上电后,首先运行位于 0x08000000 地址的 Bootloader 程序
  2. 检查升级标志:Bootloader 读取升级标志区的内容,判断是否需要进行固件升级
  3. 正常启动:如果没有升级请求,Bootloader 会跳转到应用程序区(0x08004000)执行主程序
  4. 接收升级指令:当用户在 Android APP 上点击 "升级固件" 按钮时,APP 会通过蓝牙向设备发送升级指令
  5. 设置升级标志:设备接收到升级指令后,在升级标志区写入特定的升级标志(如 0xAA55),然后触发系统复位
  6. 进入升级模式:系统复位后,Bootloader 检测到升级标志,进入 OTA 升级模式,等待接收新固件
  7. 传输固件数据:Android APP 将新的固件文件分块通过蓝牙发送给 STM32
  8. 写入 Flash:STM32 接收到固件数据后,将其写入应用程序区
  9. 校验固件:固件传输完成后,Bootloader 计算固件的 CRC 校验值,与 APP 发送的校验值进行比对
  10. 清除升级标志:如果校验通过,Bootloader 清除升级标志,然后跳转到新的应用程序执行
  11. 升级失败处理:如果校验失败或传输过程中出现错误,Bootloader 会保留原有的应用程序,确保设备不会 "变砖"

二、硬件准备

本文的硬件平台完全复用之前系列文章中的配置,不需要添加任何额外的硬件:

  • 主控板:STM32F103C8T6 最小系统板(Blue Pill)
  • 电机驱动:DRV8833 直流电机驱动模块
  • 蓝牙模块:HC-05 经典蓝牙模块(带 EN 引脚和背板天线版本)
  • 直流电机:普通有刷直流电机
  • 电源:5V/2A 电源适配器

HC-05 模块与 STM32 的连接方式

  • HC-05 VCC → STM32 3.3V
  • HC-05 GND → STM32 GND
  • HC-05 TX → STM32 PA10(USART1 RX)
  • HC-05 RX → STM32 PA9(USART1 TX)
  • HC-05 EN → STM32 PB0(可选,用于进入 AT 模式)

注意:HC-05 模块的波特率需要设置为 115200bps,

http://www.jsqmd.com/news/863763/

相关文章:

  • C语言位域与位操作规范教程
  • Boilr与其他模板工具的对比:为什么选择这个简单快速的选择
  • 3步解决Windows更新卡顿:终极免费修复工具使用指南
  • hcxdumptool深度探索:从无线数据捕获到WPA安全分析的完整实战指南
  • 中小企业CRM选型指南:2026年8款高性价比横评 - Blue_dou
  • 郑州黄金回收哪家强?7店梯队排名,全区街道全覆盖真实测评 - 润富黄金珠宝行
  • 从零打造可落地的直流电机 PID 驱动系统(六):完整 STM32 蓝牙 OTA 升级工程代码与配置指南
  • 10分钟免费制作专业EPUB电子书:浏览器中的完整指南
  • Microsoft.Recognizers.Text性能优化与扩展开发:自定义实体识别实现
  • 避免吃亏上当 西安居民出手黄金实用经验分享 - 奢侈品回收测评
  • CANN/pypto累乘操作API文档
  • 2026 高炉炼铁智能化技术全景与演进路径~系列文章01:高炉炼铁工艺机理与智能化底层逻辑
  • 为什么选择nodeenv:深度对比nvm、nave等Node版本管理工具
  • 2026年中国营销服务商全景:从种草到AI GEO,品牌需要什么样的合作伙伴? - 数字营销分析
  • 鸣潮模组终极指南:15+游戏增强功能一键解锁
  • 如何在macOS上制作Windows启动盘:WinDiskWriter完整指南
  • 为什么有那么多以字母“C”开头的编程语言?C、C++、C#、CSS
  • 2026 化工、制药、电镀、石化行业废旧贵金属回收盘点,铑、钯、铂、铱、钌、金银、钯碳、碘化铑、铂碳、铱粉靠谱商家筛选,废料变现合规参考与长期合作避坑全指南 - 海棠依旧大
  • 终极指南:如何在Windows上快速搭建企业级Hadoop开发环境
  • 天津二手名表回收攻略:五家口碑老店、当面报价无隐形扣费 - 李宏哲1
  • CANN/pypto截断取整函数文档
  • HoRain云--Claude Code 交互模式
  • Keypatch Patcher工具详解:实时汇编修改二进制文件
  • C++容器适配器应用指南
  • 3分钟一键获取Steam游戏清单:Onekey工具让游戏管理变得简单高效
  • 2026霞浦县黄金回收白银回收铂金回收店铺实力排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 黑色的执念:为什么“换色”这件事,能让技术宅等上十年?
  • 2026 高炉炼铁智能化技术全景与演进路径~系列文章02:高炉全流程多源异构数据体系解析
  • 网盘直链解析神器:八大平台免登录高速下载终极指南
  • 颠覆性文档下载革命:kill-doc如何一键破解30+平台下载限制