恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
嵌入式:深刻理解UART与USART串口通信的特点
首页
资讯中心
/
嵌入式:深刻理解UART与USART串口通信的特点
嵌入式:深刻理解UART与USART串口通信的特点
发布时间:2026/8/23 9:10:02
前言文章合集嵌入式系列https://blog.csdn.net/2401_88433210/category_13196870.html?fromshareblogcolumnsharetypeblogcolumnsharerId13196870sharereferPCsharesource2401_88433210sharefromfrom_link文章以STM32F103ZET6芯片为例来介绍一、什么是 UARTUARTUniversal Asynchronous Receiver/Transmitter是一种叫做 “通用异步收发器” 的硬件电路用于设备间的串行通信即数据按位顺序逐次传输一次传输 1 位数据可以按照需求发送多次。二、初步理解 UART 定义1. UART 接线UART 由 2 根数据线和一根地线组成。2 根数据线分别是Tx 用于发送数据。 Rx 用于接收数据。其实还有一些其他的线但现在很少使用了不再介绍。UART 是用来进行设备间通信的就如同人和人、猫和猫、狗和狗之间通信一样UART模块一般也是和另一个 UART 模块进行通信那么接线上可以如下设置Tx 接对端 Rx Rx 接对端 Tx 构建双向通信的信道通信双方 GND 都接地或者叫做接入公共地上述过程细节对通信双方都有效即通信双方没有主从概念地位是对等的。⭐ 注意Tx/Rx 中T、R 分别表示 “Transmit”发送和 “Receive”接收x 表示什么市面上说法不一可以把他理解成为 exchange交换这样接入之后双方就可以互相进行通信了。2 UART 核心特点串行通信异步通信1 对 1 通信全双工通信关于 UART串口的这些特点对于初学者而言可能比较陌生在继续学习 UART 之前首先以通俗易懂的方式分别对上述特点及其周边进行一下理论补充。2.1 串行 vs 并行如果设备间要进行通信从物理形式上通信基本可以分为两种并行通信和串行通信。并行通信并行通信同时使用多条数据线如 8 条、16 条、32 条来传输一个数据字节或半字、字的所有位。如图中的 8 位数据并行传输 示意图一次性会传递完 8 位数据。并行通信的明显缺点成本高昂线多PCB 布线艰难、接口插件贵速率受限所有数据位必须同时有效才能被正确采样但物理上无法做到绝对同步为了尽量同步时钟就必须很慢给没有到达的信号足够时间。距离短串扰严重仅限板级通信扩展性差位宽升级必须改硬件连线名词解释位0 或 1最小单位字节8 位存一个字母 / 数字半字16 位2 字节STM32 的 uint16_t字32 位4 字节STM32 的 uint32_tCPU 一次处理的大小串行通信串行通信只使用一条或一对数据线将数据字节的各 bit 按照时间顺序一 bit 接一 bit 地依次传输。如图中的 8 位数据串行传输示意图8 位数据会分 8 次按位依次传输。UART 发送、接收都只有 1 根信号线所以数据发送、接收都只能是串行方式。在 STM32 通信领域串行通信成本低速率高扩展性好功耗低等优势让它成为主流实际应用中串行通信占绝对主导地位。注意:串行 UART 串口像 SPII2CCANUART 等都是采用串行通信的主流通信技术UART 串口只是串行通信的一种具体技术2.2 同步通信 vs 异步通信同步通信如下图中同步通信所示在时钟的下降沿 (或者上升沿) 对数据进行采样读取这就是同步通信使用时钟的边沿进行数据接收、发同步如示意图中的波形就可以准确的解析为 11110000 二进制数据下降沿采集异步通信如下图中异步通信示意图所示传输信号中没有时钟信号UART 就是这样的那应该怎样才能识别输入数据波形表示的是11110000、1100、10、… 等哪种二进制情况呢这就需要通过通信收、发端约定的每一个数据位占用的时间 T 来区分 (如图中绿色分割线等分) 每一个数据位对于 UART 而言这就是波特率。光约定每一个数据位占用的时间还是不够的还需要知道从什么时刻开始等间隔截取数据需要截取多少位数据这就是需要数据帧格式来完成的工作。UART 并没有一个用于同步的时钟信号因此 UART 是异步通信方式Aasynchronous异步。结论:stm32 中区分同步通信还是异步通信只看有没有时钟线就可以判断出来2.3 1 对 1 通信 vs 1 对多通信1 对 1 这个很好理解朴素的说就是串口单元只能和另一个串口单元通信不能一个串口单元和多个串口单元通信。 后续会见到一个主设备可以和多个从设备通信的场景比如 I2C 或者 SPI 等。2.4 全双工 vs 半双工全双工可以同时双向传输A → B 且 B → A。如下图中的全双工示意图所示可以同时走红色和蓝色传输路径传输数据。半双工可以双向传输但一次只能一个方向A → B 或者 B → A。如下图中的半双工示意图所示同一时刻要么走红色传输路径要么走蓝色传输路径。单工只能单向传输A → BB → A 二选一。如图中的单工示意图所示只有一条传输路径。秒理解:全双工就是我们人类正常沟通我说你听。你说我听互相可同时说话半双工就是我们人类吵架你说你的我说我的互相问候输入输出同时进行单工就是吵架吵输了我不说了你说你的UART 有独立的发送 (Tx)、接收 (Rx) 信号线因此可以同时进行数据发送与接收也就是全双工的通信方式。但是基于 UART 扩展而来的 RS‑485 通信方式则是半双工通信方式简单了解即可。三、MCU 和串口1. 串口属于 MCU 片上外设在 STM32 对应的 MCU 中为了让 MCU 能进行串口通信进而能获取或者板级外设或者上位机通信的能力为 MCU 内置串口模块。 下面是 STM32 系列 MCU 的内部结构框图很明显串口是以片上外设的形式接入到 MCU 的 APB 总线上的。所以未来整个 MCU 要进行串口通信都由片上外设 USART* 来完成。所以后面研究串口通信都是我们的 MCU 通过自己的片上 USART在和 MCU 外部的串口设备进行通信。类似于网卡和网卡通信。但是网卡属于你的电脑你的电脑需要上网时就给自己的电脑内置网卡使用网卡的联网功能。2. UART 和 USART大家一定注意到了STM32 参考数据手册中都是 USART这两个名词的全称如下UARTUniversal asynchronous receiver transmitter。翻译过来就是通用异步收发器。USARTUniversal synchronous asynchronous receiver transmitter。翻译过来就是通用同步异步收发器。所以 USART 的功能要比 UART 的功能更强大因为 USART 多了一个同步 synchronous 功能。这个同步功能大概是怎么回事呢 如下图所示STM32 MCU 可以给 USART 额外提供一根时钟线以实现双方数据同步传输模式。但是这种同步方式的串口应用场景非常罕见几乎不用此处只做了解。所以如果忽略掉 USART 的同步通信功能那么 USARTUART。注意:区分同步异步看有没有时钟线即可使用 USART时因为不用 USART 同步功能那么 USART 就是 UART3. 串口复用GPIO引脚细节USART 直接复用 GPIO就可以通过 MCU 引脚对外输出信号也就是未来我们配置 USART就一定会配置有关 GPIO 的配置。4. MCU 和 USART 设备通信的宏观过程和问题如下图所示使用 USART 进行通信的设备之间用 Tx 和 Rx 交叉相连意思就是一端发送、一端接收。 此处是 MCU 内部的 USART 模块和外部的 USART 设备之间进行通信。宏观数据传输流程如下发送端Tx发送二进制数据‘1’时输出高电平接收端Rx读取到高电平时代表得到二进制数据‘1’发送端Tx发送二进制数据‘0’时输出低电平接收端Rx读取到低电平时代表得到二进制数据‘0’数据会按顺序拆分成一个个的数据位并依次进行发送和接收。示例 (以 MCU 端发送为例)假定 MCU 要传输 1 个字节的数据 0x55二进制序列为0101 0101发送端依次输出以下电平序列高、低、高、低、高、低、高、低接收端依次读取到电平序列高、低、高、低、高、低、高、低就代表接收到了二进制数0101 0101但是上述的通信过程看似可行实则不行主要有以下 2 个问题通信双方发送和接收数据快慢的问题接收端怎么知道发送端什么时间开始或者结束数据发送的一次计划携带多少数据“波特率” 和 “帧格式” 就是为了解决这两个问题。在继续讲解之前我们先来沟通一下关于通信 “约定” 的话题。要真正通信必须要求通信双方都要采用相同的规则人和人通信双方都要说中文不要说外语都说普通话不要说方言那么我们两个人要通信就必须遵守这个规则。设备间通信就必须遵守通信的规则比如每秒收发的数据量一次发多少哪里开始哪里结束等等都是通信双方都要遵守的规则只有大家都遵守提前约定好的规则才能互相理解彼此完成通信过程结论无论未来设备怎么通信参与通信的设备间约定好的规则大家都要遵守。这点 USART 是这样未来其他通信方式也是如此。后续精彩内容详见下一篇