目录
串口?是什么?
串口——坚守着的老邮差
串口,全称串行接口(Serial Interface)是指数据一位一位地顺序传送。
串口的历史就像是通讯界的老古董。早在上世纪70年代,串口就已经存在了。它像一位古老的邮差,虽然速度不如现在的光纤快,但依然是可靠的老朋友。
串口通信就像是你和朋友轮流说话。你说一句,朋友听一句,然后朋友再回一句。在串口里,这个过程叫做“串行传输”,数据一位一位地传送(就像一个个字母通过电话线传递)。
当串口传输文本时,想象一下,你有一个朋友,通过串口与你对话。当发送“Hello”时,每个字符都被转换为对应的ASCII码(H=72, e=101, l=108, o=111)并通过串口传输。接收到这些数字后,再转换回字符显示“Hello”。
由于电线上只有高电平(有)、低电平(无)两种形式,因此还需要由ASCII码转换成二进制数据来传输。
你 | 程序转换 | 电线传输 | 程序转换 | 你的朋友 |
Hello | ASCII | 二进制 | ASCII | Hello |
- 你(发送方):你写下“Hello”,然后把它每个字母转换成ASCII码。
- 发送方计算机:这些ASCII码被转换成二进制数据,并通过串口发送出去。
- 传输介质:数据以二进制形式在电线上传输。
- 接收方计算机:接收到二进制数据后,将其转换回ASCII码。
- 你的朋友(接收方):他再把这些ASCII码转换成字符,看到“Hello”。
串口的连线——注意RX TX的连接方式啊
TXD(Transmit Data)是发送数据的引脚。
RXD(Receive Data)是接收数据的引脚。
不同设备直接的串口通信需要交叉连接TXD与RXD。
GND在串口通信中,接地线是非常重要的,因为它提供了一个公共的参考点,使得发送和接收的信号能够被正确解释。信号是以电压的形式传输的。发送端和接收端需要有一个共同的电压参考点来确定高电平和低电平。如果没有共同的参考点,发送端的高电平(例如+5V)和接收端的高电平可能会有所不同,从而导致信号误判。
假设你在家中使用两台计算机通过串口通信进行数据传输。一天,你发现传输的数据经常出错,有时甚至完全无法通信。你检查了所有的信号线,发现都连接正确,但问题依然存在。后来,你意识到两个设备的地线没有连接……
接地线前:
接地线后:
串口参数
波特率——语速
每秒钟传递二进制的位数(或比特数,或bit)。同时,我们要区分一对容易混淆的概念:
字节(byte),简写为“B”,一个字节由 8 个二进制位组成,由00000000到11111111,因此从大小来看,1byte = 8 bit。
位(bit),简写为“b” ,读作“比特”,表示二进制中的1位。计算机中的数据都是以0和1来表示的。
言归正传,我们可以粗略估计一下——波特率为9600时,在8N1配置下,每个字符的数据帧包括10位。也就是说,一秒钟之内就可以传递960个字符。
数据帧——串口通讯的“八股文”
就像八股文有“破题、承题……束股”有这样那样的格式。通常情况下包括起始位、数据位、校验位、停止位。
7E2格式(7个数据位,偶校验,2个停止位),数据帧如下:
| Start Bit | Data Bits (7) | Parity Bit | Stop Bits (2) |
| 0 | D0 D1 D2 D3 D4 D5 D6 | P | 1 1 |
起始位——礼貌的开场白
每次讲话前都要先招呼一声“开始了哦!”,起始位就是这个招呼。作为一帧的开始,一般是1位(1 bit),低电平。
数据位——一口气说了五、六、七、八个字
数据位里才是真正要传递的内容,通常为七个或者八个。这是因为ASCII码表通常为7位二进制数或者8位二进制数。
停止位——喘了口气
停止位是一帧数据结束的标志,可以是1bit、1.5bit或者2bit,高电平。
就像不同的人有不同的节奏,每一个设备都有自己的时钟,在传输过程中可能出现了小小的不同步,停止位不仅仅表示传输的结束,并且提供了校正时钟同步的机会。
校验位——也并没有闲着
通常情况下,我们使用奇校验或者偶校验。
偶校验要求:有效数据和校验位中“1”的个数为偶数;
奇校验要求:有效数据和校验位中“1”的个数为奇数;
下面是一个示例:
假设数据位为 11 01 00 10
, 数据位中1的个数为4(偶数)。
因为我们使用偶校验,所以校验位设为0,以保持1的总数为偶数。于是数据帧为:
| 0 | 1 1 0 1 0 0 1 0 | 0 | 1 |
因此,奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。
但是奇偶校验位也有它的优点,它是使用一位数据能够达到的最好的校验码。
想以风趣幽默的比喻解释串口通信,让学习不那么枯燥。
有些地方有失严谨,欢迎大家评论区斧正。