串口通信介绍


1- 串口通信简介(DB9接口讲解)

任何通信都要有信息传输载体,或者是有线的或者是无线的。串口通信是通过串口线进行有线通信。串口通信在早期是计算机与外界通信的主要手段,那时候的计算机基本上都标配有串口以实现和外部通信。
串口通信早期就定义了一套标准的串口规约,DB9 (9个引脚)接口就是标准接口,此外还有不常见的DB25 (25个引脚)。
DB9接口中有9根通信线,其中3根线(GND、TXD、RXD)很重要必不可少,剩余6根都是和流控有关的,现代我们使用串口都是用来做调试,所以这6根很少使用。但是面试的时候还是可能会问到的,所以还是可以了解一下的。

在这里插入图片描述

  • 1- DCD( Data Carrier Detect)载波检测:主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在线状态。

  • 2- RXD(Receive(rx) Data)串口数据输入:此引脚用于接收外部设备送来的数据。

  • 3- TXD(Transmit(tx) Data)串口数据输出:此引脚将计算机的数据发送给外部设备。

  • 4- DTR( Data Terminal Ready )数据终端就绪:当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。

  • 5- GND(Ground)信号地线

  • 6- DSR(data set ready)数据发送就绪:此引脚高电平时,通知计算机Modem已经准备好,可以进行数据通讯了。

  • 7- RTS(Request To Send)请求发送:此脚由计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。

  • 8- CTS(Clear to send)发送清除:此脚由Modem控制,用以通知计算机将欲传的数据送至Modem。

  • 9- RI ( Ring Indicator)铃声指示:Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定。


2- 串口通信基本原理

(1)串口通信连线

任何通信都要有信息传输载体,或者是有线的或者是无线的。串口通信是通过串口线进行有线通信,在通信时最少需要两根线(GND和信号线)既可以实现单工通信,GPS模块就是典型的串口单工通信实例。此外大部分的串口通信都是使用3根线(TXD、RXD、GND)来实现全双工通信。
GND:保证两设备共地,有统一的参考平面。你说你是高电平或者你说你是低电平肯定有一个参考,GND就是参考平面。

在这里插入图片描述

(2)串口通信时序

串口通信时,收发是一个周期一个周期进行的,每个周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元由:起始位(1bit)+数据位(8bit)+奇偶校验位(1bit)+停止位(1bit) 组成的。

串口通信是异步通信,所以通信双方必须事先约定好通信参数,这些通信参数包括:波特率、数据位、校验位、停止位,这些参数中的任何一个设置错误,都会导致通信失败。譬如波特率调错了,发送方发送没问题,接收方也能接收,但是接收到全是乱码。
在这里插入图片描述

【1】波特率

简而言之,串口传输的波特率即为每秒钟传输二进制的位数,是衡量资料传送速率的指标。

波特率-115200:

  • 1s传输二进制的位数115200bit
  • 传输1bit需要 1/115200s=8.68us

串口通信是一种异步通信方式,收发双方并没有同步时钟信号来规约一个bit的数据发送电平维持多长时间,这样只能靠收发双方的速率来同步收发数据,这个速率叫做波特率(BaudRate),其单位为bps(bit per second)。

串口通信常用速率为115200(3G/4G/调试串口等)、9600(NB-loT/GPS等)、4800等。收发双方的速率必须保持一致,否则会出现乱码或完全接收不到的现象。

【2】起始位

先发出一个逻辑”0”的信号,表示传输字符的开始。

它表示发送方要开始发送一个通信单元,起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。对于串口通信而言总线没有数据传输空闲时维持高电平,一旦产生一个下降沿变成低电平则表示起始信号。

【3】数据位

它一个通信单元中发送的有效信息位,是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(可选的有6、7、8、9,一般都是选择8位数据位,因为一般通过串口发送的数据都是以字节为单位的ASCII码编码,而ASCII码中一个字符刚好编码为8位)。

【4】奇偶校验位

奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中的"1"的个数是奇数或者偶数来进行校验。但是一般都不怎么准确,有50%d误差(等于没说)

奇数校验:8个bit数据位中有偶数个1,那么奇偶校验位为1才能满足1的个数为奇数(奇校验)。如果为0就是偶校验了。
1111 0000 1

偶数校验:8个bit数据位中有奇数个1,那么奇偶校验位为1才能满足1的个数为偶数(偶校验)。如果为0就是奇校验了。
1111 1000 1

此位还可以去除,即不需要奇偶校验位。

【5】停止位

它是发送方用来表示本通信单元结束标志的,停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。


3- TTL、RS232以及RS485介绍

RS232和TTL,最根本的不同在于:
硬件(机制)不同:

(1)TTL

逻辑高电平 1:3.3V或者5V
逻辑低电平 0:0V
TTL是正逻辑,逻辑0为低电平

TTL是芯片上的串口直接出的电平,它适合距离近且干扰小的情况,如开发板上芯片与芯片之间、开发板与串口模块之间的短距离串口通信。

(2)RS232

逻辑高电平 1:- 15V ~ - 3V 常为:-13V
逻辑低电平 0:+3V ~ +15V 常为:13V
也就是说RS232是负逻辑 ,逻辑0为高电平

设备与设备之间的长距离通信,因为压降和信号干扰等原因通常会使用RS232来进行通信。

RS232特点:

  • 接口使用一根Tx信号线和一根Rx信号线而构成共地的传输形式,这种方式抗噪声抗干扰性弱;
  • 传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。
  • 传输速率较低,在异步传输时,波特率为20Kbps(一般是115200bps);
  • 通信的时候只能两点之间进行通信,不能够实现多机联网通信;
  • RS232 与TTL电平不兼容,另外接口的信号电平值较高,易损坏接口电路的芯片。
(3)RS232和TTL之间的转换

CPU或芯片引出的串口默认都是TTL电平,如果要转成RS232电平的话一般会接一个MAX232的芯片。
简单介绍一下MAX232,至于内部是怎么转换或者设计的,想知道的小伙伴可以自行去了解一下:
在这里插入图片描述

当用单片机和PC机通过串口进行通信,尽管单片机有串行通信的功能,但单片机提供的信号电平和RS232的标准不一样,因此要通过MAX232这种类似的芯片进行电平转换。

MAX232芯片的作用:是将单片机输出的TTL电平(0V,5V)转换成PC机能接收的232电平(-10V,10V)或将PC机输出的232电平(-10V,10V)转换成单片机能接收的TTL电平(0V,5V)。

(4)RS485

RS485 和RS232一样都是基于串口的通讯接口,数据收发的操作是一致的,但是它们在实际应用中通讯模式却有着很大的区别,RS232接口为全双工数据通讯模式,而RS485接口一般为半双工数据通讯模式,数据的收发不能同时进行,为了保证数据收发的不冲突,硬件上是通过方向切换来实现的,相应也要求软件上必须将收发的过程严格地分开。

上述针对RS232接口的不足,就不断出现了一些新的接口标准,RS485 就是其中之一,它具备以下的特点:

  • 差分传输增加噪声抗扰度,减少噪声辐射;
  • 长距离链路,最长可达4000英尺(约1219米);
  • 数据速率高达10Mbps (40英寸内,约12.2米) ;
  • 同一总线可以连接多个驱动器和接收器宽共模范围允许驱动器和接收器之间存在地电位差异,允许最大共模电压-7-12V。

RS-485能够进行远距离传输主要得益于使用差分信号进行传输,当有噪声干扰时仍可以使用线路上两者差值进行判断,使传输数据不受噪声干扰。


4- 串口通信特点

  • 串口通信单向只有一个数据线实现通信,同时只能传输1个二进制位数据,所以是串行通信;
  • 串口通信的发送方和接收方之间没有统一的时钟信号,所以它是异步通信方式;
  • 串口通信即可以实现全双工通信,也可以实现单工通信;
  • 串口通信出现时间较早、速率较低,并且采样电平信号传输,抗干扰能力不强,传输的距离较近;

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino串口通讯是指使用Arduino开发板与其他设备(如电脑、传感器、执行器等)之间通过串口进行数据交互和控制。Arduino开发板内置一个串口芯片,可以通过串口与其他设备进行通讯。串口通讯是一种简单而可靠的通讯方式,常用于各种嵌入式系统和物联网设备之间的通讯。 Arduino串口通讯通常使用以下步骤: 1. 打开串口连接:在Arduino代码中,使用Serial.begin()函数打开串口连接。该函数的参数是串口的波特率,用于指定串口通讯的速率。 2. 发送数据:使用Serial.write()函数向串口发送数据。该函数的参数可以是单个字节、字节数组或字符串。在Arduino中,字符串需要使用双引号括起来。 3. 接收数据:使用Serial.available()函数检查是否有数据可用。如果有数据可用,使用Serial.read()函数读取数据。该函数返回一个字节,可以使用类型转换将其转换为其他数据类型(如整数、浮点数等)。 4. 处理数据:根据接收到的数据进行相应的处理。例如,如果接收到的是控制指令,可以根据指令控制执行器或修改系统状态。如果接收到的是传感器数据,可以将其转换为可用的数值,并进行后续处理。 5. 关闭串口连接:在程序结束时,使用Serial.end()函数关闭串口连接。该函数无需参数。 总之,Arduino串口通讯是一种简单而可靠的通讯方式,可以实现Arduino开发板与其他设备之间的数据交互和控制。在实际应用中,需要根据具体需求选择合适的通讯协议、波特率和数据格式,以确保正确的数据传输和控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值