43. 修改、编译、烧录与回滚固件¶
43.1 学习目标¶
为一次固件变更建立完整闭环:确认适用控制板、保存出厂状态、构建、烧录、架空验收,并能恢复旧固件。
这里的构建是用编译器和链接器把源码转换成控制板可执行文件,烧录是把该文件写入微控制器的非易失存储器,回滚是写回已验证的旧固件和参数。三步解决的问题不同:构建成功只能说明工具链生成了文件,烧录成功也不能证明该文件与当前硬件匹配。
43.2 适用范围¶
C30D、C50A/B/C 等 STM32 控制板。不同下载器、芯片和工程需使用对应工具链。
43.3 操作前检查¶
没有回滚文件,不开始烧录
错误固件可能改变车型、轮号、编码器类型和舵机零位。先备份可运行固件或取得与实机完全匹配的出厂文件。
必须记录:控制板与硬件版本、底盘类型、编码器类型、源码/固件日期、编译器、下载器、当前 TYPE、阿克曼舵机零位和恢复文件路径。
43.4 工作原理¶
编译、烧录与回滚边界¶
源码工程决定编译时功能,.hex 和 .bin 是常见的构建结果。兼容性要根据控制板、芯片、车型、编码器和接口配置逐项确认,不能根据文件名判断。下载工具显示“烧录成功”时,只能确认数据已经写入芯片;车型、参数和接线仍需单独验收。
43.5 操作步骤¶
备份与编译¶
- 检查待编译工程的控制板、车型和编码器配置,三项必须与实机完全匹配。
- 复制原工程到新目录,不在归档原件中直接修改。
- 检查芯片型号、时钟、下载地址和车型宏。
- 不改代码先构建一次,记录告警、输出文件和哈希。
- 只做计划中的单一修改,再构建并比较输出。
- 连接 ST-Link、USB 或无线下载工具时保持电源稳定,确认目标芯片。
- 烧录后先让电机失能或轮子架空,观察 OLED、TYPE、自检、串口和编码器。
- 低速逐轮验收。阿克曼先确认舵机零位,避免顶住机械限位。
- 失败时断电,烧回出厂文件,恢复参数并重复基线检查。
43.6 验收标准¶
- 适用控制板、车型和编码器有证据。
- 原工程不改动,构建环境和输出哈希已记录。
- 烧录后自检、接口、轮号和方向正确。
- 急停、使能、通信超时和零速停止可靠。
- 回滚过程至少演练一次,旧固件能恢复基线。
43.7 故障排查¶
表中的 EEPROM 指电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory)。控制板常把车型、纠偏值等掉电后仍需保留的参数写在这一类非易失存储区;回滚程序不一定会同时清除这些参数。
| 现象 | 处理 |
|---|---|
| 下载器找不到芯片 | 供电、SWD 线序、驱动、复位和芯片选型 |
| 烧录成功但 OLED/接口异常 | 工程或板卡版本不匹配,立即回滚 |
| 轮子方向乱 | 车型、轮号、编码器类型或线束不匹配 |
| 阿克曼上电顶死 | 断电,恢复舵机零位和正确车型固件 |
| 回滚后仍异常 | 参数 EEPROM、接线或机械状态也被改变 |