1. 课程导论与开发环境搭建
大家好,欢迎来到这门实战课。我是你们的讲师,一个在嵌入式领域摸爬滚打了十几年的老工程师。
咱们这门课,讲的是 Bootloader IAP 编程与固件升级。说白了,就是怎么让你的单片机自己给自己“换脑子”——通过串口把新程序烧进去,不用拆机箱,不用接烧录器。
我刚开始做产品的时候,每次升级固件都得拿着 J-Link 去现场,那叫一个折腾。后来学会了 IAP,才算是解放了双手。嗯,这节课咱们先把基础打牢。
1.1 什么是 Bootloader?
Bootloader,就是一段在用户程序之前运行的特殊代码。它负责初始化硬件、检查要不要更新程序,然后跳转到主程序。
你可以把它想象成电脑的 BIOS。电脑开机先跑 BIOS,再启动 Windows。单片机也一样,上电先跑 Bootloader,再跳转到你的应用程序。
核心要点: Bootloader 是固件升级的“守门员”,它决定了是正常启动还是进入升级模式。
1.2 IAP 原理:自己烧自己
IAP(In-Application Programming),就是在应用中进行编程。它允许程序在运行时,擦写自己的 Flash 存储器。
为什么能做到?因为 STM32 的 Flash 是分块的。Bootloader 放在一个块里,应用程序放在另一个块里。Bootloader 通过串口收到新固件,直接写到应用程序的块里,然后跳转过去。
我在项目中遇到过一个问题:如果升级过程中突然断电,那应用程序块就废了。所以后来我加了一个“备份区”,先写备份,校验通过再复制到主区。这个咱们后面会细讲。
1.3 为什么需要 CRC 校验?
串口传输数据,难免会有干扰。你想想看,一个 bit 翻转了,程序就跑飞了。
CRC(循环冗余校验)就是用来检测数据有没有被篡改的。发送方计算一个 CRC 值附在数据后面,接收方重新计算,对比一下就知道数据对不对。
我的经验: 别用简单的累加和做校验,那玩意儿撞车概率太高。CRC32 才是正经选择,误判率极低。
我曾经在一个工业项目里,就因为偷懒用了 XOR 校验,结果现场升级后设备直接死机。从那以后,CRC 校验成了我的标配。
1.4 开发板选型:为什么是 STM32?
市面上单片机那么多,为什么选 STM32?
- 生态好: 资料多,库函数全,遇到问题一搜就有答案。
- Flash 分区灵活: 支持按页擦除,非常适合 IAP 场景。
- 性价比高: 几十块钱的板子就能跑全套 IAP 流程。
我个人习惯用 STM32F103C8T6(蓝色 pill 板)做教学,便宜又皮实。当然,F4 系列也完全没问题,代码基本通用。
| 型号 | Flash 大小 | RAM 大小 | 适合场景 |
|---|---|---|---|
| STM32F103C8T6 | 64KB | 20KB | 入门、小项目 |
| STM32F407VET6 | 512KB | 192KB | 复杂 IAP + RTOS |
| STM32H743 | 2MB | 1MB | 高端工业、双 Bank 升级 |
1.5 开发环境搭建:Keil 与 IAR
工欲善其事,必先利其器。咱们得先把环境搭好。
Keil MDK
- 下载安装 MDK-ARM 最新版(我用的是 5.38)。
- 安装对应芯片的 Pack(STM32F1 系列就装 Keil.STM32F1xx_DFP)。
- 破解(你懂的,正版太贵)。
IAR Embedded Workbench
- 下载安装 IAR for ARM(我习惯用 8.50 以上版本)。
- 同样需要安装器件支持包。
注意: Keil 和 IAR 的工程文件不通用。我建议你选一个主攻,另一个了解即可。我个人更倾向 Keil,因为社区资源多。
1.6 串口工具准备
串口是咱们和 Bootloader 沟通的桥梁。你需要准备:
- USB 转 TTL 模块: CH340 或 CP2102 都行,几块钱一个。
- 串口调试助手: 我用的是 SSCOM(丁丁串口),轻量好用。你也可以用 SecureCRT 或 Putty。
- 接线: TX 接 RX,RX 接 TX,GND 接 GND,别接反了。
我曾经有一次忘记共地,结果数据全是乱码。排查了半天才发现是地线没接。嗯,这种低级错误,犯一次就记住了。
1.7 本章知识体系
下面这张图,帮你理清这节课的核心脉络:
总结一下: 这节课我们搞清楚了 Bootloader 是干啥的,IAP 怎么实现自我升级,CRC 为什么必不可少,以及怎么选板子、搭环境、准备串口工具。这些都是后续实战的基石。