STM32 Bootloader开源发布!UART+Xmodem协议,一键远程升级!
告别传统烧录!STM32 Bootloader开启无线升级新时代
你是否还在为每次固件更新而反复拆机、插拔ST-Link?是否因现场设备升级困难而焦头烂额?GitHub开源项目STM32 Bootloader横空出世!专为STM32F100系列设计,基于UART+Xmodem协议,无需复杂硬件,仅需一个USB转串口模块,即可实现远程固件升级!项目上线即获数百星标,成为嵌入式开发者口中的“救命神器”!
四大核心优势,重新定义Bootloader
- 极简硬件要求,低成本实现远程升级
- 硬件只需PA9(TX)、PA10(RX)+USB转串口模块,无需额外电路
- 兼容STM32VLDISCOVERY开发板,支持STM32F100全系列
- 绿色LED(PC9)指示Bootloader模式,状态一目了然
2.Xmodem协议+CRC16校验,数据传输稳如磐石
- 支持Xmodem-128/Xmodem-1K两种协议,适应不同场景
- 每包数据自带CRC16校验,误码率低至工业级标准
- 自动重传机制,网络波动也能100%完成传输
3.清晰内存分区,安全无忧
- Bootloader区:0x08000000~0x08008000(32KB)
- 用户程序区:0x08008000开始,与Bootloader完全隔离
- 独创按键触发机制:长按用户按钮进入升级模式,防止误触发
4.全栈开源,代码即文档
- 基于STM32CubeMX+HAL库开发,代码注释覆盖率98%
- 提供完整工程文件(TrueSTUDIO项目),开箱即用
- 示例程序blinky_test.bin直接验证,5分钟点亮LED
三步极速上手:从零到远程升级
Step 1:环境搭建
- 安装Atollic TrueSTUDIO或STM32CubeIDE
- 克隆仓库:
https://github.com/ferenc-nemeth/stm32-bootloader
- 使用STM32CubeMX重新生成HAL库(可选)
Step 2:编译烧录Bootloader
- 修改链接器脚本(关键!):
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K
- 调整向量表偏移:
// system_stm32f1xx.c
#define VECT_TAB_OFFSET 0x00008000U
- 生成.bin文件:
arm-atollic-eabi-objcopy -O binary "your_app.elf" "firmware.bin"
Step 3:实战固件升级
- 使用PuTTY/Tera Term连接串口(波特率115200)
- 按下用户按钮重启进入Bootloader模式(绿灯亮)
- 发送固件:
- PuTTY:菜单选择File Transfer > Xmodem > Send
- Tera Term:菜单选择File > Transfer > Xmodem > Send
4.等待进度条完成,自动跳转新固件!
开发者进阶技巧
代码架构解析
- xmodem.c/h:协议解析核心,包含CRC计算和包处理
- flash.c/h:Flash擦写驱动,确保数据原子性操作
- uart.c/h:封装HAL库UART接口,实现非阻塞通信
性能优化秘籍
- 修改xmodem.c中的XMODEM_TIMEOUT值适应不同网络环境
- 调整FLASH_PAGE_SIZE适配STM32F103等同类芯片
- 启用DMA传输提升UART吞吐量(需修改HAL配置)
关注我,获取更多技术干货