贵阳有哪些可以制作网站的公司吗顺企网吉安网站建设
1. 概述
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种常见的串行通信协议,用于设备之间的异步串行数据传输。它使用简单的两根线(TX和RX)进行全双工通信,不需要时钟信号,依靠预定义的波特率实现数据同步。
2. 主要特性
-  
异步通信:不需要时钟信号
 -  
全双工传输:可同时发送和接收数据
 -  
可配置参数:
-  
波特率(300bps-4Mbps常见)
 -  
数据位(5-9位)
 -  
停止位(1,1.5,2位)
 -  
校验位(无校验、奇校验、偶校验)
 
 -  
 -  
简单实现:仅需TX、RX和地线即可工作
 
3. 硬件接口
标准UART接口包含以下信号线:
| 信号名称 | 描述 | 
|---|---|
| TX | 数据发送线 | 
| RX | 数据接收线 | 
| GND | 公共地线 | 
注:有些实现可能包含硬件流控制信号(CTS/RTS)
4. 数据帧格式
一个标准的UART数据帧包含以下部分:
-  
起始位:1位逻辑低电平,标志数据帧开始
 -  
数据位:5-9位,实际传输的数据(通常8位)
 -  
校验位:可选,用于错误检测(奇校验或偶校验)
 -  
停止位:1、1.5或2位逻辑高电平,标志数据帧结束
 
5. 波特率计算
波特率表示每秒传输的符号数(包括起始位、数据位、校验位和停止位)。
常用波特率:300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200等。
波特率计算公式:实际波特率 = 系统时钟频率 / (16 × UARTDIV)
其中UARTDIV是分频系数,通常存储在波特率寄存器中。
6. 典型工作流程
发送流程
-  
配置波特率、数据位、停止位和校验位
 -  
等待发送缓冲区为空
 -  
将数据写入发送数据寄存器
 -  
硬件自动添加起始位、停止位和校验位(如启用)
 -  
通过TX引脚串行发送数据
 
接收流程
-  
配置波特率、数据位、停止位和校验位(需与发送方匹配)
 -  
检测RX引脚上的起始位(下降沿)
 -  
按照波特率采样数据位
 -  
检查校验位(如启用)
 -  
检测停止位
 -  
将接收到的数据存入接收缓冲区
 -  
触发接收完成中断或设置状态标志
 
7. 错误检测
UART通常支持以下错误检测机制:
-  
奇偶校验错误:接收到的数据与校验位不匹配
 -  
帧错误:未检测到有效的停止位
 -  
溢出错误:新数据到达时前一个数据未被读取
 -  
欠载错误:发送缓冲区为空时仍需发送数据
 
8. 软件实现示例
以下是基于C语言的UART初始化示例(伪代码):
// UART初始化函数
void UART_Init(uint32_t baudrate) {// 1. 计算波特率分频值uint16_t uart_div = SYSTEM_CLOCK / (16 * baudrate);// 2. 禁用UARTUART->CR1 &= ~UART_ENABLE;// 3. 设置波特率UART->BRR = uart_div;// 4. 配置数据格式: 8位数据,无校验,1位停止位UART->CR1 &= ~(PARITY_ENABLE | DATA_BITS_9);// 5. 启用发送和接收UART->CR1 |= (TX_ENABLE | RX_ENABLE);// 6. 启用UARTUART->CR1 |= UART_ENABLE;
}// 发送单个字节
void UART_SendByte(uint8_t data) {while(!(UART->SR & TX_BUFFER_EMPTY)); // 等待发送缓冲区空UART->DR = data; // 写入数据寄存器
}// 接收单个字节
uint8_t UART_ReceiveByte(void) {while(!(UART->SR & RX_DATA_READY)); // 等待数据到达return UART->DR; // 读取数据寄存器
} 
9. 应用场景
-  
微控制器与PC通信
 -  
嵌入式设备间的简单数据交换
 -  
调试信息输出
 -  
与GPS模块、蓝牙模块等外设通信
 -  
工业控制设备的简单接口
 
10. 优缺点分析
优点:
-  
实现简单,硬件要求低
 -  
全双工通信
 -  
不需要时钟信号
 -  
广泛支持,几乎所有微控制器都内置UART
 
缺点:
-  
传输速率相对较低
 -  
传输距离有限(通常不超过15米)
 -  
没有硬件寻址机制,点对点通信
 -  
没有内置的错误纠正机制
 
11. 常见问题与解决方案
-  
通信失败:
-  
检查波特率、数据格式是否匹配
 -  
确认TX/RX线是否交叉连接
 -  
检查地线连接
 
 -  
 -  
数据错误:
-  
降低波特率,特别是长距离通信时
 -  
启用奇偶校验
 -  
检查系统时钟精度
 
 -  
 -  
通信不稳定:
-  
添加适当的终端电阻
 -  
使用屏蔽电缆减少干扰
 -  
考虑使用RS-232或RS-485转换芯片增强信号
 
 -  
 
12. 相关标准与扩展
-  
RS-232:UART的电气标准,定义电压电平(-3V至-15V表示1,+3V至+15V表示0)
 -  
RS-422/RS-485:差分信号标准,支持更远距离和更高速度
 -  
USB转UART:通过USB接口实现UART功能(如FT232、CP2102等芯片)
 -  
软件UART:通过GPIO模拟UART协议(bit-banging)
 
附录A:常用波特率与传输时间
在UART通信中,一个字节的数据(8位) 在传输时会被封装成10位(或更多)的帧,这是因为UART协议添加了额外的控制位
| 波特率 | 传输1字节(10位)时间 | 
|---|---|
| 9600 | 1.04ms | 
| 19200 | 0.52ms | 
| 38400 | 0.26ms | 
| 57600 | 0.17ms | 
| 115200 | 0.087ms | 
附录B:UART与其他串行协议比较
| 特性 | UART | SPI | I2C | 
|---|---|---|---|
| 同步方式 | 异步 | 同步 | 同步 | 
| 信号线数量 | 2(TX,RX) | 3+(SCK,MOSI,MISO) | 2(SDA,SCL) | 
| 最大速率 | 4Mbps | 50Mbps+ | 3.4Mbps | 
| 寻址能力 | 无 | 无 | 有 | 
| 全双工 | 是 | 是 | 半双工 | 
13、STM32的串口资源介绍
串口的硬件连接非常简单,简单的双向串口通信有两根通信线(发送端TX和接收端RX),TX和RX需要交叉连接,当只需要单向的数据传输时,可以只接一根通常线,当两个设备的电平标准不一致时,需要加电平转换芯片。

什么是电平标准?
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
TTL电平:+3.3V或者+5V表示1,0V表示0
RS232电平:-3~-15V表示1,+3~+15V表示0
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)



