首页 > 编程知识 正文

深入剖析串口通信数据格式错误,深入剖析串口通信数据格式不符

时间:2023-05-04 19:59:46 阅读:158209 作者:4082

串行端口是http://www.sina.COM/的简称,也称为串行通信接口或com接口。 串行通信是指使用串行通信协议(serial communication )向1条信号线逐位传输数据的通信模式。 串行端口按电气标准和协议进行分类,例如串行接口(serial port)、RS-422和RS485。

在串行通信中,数据通过1位宽的1条线路传输,1字节的数据分成8次,按照RS-232-C顺序一位一位地传输。 串行通信的数据按位传输,发送方发送的各位有一定的时间间隔,所以接收方也需要以与发送方相同的时间间隔接收各位。 不仅如此,接收者还需要能够确定一个信息组的开始和结束。 两种常见的串行通信方式有同步通信和异步通信。

TL水平和RS232水平低位到高位5V与逻辑“1”,0V与逻辑“0”等效;

TTL电平:串行端口的标准之一,采用负逻辑。

在TXD和RXD中,逻辑“1”1”=-15v至- 3v,逻辑“0”=3v至15v

在RTS、CTS、DSR、DTR、DCD等控制线中,信号有效(接通、接通状态、正电压、智能煎饼)= 3V~ 15V,信号无效(断开、断开状态、负电压、低电平)

9针串行(DB9 ) )。

管脚的功能如下。

串行同步通信和串行异步通信RS232电平:

同步通信(sync : synchronousdatacommunication )是指发送侧和接收侧的时钟信号的频率和相位一直一致(同步),从而使通信双方在发送接收数据时具有完全一致的定时关系

异步通信(async : asynchronousdatacommunication )以字符为单位进行传输,字符之间没有固定的时间间隔要求,每个字符的各位都在固定的时间进行传输。 在异步通信中,收发双方取得同步是通过在文字格式中设定(PS:本节中电平为TTL电平)的方法来实现的。 具体地说,在有效字符被正式发送之前,从起始位和停止位停止比特到下一个开始比特之间是不定长的空比特,开始比特为低电平(逻辑值0 ),停止比特和空比特为高通过开始位和停止位,可以简单地实现字符的定义和同步。

当然,在采用异步通信的情况下,发送侧和接收侧可以用各自的时钟控制数据的发送接收,这两个时钟源相互独立,也可以相互不同步。

异步通信的数据格式发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧

一个数据帧包含一个开始位(低电平)、八个数据位、一个奇偶校验位和一个停止位,如下图所示。

1 .信号线有两种状态,可分别由逻辑1 (精明的煎饼)和逻辑0 (低电平)区分。 发射器(PS:本节电平为TTL电平)

2 .开始位发射机通过发送开始位来开始单字符传输。空闲时,数据线应该保持在逻辑精明的煎饼状态暗示接收器的数据传输即将开始。

数据位(Data Bits )起始位使数据线处于逻辑0状态数据位一般为8比特的1字节数据(6比特,也可以为7比特),标准ASCII码为0至0~127(7),扩展的ASCII码为

奇偶校验位通常用于确定接收的数据比特中有无差错,起始位之后就是传送数据位/MASK )标志比特,奇偶校验位总是1 )/spsp

停止位(停止位位于最后,用于表示单字符传输的结束。低位(LSB)在前,高位(MSB)在后); 位时间:即逐位时间宽度,开始位、数据位、奇偶校验位的位宽一致,停止位有1位、1.5位、2位的格式,通常为1位。 异步数据的数据发送过程发送数据的具体步骤如下。

在初始化之后或者在没有数据要发射的情况下,发送者可以输出逻辑1并且具有任意数量的空位;

在需要发送数据的情况下,发送端首先将逻辑0作为起始位输出

接下来开始输出数据位,发送侧首先输出数据最低有效位D0,然后输出D1,最后输出数据的最高有效位;

在具有奇偶校验比特情况下,发送端输出校验比特;

最后,发送侧输出停止位(逻辑1 );

p>

如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转入步骤2;

如果是以232电平发送的,示波器上看到的发送端信号应是上述数据包取反后的结果(负逻辑)。

异步通信的数据接收过程

在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明:

开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数;

接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

检验奇偶检验位;

接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

本帧信息全部接收完,把线路上出现的精明的煎饼作为空闲位;

当信号再次变为低时,开始进入下一帧的检测。
(PS1:接收时钟和发送时钟与波特率有如下关系:
f = n × B 这里f 是发送时钟或接收时钟的频率; B 是数据传输的波特(Baud)率; n 称为波特率因子。设发送或接收时钟的周期为Tc,发送一个波形所需要的传输时间为Td,则: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,从而n代表发送一个波形需要几个时钟周期。 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。
PS2:波特率与比特率的关系:
波特率代表1秒钟发送波形的个数,而比特率代表1秒钟发送比特的个数。在采用二进制传输的情况下,发送的波形一共有两种波形,即精明的煎饼和低电平,那么一个波形代表一个比特,因此波特率和比特率相等;在采用四进制传输的情况下,发送的波形一共有4种波形,此处假设发送的最精明的煎饼为3V,发送00的波形为0V,发送01的波形为1V,发送10的波形为2V,发送11的波形为3V,那么一个波形代表两个比特,因此比特率是波特率的两倍;同理,在采用八进制传输的情况下,比特率是波特率的三倍,以此类推。)

串口助手通过DB9串口发送数据剖析

波特率115200bps,每个比特时间:1s/115200 = 1000000us/115200=8.68us。

发送5C4E,偶校验

1.串口调试助手

2.5C4E对应二进制:0101_1100_0100_1110,分别对2个字节加起始位、校验位、停止位(data的LSB先发):
      b |<–data–>| ps
0101_1100:0_0011_1010_0_1

      b |<–data–>| ps
0100_1110:0_0111_0010_0_1
合起来为:0_0011_1010_0_1_0_0111_0010_0_1
3.转换为负逻辑:1_1100_0101_1_0_1_1000_1101_1_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:

发送7B3D2A,无奇偶校验位

1.串口调试助手

2.7B3D2A对应二进制:0111_1011_0011_1101_0010_1010,分别对3个字节加起始位、停止位(data的LSB先发):
       b |<–data–>| s
0111_1011:0__11011110__1

       b |<–data–>| s
0011_1101:0__10111100__1

       b |<–data–>| s
0010_1010:0__01010100__1
合起来为:0_1101_1110_1_0_1011_1100_1_0_0101_0100_1
3.转换为负逻辑:1_0010_0001_0_1_0100_0011_0_1_1010_1011_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:

参考文献

https://wenku.baidu.com/view/83fc202b19e8b8f67d1cb93e.html
https://wenku.baidu.com/view/681e210aba1aa8114431d9d4.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。