串口通信

协议:
别人说的话你能听得懂—–>收发双方的封装和解析数据的格式要一致;

同步通信和异步通信:
同步通信:
通信双方按照统一节拍工作,所以配合很好;一般需要发送方给接收方发送信息同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。同步通信用在通信双方信息交换频率固定,或者经常通信时。
异步通信:
在双方通信的频率不固定时(有时3ms收发一次,有时3天才收发一次)不适合使用同步通信,而适合异步通信。异步通信时接收方不必一直在意发送方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后就认为紧跟着的就是有效信息,才会开始注意接收信息,直到收到发送方发过来的结束表示。

电平信号和差分信号:
(1)电平信号和差分信号是用来描述通信线路传输方式的。也就是说如何在通信线路上表达1和0.
(2)电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。
(3)差分信号的传输线中没有参考电平,所有都是信号线。然后1和0的表达靠信号线之间的电压差
总结:电平信号的2根通信线之间的电平差异容易受到干扰,传输容易失败;差分信号不容易受到干扰因此传输质量比较稳定,现代通信一般都使用差分信号,电平信号几乎没有了。

并行接口和串行接口:
(1)串行、并行主要是考虑通信线的根数,就是发送方和接收方同时可以传递的信息量的多少
(2)譬如在电平信号下,1根参考电平线+1根信号线可以传递1位二进制;如果我们有3根线(2根信号线+1根参考线)就可以同时发送2位二进制;如果想同时发送8位二进制就需要9根线。
(3)在差分信号下,2根线(彼此差分)可以同时发送1位二进制;如果需要同时发送8位二进制,需要16根线。
总结:听起来似乎并行接口比串行接口要快(串行接口一次只能发送1位二进制,而并行接口一次可以发送多位二进制)要更优秀;但是实际上串行接口才是王道,用的比较广。因为更省信号线,而且对传输线的要求更低、成本更低;而且在串行时可以通过提高通信速度来提高总体通信性能,不一定非得要并行。

RS232电平和TTL电平
(1)电平信号是用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是1还是0.
(2)在电平信号时多少V代表1,多少V代表0不是固定的,取决于电平标准。譬如RS232电平中-3V~-15V表示1;+3V~+15表示0;TTL电平则是+5V表示1,0V表示0.
(3)不管哪种电平都是为了在传输线上表示1和0.区别在于使用的环境和条件不同。RS232的电平定义比较大,适合干扰大、距离远的情况;TTL电平电压范围小,合适距离近且干扰小的情况。
(4)我们台式电脑后面的串口插座就是RS232接口的,在工业上用串口时都用这个,传输的距离小于15米。TTL电平一般用在电路板内部两个芯片之间。

波特率
(1)波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。譬如每秒钟可以传输9600个二进制位(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600.
(2)串口通信的波特率不能随意设定,而应该在一些值中去选择。一般最常见的波特率是9600或者115200;

起始位、数据位、奇偶校验位、停止位
(1)串口通信时,收发是一个周期一个周期进行的,每周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元是由:起始位+数据位+奇偶校验位+1停止位组成的
(2)起始位表示发送方要开始一个通信单元:数据位是一个通信单元中发送的有效信息位;奇偶校验位是用来校验数据位,以防止数据位出错的;停止位是发送方用来表示本通信单元结束标志的。
(3)起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。
(4)数据位是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(一般可选的有6、7、8、9,99%情况下我们都是选择8位数据位。因为我们一般通过串口发送的文字信息都是ASCII码编码的,而ASCII码中一个字符刚好编码为8位。)
(5)奇偶校验位是用来给数据位进行奇偶校验(把待校验的有限数据逐个位的加起来,总和为奇数奇偶校验位就为1,总和为偶数奇偶校验位就为0)的,可以在一定程度上防止位反转。
(6)停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位,1.5位停止位,2位停止位等。99%情况下都是用1位停止位。
总结:串口通信时因为是异步通信,所以通信双方必须事先约定好通信参数,这些通信参数包括:波特率、数据位、奇偶校验位、停止位(串口通信中起始位定义是唯一的,所以一般不用选择)

单工同行和双工通信
(1)如果只能A发B收则单工,A发B收或者B发A收(两个方向不能同时)叫半双工,A发B收同时B发A收叫全双工。

三根通信线:Rx Tx GND
(1)任何通信都要有信息传输载体,或者是有线的或者是无线的。
(2)串口通信是有线通信,是通过串口线来通信的。
(3)串口通信线最少需要2根(GND和信号线),可以实现单工通信,也可以使用3根通信线(Tx、Rx、GND)来实现全双工。

收发双方事先规定好通信参数(波特率、数据位、奇偶校验位、停止位等)
(1)串口通信属于基层基本性的通信规约,它自己本身不会去协商通信参数,需要通信前通信双方事先约定好通信参数(一般4个最重要的)
(2)串口通信的任何一个关键参数设置错误,都会导致通信失败。譬如波特率调错了,发送方发送没问题,接收方也能接收,但是接受到全是乱码…

信息以二进制流的方式在信道上传输
(1)串口通信的发送方每隔一定时间(时间固定为1/波特率,单位是s)将有效信息(1或者0)放到通信线上去,逐个二进制位的进行发送。
(2)接收方通过定时(起始时间由读到起始标志位开始,间隔时间由波特率决定)读取通信线上的电平高低来区分发送给我的是1还是0。依次读取数据位、奇偶检验位、停止位,停止位就表示这一个通信单元(帧)结束,然后中间是不定长短的非通信时间(发送发有可能紧接着就发送第二帧,也可能半天都不发第二帧,这就叫异步通信),接下来就是第二帧..
总结
(1)波特率非常重要,波特率错了整个通信就乱套了;
(2)数据位、奇偶校验位、停止位也很重要,否则可能认不清数据。
(3)通过串口不管发数字、文本、命令等,都要先对发送内容进行编码,编码成二进制再进行逐个位的发送。
(4)串口发送的一般都是字符,一般都是ASCII码编码后的字符,所以一般设置数据位都是8,方便刚好一帧发送1个字符。

猜你喜欢

转载自blog.csdn.net/chihunqi5879/article/details/78320615