一文讲透串口(UART)通信,超级详细!!!

立芯嵌入式 2025-09-21 12:30

大家好,欢迎来到立芯嵌入式

不知道有没有朋友还记得以前台式机上那些厚重的串口打印机、鼠标和调制解调器吗?插头比手指还大,还得用螺丝拧上——没错,那时候大多是靠 串口UART 在背后默默传输数据。虽然现在 USB 几乎统治了所有外设接口,但串口并没有被淘汰,反而在嵌入式开发场景中活得越来越滋润了。

你在 ArduinoSTM32树莓派 上调试 GPS 模块蓝牙模块串口屏RFID 读卡器……十有八九都绕不开 UART。这货真就是嵌入式通信的万金油。

今天我们就来聊聊:UART 到底是什么,它怎么工作,有哪些坑,又适合干什么?

串口是什么?

串口(UART),全称 Universal Asynchronous Receiver/Transmitter,中文叫“通用异步收发器”,当然,我们更习惯称之为串口。注意,它不是像 SPI 或 I2C 那样的通信协议,而是一块真实存在的电路,可能集成在 MCU 里,也可能是个独立芯片。

资讯配图

它的本职工作很简单:

  • 把 MCU 内部的并行数据转成串行形式发出去;
  • 或者把接收到的串行数据还原成并行数据送进系统。

最棒的一点:只用两根线——TX(发送)和 RX(接收) 就能搞定通信,比 SPI 和 I2C 少了好几根线,布线也省心。

串口是怎么传数据的?

UART 通信说白了就是两端 UART 对着干:一个发,一个收。

资讯配图

比如你的开发板要发送数据到一个蓝牙模块:

  • 内部数据是并行的,UART 发射端会加上一些特殊标志(起始位校验位停止位),然后一个个按位发出去
  • 接收端 UART 再把这些位收集起来,去掉包边,还原成原始数据送出去。

没有时钟同步信号,靠的是两边提前约定好的 波特率 来保持节奏一致。波特率就是每秒传多少个 bit,比如 9600bps115200bps 都是常见值。

一般 UART 协议中,一个数据包长这样:

  • 1 位起始位(Start Bit)
  • 5~9 位数据(Data Bit)
  • 可选的 1 位奇偶校验位(Parity Bit)
  • 1~2 位停止位(Stop Bit)
资讯配图

1. 起始位

在空闲状态下,TX 引脚是高电平(逻辑 1),当有数据要发时,先拉低一位(逻辑 0),告诉接收端“准备好了”,这就是起始位

2. 数据位

真正的数据部分,一般是 8 位,也有的 UART 支持 5~9 位可选,最常见的是 8 位无校验

3. 校验位(可选)

为了检测传输过程中的错误,UART 可以加个奇偶校验位(Parity Bit)
比如“偶校验”就要求总共有偶数个 1,这样接收方可以根据收到的位数判断有没有出错。
注意:这不是真正的纠错,只能报错,不能“纠错”,跟 CRC、FEC 那种比还是简单得多。

4. 停止位

表示数据包结束。通常是 1 位或 2 位逻辑高电平,给接收方缓口气,也防止包和包之间连在一起。

UART 的完整收发流程

资讯配图

来个串口数据传输的五步走流程

  1. MCU 把要发的数据送到 UART(并行形式)
  2. UART 把数据封装成帧,加上起始位、奇偶校验位、停止位
  3. UART 把这个包按位发出去(通过 TX 引脚)
  4. 接收端 UART 从 RX 引脚接收数据
  5. 还原数据,去掉起始位、校验位、停止位,送回系统

串口调试那些事

说到串口通信,不得不提的就是调试。在实际项目里,UART 不光用来数据通信,更是我们跟MCU对话的重要窗口。

常见调试方式

  1. USB 转串口模块
    比如 CH340CP2102FT232 等,这些模块基本是 UART 的标配调试工具。

  • 优点:价格便宜,接线简单,配合串口助手能看见 MCU 发出的每一条 log。
  • 串口助手工具
    国内常用的有 SSCOMXCOMSecureCRTMobaxTerm

    • 稍微专业一点的可以用 逻辑分析仪(Logic Analyzer) 抓波形,检查起始位、停止位是否正确。
  • 串口打印 log 技巧
    调试嵌入式程序最常见的就是 printf 打印调试信息

    • 注意:串口是 IO 资源,会影响中断响应时间,不要在中断里用 printf
    • 建议:必要时可用环形缓冲区做异步打印,减少阻塞。

    串口能实现多设备通信么?

    虽然 UART 是点对点通信,但如果需要一个主机控制多个从设备,也不是完全不行。以下是几种解决方案:

    • STM32 多个 UART 外设:如 USART1USART2 等,可以分别对应多个设备。
    • DMA + 多路复用:某些芯片支持 DMA 配合多路复用,高效处理多设备通信。
    • 软串口(Software UART):用定时器和 GPIO 模拟串口(bitbang),适合波特率低的场合

    提醒
    一旦上了多个 UART,记得规划好波特率中断优先级,避免数据丢包。

    一些小技巧 & 踩过的坑

    1. 波特率不一致的问题

    有次调试 GPS 模块,发现数据一直乱码,最后发现模块默认是 9600bps,我用了 115200
    注意:串口通信讲究两边对暗号,波特率必须一致!

    2. 串口打印卡顿

    STM32 使用 printf 默认是阻塞式的,长时间串口输出可能卡住主程序。
    解决:用非阻塞输出或 DMA 优化。

    3. 串口调试乱码

    注意编码问题,特别是在 Windows 下用中文串口助手。
    注意:建议统一用 UTF-8 编码。

    写在最后

    串口基本上是最简单、稳定省心的通信方式了。从最早的电脑通讯接口,到今天嵌入式设备中的核心通信方式,串口 依旧是我们开发工具箱中不可或缺的一部分。


    声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
    AR
    more
    一片碳化硅,正在改变AR眼镜的未来
    【Open Car】刘涛之力
    【Open Car】反正涨价了,不如直接买最大
    最新议程及260+确认出席终端名单公布 劳尔、PeclersParis、WGSN解读最新趋势丨2025第十五届世界CMF大会
    iPhone 17 Pro相机评分出炉!DXOMARK全球第三,视频表现秒杀全场
    成本直降80%!全彩AR眼镜技术拐点:MicroLED微缩化与光波导降本并行
    马斯克要自研芯片,让手机直连starlink
    英伟达 GB10 与 DGX Spark 开启 AI 战略新阶段
    重新定义3D部件生成天花板!腾讯混元X-Part让语义分解与生成质量破纪录,登顶SOTA!
    AR眼镜技术方向:碳化硅+SRG光波导+刻蚀工艺+大尺寸衬底
    Copyright © 2025 成都区角科技有限公司
    蜀ICP备2025143415号-1
      
    川公网安备51015602001305号