目录
1.UART
基本概念:UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可实现全双工传输和接收,即能同时进行数据的发送和接收。它将传输数据的每个字符一位接一位地传输。
同步通信和异步通信:
同步通讯:收发设备双方会使用一根信号线表示时钟信号,在时钟信号
的驱动下双方进行协调,同步数据,通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样,对应时钟极性与时钟相位。
异步通讯:不需要时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧(串口:起始位 数据 校验位(可以没有) 停止位)的格式传输数据,某些通讯(比如串口)中还需要双方约定数据的传输速率(波特率),以便更好地同步。
通常情况下,从芯片里引出的 UART 口的电平一般是 TTL 电平。TTL 电平信号规定,+5V 等价于逻辑 “1”,0V 等价于逻辑 “0”。
UART 通信通常需要三根线,分别是:
- 发送线(TXD,Transmit Data):
- 功能:这是用于将数据从发送设备传输到接收设备的线路。发送设备(如微控制器、计算机等)会将并行数据转换为串行数据,并通过 TxD 线一位一位地发送出去。数据传输从最低位开始,按照预先设置好的波特率进行传输。例如,当发送设备要发送字符 “C”(ASCII 码值为 67,二进制表示为 01000011)时,会先发送最低位 “1”,然后依次发送其他位,直到最高位 “0” 发送完毕。
- 电气特性:在 TTL 电平标准下,高电平(通常为 +5V 左右)表示逻辑 “1”,低电平(通常为 0V 左右)表示逻辑 “0”。在传输过程中,发送设备通过改变 TxD 线上的电压电平来表示不同的二进制数据。
- 接收线(RXD,Receive Data):
- 功能:RXD 线是接收设备用来接收发送设备发送的数据的线路。接收设备会按照与发送设备相同的波特率对 RXD 线上的信号进行采样,将串行数据转换为并行数据,以供接收设备内部的处理器或其他电路使用。例如,接收设备检测到 RXD 线上的电平变化,根据预设的波特率和数据位的设置,将接收到的二进制数据转换为相应的字符或数据。
- 电气特性:与 TxD 线类似,在 TTL 电平标准下,高电平表示逻辑 “1”,低电平表示逻辑 “0”。当发送设备通过 TxD 线发送数据时,接收设备的 RXD 线上会出现相应的电平变化,接收设备根据这些电平变化来接收数据。
- 地线(GND,Ground):
- 功能:地线是为整个通信系统提供参考电位的线路,确保发送设备和接收设备之间的电压基准相同。它起到了信号回流和屏蔽干扰的作用,保证数据传输的准确性和稳定性。如果没有地线,发送设备和接收设备之间的电位差可能会导致信号失真、误码等问题3。
- 电气特性:地线的电压通常为 0V,它与发送设备和接收设备的电源地连接在一起,形成一个完整的电路回路,使电流能够正常流动。
协议层
串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致(一样的起始位 数据 校验位 停止位)才能正常收发数据
1)通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示。
2)有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长。
3)数据校验
-
偶校验:校验位使得一帧中的7或8个LSB数据以及校验位中’1’的个数为偶数。
例如:数据=00110101,有4个’1’,如果选择偶校验(在USART_CR1中的PS=0),校验位将是’0’,最后数据检验如果数据有偶数个1则数据传输没有出错(但不是绝对的,如果同时两个数据为发送错误(0变成1)则还是偶数个1) -
奇校验:此校验位使得一帧中的7或8个LSB数据以及校验位中’1’的个数为奇数。
例如:数据=00110101,有4个’1’,如果选择奇校验(在USART_CR1中的PS=1),校验位将是’1’,最后数据检验如果数据有奇数个1则数据传输没有出错,但同样不是绝对的(同时两个1变成0)
波特率
波特率(Baud Rate)是指单位时间内传输的码元个数,单位是波特(Baud)。在 UART 通信中,码元通常是指一个二进制位(bit)。例如,波特率为 9600,表示每秒传输 9600 个二进制位。简单地说,它决定了数据传输的速度。
发送端和接收端必须设置相同的波特率的原因:
- 确保数据同步:
- 在 UART 通信中,接收方需要在正确的时间点对接收线(RXD)上的信号进行采样,以正确地接收数据。如果发送方和接收方的波特率不一致,就会导致接收方采样数据的时间点错误。
- 例如,发送方以 9600 波特率发送数据,即每个位的传输时间是 104.17 微秒,而接收方错误