python打开串⼝时怎么设置停⽌位_串⼝通讯的起始,数据,停⽌位都是怎么分配的?⼀篇⽂章。。。
串⼝是串⾏接⼝(serial port)的简称,也称为串⾏通信接⼝或COM接⼝。
串⼝通信是指采⽤串⾏通信协议(serial communication)在⼀条信号线上将数据⼀个⽐特⼀个⽐特地逐位进⾏传输的通信模式。
串⼝按电⽓标准及协议来划分,包括RS-232-C、RS-422、RS485等。
1.串⾏通信
在串⾏通信中,数据在1位宽的单条线路上进⾏传输,⼀个字节的数据要分为8次,由低位到⾼位按顺序⼀位⼀位的进⾏传送。
串⾏通信的数据是逐位传输的,发送⽅发送的每⼀位都具有固定的时间间隔,这就要求接收⽅也要按照发送⽅同样的时间间隔来接收每⼀位。不仅如此,接收⽅还必须能够确定⼀个信息组的开始和结束。
常⽤的两种基本串⾏通信⽅式包括同步通信和异步通信。
1.1串⾏同步通信
python怎么读取串口数据同步通信(SYNC:synchronous data communication)是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持⼀致(同步),这样就保证了通信双⽅在发送和接收数据时具有完全⼀致的定时关系。
同步通信把许多字符组成⼀个信息组(信息帧),每帧的开始⽤同步字符来指⽰,⼀次通信只传送⼀帧信息。在传输数据的同时还需要传输时钟信号,以便接收⽅可以⽤时针信号来确定每个信息位。
同步通信的优点是传送信息的位数⼏乎不受限制,⼀次通信传输的数据有⼏⼗到⼏千个字节,通信效率较⾼。同步通信的缺点是要求在通信中始终保持精确的同步时钟,即发送时钟和接收时钟要严格的同步(常⽤的做法是两个设备使⽤同⼀个时钟源)。
在后续的串⼝通信与编程中将只讨论异步通信⽅式,所以在这⾥就不对同步通信做过多的赘述了。
1.2串⾏异步通信
异步通信(ASYNC:asynchronous data communication),⼜称为起⽌式异步通信,是以字符为单位进⾏传输的,字符之间没有固定的时间间隔要求,⽽每个字符中的各位则以固定的时间传送。
在异步通信中,收发双⽅取得同步是通过在字符格式中设置起始位和停⽌位的⽅法来实现的。具体来说就是,在⼀个有效字符正式发送之前,发送器先发送⼀个起始位,然后发送有效字符位,在字符结
束时再发送⼀个停⽌位,起始位⾄停⽌位构成⼀帧。停⽌位⾄下⼀个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停⽌位和空闲位都是⾼电平(逻辑值为1),这样就保证了起始位开始处⼀定会有⼀个下跳沿,由此就可以标志⼀个字符传输的起始。⽽根据起始位和停⽌位也就很容易的实现了字符的界定和同步。
显然,采⽤异步通信时,发送端和接收端可以由各⾃的时钟来控制数据的发送和接收,这两个时钟源彼此独⽴,可以互不同步。
下⾯简单的说说异步通信的数据发送和接收过程。
1.2.1异步通信的数据格式
在介绍异步通信的数据发送和接收过程之前,有必要先弄清楚异步通信的数据格式。
异步通信规定传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停⽌位(stop bit)组成,如图1所⽰(该图中未画出奇偶校验位,因为奇偶检验位不是必须有的,如果有奇偶检验位,则奇偶检验位应该在数据位之后,停⽌位之前)。
图1 异步通信数据格式
(1)起始位:起始位必须是持续⼀个⽐特时间的逻辑0电平,标志传输⼀个字符的开始,接收⽅可⽤起始位使⾃⼰的接收时钟与发送⽅的数据同步。
(2)数据位:数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双⽅共同约定,⼀般可以是5位、7位或8位,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。传输数据时先传送字符的低位,后传送字符的⾼位。
(3)奇偶校验位:奇偶校验位仅占⼀位,⽤于进⾏奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑⾼位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑⾼位。
举例来说,假设传输的数据位为01001100,如果是奇校验,则奇校验位为0(要确保总共有奇数个1),如果是偶校验,则偶校验位为1(要确保总共有偶数个1)。
由此可见,奇偶校验位仅是对数据进⾏简单的置逻辑⾼位或逻辑低位,不会对数据进⾏实质的判断,这样做的好处是接收设备能够知道⼀个位的状态,有可能判断是否有噪声⼲扰了通信以及传输的数据是否同步。
(4)停⽌位:停⽌位可以是是1位、1.5位或2位,可以由软件设定。它⼀定是逻辑1电平,标志着传输⼀个字符的结束。
(5)空闲位:空闲位是指从⼀个字符的停⽌位结束到下⼀个字符的起始位开始,表⽰线路处于空闲状态,必须由⾼电平来填充。
1.2.2异步通信的数据发送过程
清楚了异步通信的数据格式之后,就可以按照指定的数据格式发送数据了,发送数据的具体步骤如下:
(1)初始化后或者没有数据需要发送时,发送端输出逻辑1,可以有任意数量的空闲位。
(2)当需要发送数据时,发送端⾸先输出逻辑0,作为起始位。
(3)接着就可以开始输出数据位了,发送端⾸先输出数据的最低位D0,然后是D1,最后是数据的最⾼位。
(4)如果设有奇偶检验位,发送端输出检验位。
(5)最后,发送端输出停⽌位(逻辑1)。
(6)如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转⼊步骤(2)。
1.2.3异步通信的数据接收过程
在异步通信中,接收端以接收时钟和波特率因⼦决定每⼀位的时间长度。下⾯以波特率因⼦等于16(接收时钟每16个时钟周期使接收移位寄存器移位⼀次)为例来说明。
(1)开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数。
(2)当计到8个时钟的时候,对输⼊信号进⾏检测,若仍然为低电平,则确认这是起始位,⽽不是⼲扰信号。
(3)接收端检测到起始位后,隔16个接收时钟对输⼊信号检测⼀次,把对应的值作为D0位数据。
(4)再隔16个接收时钟,对输⼊信号检测⼀次,把对应的值作为D1位数据,直到全部数据位都输⼊。
(5)检验奇偶检验位。
(6)接收到规定的数据位个数和校验位之后,通信接⼝电路希望收到停⽌位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进⾏奇偶校验,⽆校验错时,把数据位从移位寄存器中取出送⾄数据输⼊寄存器,若校验错,在状态寄存器中置“奇偶错”标志。
(7)本帧信息全部接收完,把线路上出现的⾼电平作为空闲位。
(8)当信号再次变为低时,开始进⼊下⼀帧的检测。
以上就是异步通信中数据发送和接收的全过程了。
1.3⼏个概念
为了更好的理解串⼝通信,我们还需要了解⼏个串⼝通信当中的基本概念。
(1)发送时钟:发送数据时,⾸先将要发送的数据送⼊移位寄存器,然后在发送时钟的控制下,将该并⾏数据逐位移位输出。
(2)接收时钟:在接收串⾏数据时,接收时钟的上升沿对接收数据采样,进⾏数据位检测,并将其移⼊接收器的移位寄存器中,最后组成并⾏数据输出。
(3)波特率因⼦:波特率因⼦是指发送或接收1个数据位所需要的时钟脉冲个数。
2.串⼝接头
常⽤的串⼝接头有两种,⼀种是9针串⼝(简称DB-9),⼀种是25针串⼝(简称DB-25)。每种接头都有公
头和母头之分,其中带针状的接头是公头,⽽带孔状的接头是母头。9针串⼝的外观如图2所⽰。
图2 DB-9外观图
由图2可以看出,在9针串⼝接头中,公头和母头的管脚定义顺序是不⼀样,这⼀点需要特别注意。那么,这些管脚都有什么作⽤呢?9针串⼝和25针串⼝常⽤管脚的功能说明如图3所⽰。
图3 9针串⼝和25针串⼝常⽤管脚功能说明
3.RS-232C标准
常⽤的串⾏通信接⼝标准有RS-232C、RS-422、RS-423和RS-485。其中,RS-232C作为串⾏通信接⼝的电⽓标准定义了数据终端设备(DTE:data terminal equipment)和数据通信设备(DCE:data communication equipment)间按位串⾏传输的接⼝信息,合理安排了接⼝的电⽓信号和机械要求,在世界范围内得到了⼴泛的应⽤。
3.1电⽓特性
RS-232C对电器特性、逻辑电平和各种信号功能都做了规定,如下:
在TXD和RXD数据线上:
(1)逻辑1为-3~-15V的电压
(2)逻辑0为3~15V的电压
在RTS、CTS、DSR、DTR和DCD等控制线上:
(1)信号有效(ON状态)为3~15V的电压
(2)信号⽆效(OFF状态)为-3~-15V的电压
由此可见,RS-232C是⽤正负电压来表⽰逻辑状态,与晶体管-晶体管逻辑集成电路(TTL)以⾼低电平表⽰逻辑状态的规定正好相反。
3.2信号线分配
RS-232C标准接⼝有25条线,其中,4条数据线、11条控制线、3条定时线以及7条备⽤和未定义线。那么,这些信号线在9针串⼝和25针串⼝的管脚上是如何分配的呢?9针串⼝和25针串⼝信号线分配如图4所⽰。
图4 9针串⼝和25针串⼝信号线分配⽰意图
下⾯对这些信号线做个简单的介绍。
(1)数据装置准备好(DSR),有效状态(ON)表⽰数据通信设备处于可以使⽤状态。
(2)数据终端准备好(DTR),有效状态(ON)表⽰数据终端设备处于可以使⽤状态。
这两个设备状态信号有效,只表⽰设备本⾝可⽤,并不说明通信链路可以开始进⾏通信了,能否开始进⾏通信要由下⾯的⼀些控制信号决定。
(3)请求发送(RTS),⽤来表⽰数据终端设备(DTE)请求数据通信设备(DCE)发送数据。
(4)允许发送(CTS),⽤来表⽰数据通信设备(DCE)已经准备好了数据,可以向数据终端设备(DTE)发送数据,是对请求发送信号RTS的响应。
请求发送(RTS)和允许发送(CTS)⽤于半双⼯的通信系统中,在全双⼯的系统中,不需要使⽤请求发送(RTS)和允许发送(CTS)信号,直接将其置为ON即可。
(5)数据载波检出(DCD),⽤于表⽰数据通信设备(DCE)已接通通信链路,告知数据终端设备(DTE)准备接收数据。
(6)振铃指⽰(RI),当数据通信设备收到交换台送来的振铃呼叫信号时,使该信号有效(ON),通知终端,已被呼叫。
(7)发送数据(TXD),数据终端设备(DTE)通过该信号线将串⾏数据发送到数据通信设备(DCE)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论