# STM32F103RG 能否通过 SD 卡自刷固件？

> 原文链接：https://robotics.hellobike.com/pitfalls/2015-12-22-robotics-se-8722
> 频道：pitfalls | 更新日期：2015-12-22 | 标签：auto, stackexchange, microcontroller
> 核心摘要：STM32 可通过引导加载程序远程更新固件，固件可先写入 SD 卡再由 bootloader 刷入应用区。

# STM32F103RG 能否通过 SD 卡自刷固件？

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Microcontroller flashing itself](https://robotics.stackexchange.com/questions/8722/microcontroller-flashing-itself)（Robotics Stack Exchange #8722）

**状态**：已解决

## 问题

提问者希望远程通过 UART 无线发送 `.HEX` 或 `.BIN` 固件到 STM32F103RG，校验后保存到 SD 卡，再重启由单片机自行从 SD 卡刷写自身 Flash。

## 环境

STM32F103RG，1Mb Flash，UART 通信调制解调器，SPI 连接 SD 卡。

## 解决办法

1. 在芯片中划分两个程序区域：`bootloader` 和应用程序，并尽量对 `bootloader` 区域写保护。
2. 若 `bootloader` 空间足够，可让其直接与外部通信，接收固件并写入应用区。
3. 若空间不足，可由旧应用负责通信并把固件写到外部 SD 卡，重启后进入 `bootloader`，再由 `bootloader` 读取 SD 卡文件并写入 Flash。
4. `bootloader` 启动后应设置超时、退出命令，或检查是否存在待刷写固件；没有则跳转到应用程序。
5. 需要处理刷写中断电、固件损坏等情况；可保留只读的原始稳定固件，并用按钮等方式通知 `bootloader` 恢复原始应用。
6. 使用外部 SD 卡时，可通过取出 SD 卡、用电脑写入正确固件、再插回设备来恢复。

原问题作者：user2967920；采纳答案作者：Shahbaz。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #8722：Microcontroller flashing itself](https://robotics.stackexchange.com/questions/8722/microcontroller-flashing-itself)