STM32外设-串口UART
STM32外设-串口UART
- 一,串口简介
- 二,串口基础概念
- 1,什么是同步和异步/UART与USART对比
- 2,串行与并行
- 3,波特率 (Baud Rate)
- 4,数据帧 (Data Frame)
- 5,TX 和 RX
- 三,硬件连接
- 1,usb转ttl模块
- 2,dap下载器
- 四,超时解析法
- 1,数据解析的方法
- 2,超时解析法
一,串口简介
如果想让单片机和电脑,或者和其他设备"交流",该怎么办呢?
UART 就像是设备之间的一条电话线,专门用来互相传递信息。通过它,单片机可以把传感器数据发送给电脑显示,电脑也可以给单片机发送指令来控制硬件。
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器 ,USART(Universal Synchronous Asynchronous Receiver/Transmitter)即通用同步异步收发器
UART 只支持异步通信模式;USART 功能更丰富,既支持同步通信也支持异步通信
UART 仅能进行异步通信,依靠约定波特率来保证收发双方同步 ;USART 除异步模式外,还支持同步模式,同步模式下需要同步时钟信号(如 STM32 单片机中的 USART_CK )来实现更精确的数据传输同步 。
二,串口基础概念
1,什么是同步和异步/UART与USART对比
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器 | USART(Universal Synchronous Asynchronous Receiver/Transmitter)即通用同步异步收发器 |
---|---|
UART 只支持异步通信模式 | USART 功能更丰富,既支持同步通信也支持异步通信 |
异步通信,依靠约定波特率来保证收发双方同步 | USART 除异步模式外,还支持同步模式,同步模式下需要同步时钟信号(如 STM32 单片机中的 USART_CK )来实现更精确的数据传输同步 。 |
2,串行与并行
串行 (Serial): UART 就是这种方式,数据一位一位地在单根线上发送。
优点:省线,适合长距离;
缺点:速度相对较慢。
并行 (Parallel): 数据同时在多根线上发送。
优点:速度快;
缺点:需要更多线,成本高,不适合长距离。
3,波特率 (Baud Rate)
波特率(Baud rate),是对符号传输速率的一种度量 ,单位为波特(Bd )。它表示单位时间(每秒)内通过信道传输的码元个数
波特率就好比两个人打电话时说话的速度。你说话快,对方也要能听得快;你说话慢,对方也要能听得慢。只有双方速度(波特率)约定一致,才能正确理解对方的信息。
码元:是通信中携带数据信息的信号单元,是数字通信中对数字信号进行调制编码后的信号表示形式。在不同的调制方式下,一个码元可以携带不同数量的比特信息。例如,在四进制调制中,一个码元可以表示 2 个比特的信息;在八进制调制中,一个码元可以表示 3 个比特的信息。
比特:即二进制位,是计算机中数据存储和处理的基本单位,只有 0 和 1 两种状态。比特是信息的最小单位,用于表示数据的二进制值。
常见的波特率有 9600, 115200 等,单位是 Bd
4,数据帧 (Data Frame)
为了确保数据正确传输,UART 通信时会把数据打包成一个个"数据帧"来发送。就像写信需要信封、地址、邮票一样,数据帧也有固定格式。
一个典型的数据帧通常包含:
起始位 (Start Bit): 标志着一个新数据帧的开始,通常是低电平(逻辑 0)。
数据位 (Data Bits): 这才是我们要传输的真正数据,通常是 5 到 8 位。
校验位 (Parity Bit) (可选): 用于检查数据在传输过程中是否出错(奇校验、偶校验或无校验)。
停止位 (Stop Bit): 标志着数据帧的结束,通常是高电平(逻辑 1),可以是 1 位、1.5 位或 2 位。
重要:通信双方必须约定好相同的数据帧格式(数据位、校验位、停止位),否则就无法解析数据。
5,TX 和 RX
UART 通信至少需要两根线:
TX (Transmit): 发送数据线。设备的 TX 连接到另一个设备的 RX。
RX (Receive): 接收数据线。设备的 RX 连接到另一个设备的 TX。
TX 要连接对方的 RX,RX 要连接对方的 TX,交叉连接,就像打电话一样,你的话筒对着别人的听筒。
通常还需要一根 GND (Ground) 线,即地线,用来统一双方的参考电平(两个设备不是同一电源),确保信号稳定。
三,硬件连接
理论讲完了,我们来看看实际怎么连接。
1,usb转ttl模块
最常见的场景是将单片机(比如 STM32)和电脑通过 USB 转 TTL 模块连接起来。
- 找到单片机上的 UART 引脚: 通常在开发板原理图或丝印上会标明 UART1_TX, UART1_RX 等。不同单片机可能叫 USART、SCI 等,但原理类似。
- 准备 USB 转 TTL 模块: 这是一个小模块,一边是 USB 口插电脑,另一边引出 TXD, RXD, GND, VCC 引脚。
- 连接:
单片机的 TX 连接到 USB 转 TTL 模块的 RXD
单片机的 RX 连接到 USB 转 TTL 模块的 TXD
单片机的 GND 连接到 USB 转 TTL 模块的 GND
(可选)如果模块需要供电,根据情况连接 VCC。 - 插入电脑: 将模块的 USB 口插入电脑。电脑会识别到一个虚拟串口(COM口)。
注意: 一定要交叉连接 TX 和 RX!GND 必须连接!
连接好后,就可以在电脑上使用串口助手软件(如 XCOM、Putty 等)来收发数据了。
2,dap下载器
连接方法同上
因为我的板子上有ch340模块,ch340是usb转串口芯片,电脑的usb接口可以通过ch340连接到STM32
四,超时解析法
1,数据解析的方法
好了,现在硬件连上了,单片机也配置好了 UART(这部分通常由 STM32CubeMX 或类似工具生成初始化代码),数据源源不断地通过 RX 线进来了。但问题是:我怎么知道一帧完整的数据什么时候结束呢?
比如,电脑发送了 “Hello” 这个字符串,单片机是一个字节一个字节接收的(‘H’, ‘e’, ‘l’, ‘l’, ‘o’)。单片机怎么知道收到 ‘o’ 之后就表示 “Hello” 发送完了,而不是后面还有其他字符呢?
这就是数据解析要解决的问题。方法有很多,比如:
- 固定长度: 双方约定好每次都发送固定长度的数据,比如每次 10 个字节。收满 10 个字节就算一帧。
- 特定结束符: 双方约定好用一个特殊的字符或字符串作为结束标志,比如每次发送都以回车换行符
\r\n
结尾。收到这个标志就算一帧结束。 - 超时解析法: 利用数据传输的间歇时间来判断。如果两个字节之间的时间间隔超过某个阈值(比如 10ms),就认为上一帧数据已经结束了。
2,超时解析法
超时解析法 是非常常用的一种方法,尤其适合那些数据长度不固定,且发送方会自然停顿(比如我们通过串口助手手动发送数据),这时可以用超时解析法,当单片机超过一定时间没有接收到数据时,接收完毕,具体在串口接收讲解