嵌入式基础-串口相关概念
什么是串口?
1. 串口相关概念
串口是STM32入门实践中两个紧密相关的核心概念。我们来彻底搞懂它。
1.1. 第一部分:什么是串口?
1.1.1. 核心定义
串口是一种采用串行通信方式的物理接口。它的核心思想是“一个一个来”。
-
并行 vs 串行:
-
并行:好比一条8车道的公路,8辆车(8个比特的数据)可以同时通过。速度快,但需要很多线(数据线多),成本高,抗干扰差,适合短距离。
-
串行:好比一条单车道,8辆车必须排成一队,一辆接一辆地通过。速度相对慢,但只需要很少的线(通常2-3根),成本低,抗干扰好,适合长距离通信。
-
在STM32这类微型控制器上,由于引脚资源非常宝贵,串行通信因其简洁性成为了绝对的主流。串口就是最基础、最常用的一种串行通信方式。
1.1.2. 串口通信的基本要素
要让两个设备通过串口成功对话,需要约定好三件事:
-
波特率:数据传输的速度。单位是bps。常见的值有9600, 115200等。例如,115200表示每秒传输115200个二进制位。通信双方必须设置为相同的波特率,否则会收到乱码。
-
数据位:每个数据包包含的有效数据长度。通常是8位(一个字节)。
-
停止位:用于标识一个数据包的结束。通常是1位。
-
奇偶校验位:用于简单的错误检测(可选)。
1.1.3. 串口的物理接口和电平标准
-
物理接口:在电脑上,传统的串口是DB9接口。在STM32开发板上,通常是几个排针。
-
电平标准:这是关键!
-
RS-232:电脑传统串口使用 ±12V 这样的高电压表示0和1。不能直接与单片机连接,会烧坏芯片!
-
TTL:单片机世界使用 0V 表示逻辑0,3.3V或5V表示逻辑1。STM32一般是3.3V。
-
所以,当你用USB线连接电脑和STM32开发板时,中间需要一个“翻译官”——USB转TTL串口模块(如CH340G, CP2102, FT232RL等芯片),它负责把电脑USB信号转换成STM32能懂的TTL电平串口信号。
连接时,要遵循“交叉互连”原则:
-
STM32的TX引脚 -> 接 USB转TTL模块的RX引脚
-
STM32的RX引脚 -> 接 USB转TTL模块的TX引脚
-
GND -> 接 GND(共地非常重要!)
1.1.4. 串口在嵌入式开发中的巨大作用
-
打印调试信息:当你无法使用LED灯表达复杂信息时,串口是无价之宝。你可以用
printf函数将变量值、程序状态等信息发送到电脑的串口助手软件上,这是最有效的调试手段之一。堪称嵌入式工程师的“透视眼”。 -
与外部设备通信:连接GPS模块、蓝牙模块、Wi-Fi模块等,这些模块常常通过串口与STM32交换数据。
-
接收电脑指令:你可以从电脑的串口助手发送指令(如
ON,OFF)来控制STM32的行为。
1.2. 第二部分:为什么需要串口下载程序?(串口ISP)
1.2.1. 核心原因:给“空白”或“死掉”的单片机救急
想象一下,你刚拿到一块全新的STM32芯片,它的内部Flash(程序存储器)是完全空白的,没有任何程序。或者,你不小心烧录了一个有Bug的程序,导致芯片“变砖”,无法响应任何命令。
此时,基于JTAG或SWD的调试器(如ST-Link)将无法工作,因为调试器本身需要芯片内有一小段程序(调试监控程序)来配合。面对一块“白纸”或“死机”的芯片,调试器也无能为力。
1.2.2. 解决方案:内置的Bootloader
STM32的设计者预见了这个问题,他们在芯片出厂时,就在一块受保护的、用户无法修改的系统存储区里,预先烧录好了一段特殊的程序——Bootloader(引导加载程序)。
- Bootloader的作用:它是在芯片上电后,真正第一个运行的程序。它不执行你的主程序,而是负责检查“是否收到了某个特定引脚(如串口的RX)上的特定指令(下载程序的请求)”。
1.2.3. 串口下载程序(ISP)的流程
串口下载,专业术语叫ISP。它的工作流程巧妙利用了内置的Bootloader:
-
配置启动模式:通过设置STM32芯片的BOOT0和BOOT1引脚的电平,告诉芯片:“嘿,这次上电后,请先别跑我的主程序,直接去运行系统存储区里的那个Bootloader。”
- 通常,我们将BOOT0引脚接高电平(3.3V),BOOT1接低电平(GND),即可进入串口下载模式。
-
硬件连接:使用USB转TTL模块,将电脑和STM32的串口引脚(PA9/PA10,具体看芯片数据手册)正确连接。
-
软件操作:在电脑上打开专用的ISP下载工具(如STM32的
Flash Loader Demonstrator或STM32CubeProgrammer),选择正确的串口号,工具会通过串口向STM32的Bootloader发送握手信号。 -
擦除与编程:Bootloader收到有效的握手信号后,就会准备好接收数据。接着,电脑上的工具会将你的
.hex或.bin文件通过串口发送过去,Bootloader负责将这些数据写入到芯片的用户Flash区域。 -
切换模式并运行:下载完成后,将BOOT0引脚改接为低电平(GND),然后复位芯片。这次芯片上电后,Bootloader检查不到下载请求,就会跳转到用户Flash区,开始执行你刚刚下载的全新程序!
1.2.4. 图示流程
graph TD
A[设置BOOT0=1, BOOT1=0] --> B(芯片上电/复位);
B --> C{运行内置<br>Bootloader};
C --> D[通过串口接收<br>电脑发送的程序文件];
D --> E[Bootloader将程序文件<br>写入用户Flash区];
E --> F[设置BOOT0=0];
F --> G(芯片复位);
G --> H{运行用户程序};
H --> I(程序正常执行!);
1.3. 总结:串口下载 vs 调试器下载(ST-Link/J-Link)
| 特性 | 串口下载 | 调试器下载 |
|---|---|---|
| 原理 | 利用芯片内置的Bootloader | 通过JTAG/SWD调试接口直接控制芯片内核 |
| 所需硬件 | USB转TTL模块(便宜, 几元到十几元) | ST-Link/J-Link调试器(稍贵) |
| 优势 | 救砖神器, 适合空白芯片或程序死机的情况; 成本低 | 功能强大, 可在线调试(单步执行、 设置断点、 查看变量), 下载速度快 |
| 劣势 | 只能下载程序, 无法进行在线调试 | 无法直接给完全空白或程序卡死的芯片下载程序 |
| 应用场景 | 1. 量产烧录 2. 救援“变砖”的芯片 3. 仅验证程序功能, 无需调试 |
日常开发调试的主要方式 |
给你的建议:
作为学习者,最好同时备有ST-Link和USB转TTL模块。ST-Link用于日常高效的开发和调试,USB转TTL模块则作为“保险”,当你的程序有问题导致芯片不响应ST-Link时,就可以用串口下载方式去“救活”它。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)