title: USART串口协议
tags:
- STM32
categories: - STM32学习
通信接口
通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统
通信协议:制定通信的规则,通信双方按照协议规则进行数据收发
- USART串口,引脚TX、RX,也会叫TXD和RXD,TX(Transmit Exchange)数据发送脚,RX(Receive Exchange)数据接收脚
- I2C通信,引脚SCl和SDA,SCL(Serial Clock)是时钟,SDA(Serial Data)是数据
- SPI通信,引脚是SCLK、MOSI、MISO、CS,MOSI(Master Output Slave Input)是主机输出数据脚,MISO(Master Input Slave Output)是主机输入数据脚,CS(Chip Select)是片选,用于指定通信对象
- CAN通信,引脚CAN_H和CAN_L,这两个是差分数据脚,用两个引脚表示一个差分数据
- USB通信,引脚DP和Dm,DP/D+(Data positive),DM/D-(Data Minus),也是一对差分数据脚
-
全双工,通信双方能够同时通信,全双工的通信都要有两根通信线,发送和接收互不影响
-
I2C 和 SPI 有单独的时钟线,所以时钟是同步的,剩下的没有时钟线,所以需要制定一个采样频率,并且需要增加帧头帧尾,对采样位置进行对其
-
USART、I2C、SPI的高低电平都是对GND的电压差,所以单端信号通信的双方必须共地(也就是把GND接在一起)
-
CAN和USB是靠两个差分引脚的电压差来传输信号,可以不需要GND,可以极大地提高抗干扰特性,所以差分信号传输速度和距离都可以很高
-
I2C和SPI都是芯片之间的通信
串口通信
- 一般的串口都是点对点
USB转串口模块
芯片:ch340
可以把串口协议转换成USB协议
硬件电路
电平标准
- 电平标准是数据1和数据0的表达方式,是传输线缆中认为规定的电压与数据的对应关系,串口常用的电平标准有
串口参数及时序
- 波特率:串口通信的速率
- 起始位:标志一个数据帧的开始,固定为低电平
- 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
- 校验位:用于数据验证,根据数据位计算得来
- 可以选择无校验、奇校验和偶校验
- 停止位:用于数据帧的间隔,固定位高电平
一般一帧中会有10位,其中有效载荷的数据位为8位,前后有起始位和停止位
总结
总结:TX引脚输出定时反转的高低电平,RX引脚定时读取引脚的高低电平,每个字节的数据加上起始位,停止位,可选的校验位,打包成数据帧,依次输出在TX引脚,另一端RX引脚依次接收
USART介绍
- 波特率发生器:就是一个分频器,通过对既定频率的分频,得到响应的波特率,一般用9600或115200
发送数据寄存器
- 在某时刻给TDR写入0x55,
- 此时硬件检测到写入数据,会检查当前移位寄存器是否有数据正在移动,若没有数据,则0x55就会立刻全部移动到发送移位寄存器中,准备发送,
- 当数据从TDR移动到移位寄存器时,会置一个标志位(TXE:TX empty),发送寄存器空,
- 此时我们如果再检查标志位,如果置一了,就可以在TDR写入下一个数据
- 注意TXE=1时,数据并没有发送出去,而是在发送移位寄存器中,只要数据从TDR转移到发送移位寄存器,TX1就会置1,我们就可以写入新的数据了
- 此时发送移位寄存器就会在下面的发生器控制的驱动下向右移位,把数据输出到TX引脚
接收移位寄存器
- 数据从RX引脚通向接收移位寄存器,在接收器控制的驱动下,一位一位地读取RX电平,先放在最高位,然后右移移位8次就可以得到一个字节的数据了。
- 当一个字节移位完成后,这一个字节的数据就可以一下转移到接收数据寄存器RDR中,转移完成后也会置一个标志位RXNE(RX Not Empty),接收数据寄存器非空
流控
避免读取信息过慢导致的覆盖或丢失数据
- nRTS(Request To Send)请求发送,是输出引脚,告诉此时能否接收
- nCTS (Clear To Send)是清除发送,是输入引脚,用于接收别人的nRTS信号
- 前面的"n"表示低电平有效