ESC
输入关键词搜索文章标题和内容

程序变成二进制后,如何从电脑硬盘"搬运"到单片机Flash?

本文由 linuxROS 整理发布,首发于 linuxros.cn,转载请注明出处。

程序变成二进制后,如何从电脑硬盘"搬运"到单片机Flash?

本文详解单片机存储系统、两种烧录方式、Bootloader工作原理,适合嵌入式开发者理解底层机制。

01 先认识单片机的"仓库群"

烧录的本质,就是把编译好的二进制文件从电脑复制到单片机的Flash中。要理解这个过程,需要先搞清楚单片机内部的存储系统:

存储器类型 特点 用途
Flash 掉电不丢失,可擦写 存储程序代码、常量
RAM 掉电丢失,可随机读写 存储变量、堆栈
ROM 出厂固化,用户无法修改 存储Bootloader
  • Flash 是"长期仓库",程序代码存放在这里,断电后依然保留。
  • RAM 是"临时工作台",程序运行时存放变量,断电即清空。
  • ROM 是"官方配送中心",芯片出厂时就固化了Bootloader程序。

02 两种烧录方式

这就像叫了一辆专车,直接把货物送到目的地:

  • 优点:速度快、操作简单,支持在线调试。
  • 缺点:需要购买专用下载器。
  • 适用场景:开发调试阶段。

方式二:串口 / USB 烧录

这就像通过物流中转:数据先发送到系统存储器中的Bootloader,再由Bootloader写入Flash:

  • 优点:无需专用下载器,只需串口线或USB线。
  • 缺点:需要配置Boot引脚,步骤稍多。
  • 适用场景:量产阶段,可节省下载器成本。

03 Bootloader:官方指定的"搬运工"

Bootloader是芯片厂商出厂时预先固化在系统存储器中的一段小程序,它的工作流程如下:

来自 linuxros.cn · linuxROS
  1. 等待指令 — 通过串口/USB等待电脑发送烧录指令。
  2. 接收数据 — 接收电脑传来的二进制文件。
  3. 写入Flash — 将数据写入Flash指定地址。
  4. 校验确认 — 校验写入的数据是否正确。
  5. 启动程序 — 告诉CPU:"可以开始干活了!"

04 Boot引脚:决定CPU从哪里启动

STM32的启动模式由BOOT0和BOOT1两个引脚决定:

BOOT0 BOOT1 启动方式 说明
0 X 从Flash启动 正常运行用户程序
1 0 从系统存储器启动 运行Bootloader,用于烧录
1 1 从SRAM启动 调试用,不常用

05 烧录完整流程

步骤 操作 说明
1 配置Boot引脚 BOOT0=1, BOOT1=0,选择Bootloader模式
2 按下复位键 CPU被"唤醒"
3 加载Bootloader CPU从系统存储器启动Bootloader
4 等待指令 Bootloader通过串口/USB等待电脑指令
5 发送数据 电脑将二进制文件发送给Bootloader
6 擦除Flash Bootloader擦除Flash目标扇区
7 写入Flash 将数据写入Flash
8 校验数据 读取并校验,确保写入正确
9 切换Boot引脚 BOOT0=0,恢复从Flash启动
10 复位运行 CPU从Flash启动,程序开始运行

06 常见问题

Q:为什么链接后的文件比目标文件大很多?

A:链接器会把依赖的库文件(如libc)也链接进来,因此文件体积会增大。

Q:Flash和RAM有什么区别?

A:Flash掉电不丢失,用于存储程序代码;RAM掉电丢失,读写速度更快,用于存储运行时的变量。

07 总结

二进制烧录的本质,就是通过调试器或Bootloader,将程序文件从电脑传输到单片机的Flash中。理解这个流程后,遇到烧录问题时就能快速定位原因,从容解决。

版权声明

作者linuxROS
协议本作品采用 CC BY-NC-SA 4.0 许可协议:署名-非商业性使用-相同方式共享
关注欢迎关注微信公众号 linuxROS,获取更多机器人 / 嵌入式 / Linux 干货
返回首页