从零开始的串口通信之旅——究竟什么是串口通信?

目录

串口?是什么?

串口——坚守着的老邮差

串口的连线——注意RX TX的连接方式啊

串口参数

波特率——语速

数据帧——串口通讯的“八股文”

起始位——礼貌的开场白

数据位——一口气说了五、六、七、八个字

停止位——喘了口气

校验位——也并没有闲着


串口?是什么?

串口——坚守着的老邮差

        串口,全称串行接口(Serial Interface)是指数据一位一位地顺序传送。

        串口的历史就像是通讯界的老古董。早在上世纪70年代,串口就已经存在了。它像一位古老的邮差,虽然速度不如现在的光纤快,但依然是可靠的老朋友。

        串口通信就像是你和朋友轮流说话。你说一句,朋友听一句,然后朋友再回一句。在串口里,这个过程叫做“串行传输”,数据一位一位地传送(就像一个个字母通过电话线传递)。

        当串口传输文本时,想象一下,你有一个朋友,通过串口与你对话。当发送“Hello”时,每个字符都被转换为对应的ASCII码(H=72, e=101, l=108, o=111)并通过串口传输。接收到这些数字后,再转换回字符显示“Hello”。

        由于电线上只有高电平(有)、低电平(无)两种形式,因此还需要由ASCII码转换成二进制数据来传输。

程序转换电线传输程序转换你的朋友
HelloASCII二进制ASCIIHello
  • (发送方):你写下“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位二进制数。

停止位——喘了口气

        停止位是一帧数据结束的标志,可以是1bit1.5bit或者2bit高电平

        就像不同的人有不同的节奏,每一个设备都有自己的时钟,在传输过程中可能出现了小小的不同步,停止位不仅仅表示传输的结束,并且提供了校正时钟同步的机会。

校验位——也并没有闲着

        通常情况下,我们使用奇校验或者偶校验

        偶校验要求:有效数据和校验位“1”的个数偶数;

        奇校验要求:有效数据和校验位“1”的个数奇数

        下面是一个示例:

        假设数据位为 11 01 00 10, 数据位中1的个数为4(偶数)。

        因为我们使用偶校验,所以校验位设为0,以保持1的总数为偶数。于是数据帧为:

| 0 | 1 1 0 1 0 0 1 0 | 0 | 1 |

        因此,奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。

        但是奇偶校验位也有它的优点,它是使用一位数据能够达到的最好的校验码。

想以风趣幽默的比喻解释串口通信,让学习不那么枯燥。

有些地方有失严谨,欢迎大家评论区斧正。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值