在嵌入式开发中,常见的通信协议有UART、I2C、SPI、CAN、USB等等,这些通信协议各有各的特点,依据他们的特性跟使用场景被运用在各个地方。本文主要学习的是串口通信。
串口通信,即串行通信,是一种在设备间进行数据传输的通信方式。在串口通信中,数据按位顺序传输,这种传输方式占用引脚资源少,但相对于并行通信而言,其传输速度较慢。
串口通信的外围电路比较简单,只需要将设备1的发送端TXD与设备2的接收端RXD,以及设备2的发送端RXD与设备1的接收端TXD相连接。注意因为串口通信本质是,电平数据的发送,因此,进行串口通信的两个设备必须得进行共地操作。必须得进行共地操作!必须得进行共地操作!
一、电平标准
串口通信的电平标准是指在串行通信中,数据传输时所采用的电压标准,用于定义数据位1和数据位0的电压表示方式。常见的串口通信电平标准包括以下几种:
1.1 TTL电平标准
TTL(Transistor-Transistor Logic)电平标准是一种较为新的标准,广泛应用于电子电路中的设备间通信。在TTL电平标准中:
- 逻辑1(高电平)通常表示为+3.3V或+5V(不同芯片可能有所不同)。
- 逻辑0(低电平)则表示为0V。
TTL电平标准的优点是电平范围较小,使用的电压较低,同时也不容易受到干扰。但缺点是传输距离较短,一般只能达到几米左右。
1.2 RS_232电平标准
RS-232是一种较为老旧但广泛应用的串口通信标准,主要用于计算机与外部设备之间的通信。在RS-232电平标准中:
- 逻辑1(高电平)的电平范围为-3V至-15V(负电平表示高电平 1)。
- 逻辑0(低电平)的电平范围为+3V至+15V(正电平表示低电平 0)。
RS-232标准的优点是传输距离较远,可以达到50英尺(约15米)以上,且具有较强的抗干扰能力。但缺点是电平范围较大,需要使用较高的电压,且对信号线的电气特性有一定要求。
1.3 RS-422和RS-485电平标准
RS-422和RS-485是专为长距离和高速度数据传输设计的串口通信标准,它们采用了差分信号传输方式,即利用两根信号线之间的电压差来表示数据。
两线压差+2~+6V表示1,-2~-6V表示0
- RS-422和RS-485的电平范围和传输距离都比RS-232和TTL更大,可以实现数百米甚至数千米的传输距离。
- 它们的抗干扰能力和噪声抑制能力也非常强,适用于工业环境中的长距离通信。
但需要注意的是,RS-422和RS-485标准需要使用特殊的收发器来实现信号的差分传输和接收。
二、通信时序
对于串口通信来说,具有以下几种参数。
2.1 波特率(Baud Rate)
- 定义:波特率是指在单位时间内传输的数据位数,通常以“位/秒”(bit/s)为单位。它表示了通信速率的高低。
- 常见值:常见的波特率有9600、19200、38400、57600、115200等。当波特率设置过高时,数据传输的准确性可能会降低;而设置过低则会影响数据传输的速率。
- 作用:选择一个适当的波特率可以保证串口通信的稳定和准确。
2.2 数据位(Data Bits)
- 定义:数据位是指每个字符传输的位数,它决定了传输字符的大小。
- 常见值:数据位通常为5、6、7或8位。在某些特殊应用中,也可能使用其他位数。
- 作用:数据位设置过低会影响数据传输的准确性,而设置过高则会浪费传输带宽。一般来说,数据位应当和打印机、调制解调器等设备的设置保持一致。
2.3 停止位(Stop Bits)
- 定义:停止位是指字符传输完毕后等待一段时间后再停止传输的方式,用于确保数据传输的完整性和准确性。
- 常见值:常用的停止位有1位和2位。某些特殊情况下,还可能使用1.5位停止位(但较为少见)。
- 作用:停止位的设置需要根据具体的设备要求进行,以确保数据传输的准确性和稳定性。
2.4 奇偶校验位(Parity Bit)
- 定义:奇偶校验位是用来检测并纠正数据传输中的错误的一种机制。
- 类型:奇偶校验位通常有奇校验和偶校验两种。奇校验要求每个字符的二进制表示中,1的个数为奇数(包括校验位);偶校验则要求1的个数为偶数。此外,还有一种无校验位(None)的情况,即不进行奇偶校验。
- 作用:奇偶校验位可以提高数据传输的可靠性,但也会增加一定的开销。具体是否需要设置奇偶校验位,以及设置为奇校验还是偶校验,需要根据具体设备的要求来确定。
根据协议是否需要校验位来区分,如果不需要校验位,则通信协议一帧10位,其中8位数据位,1位起始位,1位停止位。
如果不需要校验位,则通信协议一帧11位,其中1位起始位,9位数据位(其中8位数据,1位校验位)1位停止位。校验又分为奇校验与偶校验。
奇校验:在通信过程中发送的一帧数据,里面1的个数为奇数,如果当数据位中1的个数为奇数个,则校验位置0,如果数据位中1的个数为偶数个,则校验位置1;以此保证数据1的个数为奇数个。
偶校验则与奇校验相反。
当串口处于空闲状态时,信号管脚为高电平,起始信号为一个下降沿信号,停止位信号为上升沿信号,从低电平置为高电平。
三、STM32内部的USART
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器。USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
自带波特率发生器,最高达4.5Mbits/s
可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
可选校验位(无校验/奇校验/偶校验)
支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
3.1 USART基本结构
3.2 数据位长度设置
停止位配置
四、 UART编程
本笔记暂时只记录了以下几个程序:1.串口中断收发数据 2.串口收发解析HEX数据帧
3.串口收发解析字符串数据帧。
4.1 串口中断收发数据
4.2 串口中断收发解析HEX数据
4.3 串口中断收发解析字符串数据
PS:程序经验证无误,如若需要点击连接自取或者评论区留下邮箱,以上三个代码后续会添加程序说明。