串口通信是嵌入式的起点,这么学才轻松
“嵌入式的第一步,从打开串口开始。”
不开串口,怎么调试?怎么和外部世界说话?串口搞不懂,学啥都没底气!
今天我们就来一篇最接地气的科普文,让你用最轻松的方式,搞懂这个“人人都听过却容易晕”的串口通信。
🧠 一句话解释串口通信
串口通信,全称 串行通信(Serial Communication),就是数据一位一位按顺序“排队”传过去,就像你吃面条——一根一根吞,不是一口塞完。
对比下并行通信(Parallel):它是“我有8条腿,能一次搬8个字节”,但更复杂、占用IO多、距离短,早就不流行了。
所以嵌入式系统最爱串口:简单、省资源、够用。
🎯 串口的几种经典类型
通信协议 | 接口名字 | 特点 |
---|---|---|
UART | 通用异步收发器 | 嵌入式开发最常见,MCU内置 |
USART | 带同步功能的 UART | STM32中的标准串口模块 |
RS-232 | 老式标准接口 | 电平±12V,台式机老古董 |
TTL串口 | UART使用3.3V/5V电平 | 单片机最常用的串口形式 |
USB转串口 | 接电脑的神器 | 外设调试用,CH340/CP2102/FT232 |
![]() |
🏗️ 串口长啥样?硬件上这么连
以 STM32 或 ESP32 开发板为例:
开发板 TX(发) ----> USB转串口模块 RX(收)
开发板 RX(收) <---- USB转串口模块 TX(发)
GND 对接 GND(地线一定要连!)
搞反了?你串口打印就什么都收不到。
⚙️ 串口五要素(非常重要)
串口通信有“五大金刚”,设置错一个都收不到数据:
项目 | 含义 | 常见值 |
---|---|---|
波特率(Baud) | 每秒传输的比特数 | 9600 / 115200 |
数据位 | 一个数据包里的数据位数 | 8 位(最多见) |
停止位 | 表示数据帧结束 | 1 位 |
校验位 | 检查传输错误 | 通常设为无(None) |
流控 | 管理数据流的方式 | 无(None)最常用 |
比如你设置的是:
115200 8-N-1
意思是:波特率115200,8位数据,无校验,1位停止。
记住这串数字,调试串口的密码!
🧪 Hello, 串口:最基础的例子
在 STM32 中用串口打印一句话:
printf("Hello Serial World!\r\n");
它就会通过 TX 引脚把数据一位一位“吐”出去,你可以在串口工具(如 SecureCRT / XCOM / TeraTerm)中看到。
你会惊讶地发现:“原来 MCU 真能说话!”
🛠️ 不同平台怎么玩串口?
STM32
- 使用
HAL_UART_Transmit()
或printf()
配合重定向fputc
- USART1/USART2/USART3 通常用于调试输出
ESP32
- 自带多个 UART,使用
Serial.begin()
(Arduino) 或uart_write_bytes()
(ESP-IDF)
EFR32(Silicon Labs)
- 使用官方
IO Stream
模块配置串口输入输出 - 配合
sl_iostream_uart_init_instances()
使用
Arduino
- 使用
Serial.begin(9600);
初始化串口 Serial.println("Hello");
直接发送字符串,入门超简单
🧰 推荐工具:串口调试神器们
工具 | 优点 |
---|---|
XCOM | 简洁、无需安装、支持多串口 |
SecureCRT | 功能强大,脚本自动化 |
CoolTerm | 跨平台、界面友好 |
串口调试助手(SSCOM) | 中文、好用、经典老将 |
minicom / screen(Linux) | CLI终端用户首选 |
你还可以用 Python 写串口调试脚本,pyserial
是万能钥匙!
💡 小技巧:串口不通,怎么排查?
- TX/RX 有没有接反?
- 波特率对了吗?
- 开发板串口有没有初始化?
- GND 接了吗?没地线串口发不了电。
- 串口工具没打开多个端口冲突吧?
- USB驱动装了吗?(比如CH340驱动)
🎯 为什么说串口是嵌入式的起点?
- 调试输出:没有串口你连“Hello”都看不到
- 命令控制:你可以做个串口命令行,像在Linux下一样交互
- 设备通信:很多外设(GPS模块、蓝牙模块、LoRa、GSM)都用串口
- 学会串口 = 学会数据流处理:为学 SPI、I2C、CAN 打基础!
🎓 串口进阶还能玩啥?
- DMA 方式提高效率
- 串口中断接收,做个非阻塞交互系统
- 环形缓冲区管理
- 自定义串口协议,比如你自己定义个“AT指令”
- 多串口并发通信(高级玩法)
- 串口升级、串口 Bootloader(比如 STM32 的 ISP 模式)
✅ 总结一下
内容 | 一句话总结 |
---|---|
串口是啥? | 串行通信,省脚省心 |
为啥学它? | 所有嵌入式调试的起点 |
怎么玩? | TX/RX连好,设置对五要素 |
常见错误? | 波特率错、引脚反、没GND |
玩熟了干嘛? | 控制模块、调试系统、玩转外设! |
🚀 最后送你一个顺口溜
串口通信要记牢,
TX对RX别乱搞。
波特率不对全白忙,
调试助手少不了。
GND没接串口闹,
一发一收别吵架。
玩转串口第一关,
嵌入式路上不迷茫!