【串口】串口基本概念

1.异步通信和同步通信

同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

2.异步通信的数据传输图

3.串口通信为什么要使接收和发送的波特率相同?

       波特率为每秒钟传输的位数,比如波特率为9600,意思就是每秒钟传输9600位(bit),即1200字节(byte)

       波特率就是通讯的速率,只有波特率一致的情况下才能保证接收方和发送方获取同样的数据。比如两个人一相同速度跑步,互相看着就是静止的一样。如果速度不匹配就会有误差。

       假设波特率为9600bps,则一个单位时间长为1/9600s=104us。

       传输的过程中,高电平代表1,低电平代表0,接收方要正确接收数据,就必须采用与发送端相同的波特率。因为要确定每一位数据的时间宽度,波特率的作用就是这做这个的,不同的波特率所确定的位宽是不一样的。

4.数据位不一致会导致乱码

       数据位主要是要传送的信息

       假设数据位设置为5,那么就相当于规定了每个传输字节只能由5个二进制位来表示,例如:11111,10110,01110等。也就是说,这个RS232口只能发送00000~11111这个范围内的数,如果发送一个比11111还大的数,例如11111+1,也就是100000,那么经过这个RS232口的处理以后,只会发送出去一个00000,而接收端只能接收到00000。这样看起来貌似发送的数据和接收的不一样,其实这是串口数据位长度决定了他会发送多少位数据,超出的位是不会被发送的。

       接收和发送的数据位不一致,就会发生乱码现象。

       一个ASCII码必须要用8位二进制数来表示,其中低7位表示字符,同时还要注意,在标准ASCII中,最高位(b7)用作奇偶校验位。这也就意味着如果串口传输的数据位设置是5或者6位,那么这种情况下,串口是无法发送出ASCII码表中数值大于11111B(十进制31)或者111111B(十进制63)的数所表示ASCII字符的

5.校验位

      串口有5种校验方式,分别是无检验(None),奇校验(Odd),偶校验(Even),1校验(Mark),0校验(Space).

      在数据发送时,如果校验方式设置为无校验,则不发送校验位(数据位发完之后直接是停止位);否则会发送一位校验位。

      假设数据位位数为8,停止位位数位为1,。具体为:如果校验方式设置为1校验(Mark),校验位固定为1;如果校验方式设置为0校验(Space),校验位固定为0;如果校验位为奇校验(Odd),或者偶校验(Even),那么校验位可能为0也可能为1,依据所发送的数据计算得出。

计算方法:如果是奇校验,那么8位数据和1位校验位中的1的个数为奇数;对应的,如果是偶校验,8位数据和1位校验位中的1的个数为偶数。比如,数据37,其二进制编码为00100101,编码中含有5个0和3个1,如果采用奇校验(1的位数为奇数),那么校验位为0;如果使用偶校验(1的位数为偶数),校验位则为1。

      如果发送端可接受端的校验方式不一致的话,很明显会发生乱码现象

6.停止位不一致会导致乱码

       异步通信传输一个字节时,最后一位是1或1.5或2bit的停止位,停止位后面是不定长的空闲位。停止位和空闲位都规定为高电平(逻辑1),这样就可以保证起始位开始处一定有一个下跳沿。   

      假设发送端发送完一字节数据后立即发下一字节数据,即没有空闲位。 发送端的停止位为1,接收端的停止位为2。

      就会发生,当发送端已经发送完上一字节数据的停止位1,开始发送下一字节数据的起始位0时;接收端还是停止位,就错过了发送端发送的起始位,就会导致乱码。

7.停止位为什么有1.5位

       1.5停止位,是指停止位的“逻辑1”电平宽度保持为1.5个单位时间长。一个单位时间就是波特率的倒数,例如波特率为9600bps,则一个单位时间长为1/9600s,1.5个停止位,即停止位电平保持1.5/9600s。

       即:位数是信号出现的时间,所以可以有分数,eg:1.5,这样剩下的半位的时间就不能传输数据,需等待下一个时间周期才能传输数据。

8.停止位和空闲位的不同

       停止位和空闲位虽然都是高电平,但停止位是字符格式中规定好的,是传递字符的一部分。发送端和接收端之间,在传输线上没有字符传送时是高电平,这个高电平称为空闲。

9.帧计数大小

每帧字符的大小为=(起始位+数据位+校验位+停止位)

原文地址:https://www.cnblogs.com/chenxiaomeng/p/13266984.html