在这里插入图片描述

1.UART特点

  UART(Universal Asynchronous Receiver/Transmitter)即为通用异步收发器,是一种异步,串行,全双工的通信方式,UART总线有两条数据线,TXD和RXD,分别用于发送(transmit)和接受(receive)信息。

1.1同步与异步

  同步与异步说的是进行通信的两个设备是否采用同一时钟基准,采用同一时钟则为同步,两个设备工作步调一致,不采用同一时钟则为异步,两个设备有各自的时钟基准,由于时钟基准不一样,会存在时间误差,不要传太大的数据防止累计误差造成发送和被接受的数据偏差太严重。

 在Linux系统的系统编程中也会有同步和异步这个概念,但是这里的区别是是否按顺序执行,对于同步(也叫阻塞模式)如果一个进程在调用某个请求时CPU不能立即执行,被其他请求占用,那么进程会一直等待直到请求执行得到返回结果,即为阻塞,异步(非阻塞模式)则是不会阻塞,当一个进程发起请求不能立即得到回复时会先转去执行别的任务,当请求有消息返回时去处理,即不进入阻塞态,是异步模式。

1.2串行通信与并行通信

  串行通信是要发送的数据是按位一个一个传输,并行通信是要发送的的数据各个位利用多条数据线进行传输。举个例子:假设只有一个安检口,乘客需要一个一个排好队一个一个过安检,这就是串行,而如果有多个安检口,那么乘客就可以分成多批,多个安检口同时进行安检,这就是并行,可以看出并行的速度会相对串行更快,但是占据的资源会更多(从一个安检口到多个安检口),而且多个数据线之间也会存在干扰,在实际应用中串行比较多。

1.3单工 半双工 全双工

  单工是发送方和接收方是固定的,发送的就是发送的那一方,接收的就是接收的那一方,发送不能变为接收,接收不能变成发送,比如广播就是单工,广播站向大家发送消息,我们只能接收。
  半双工是在一次传输数据过程中发送和接收是固定的,但是发送方和接收方是可以互换过来的,比如对讲机,对方在发消息时我们只能接收消息,当对方讲完我们也能讲话发给对方,但是每一次对讲只能是一方在讲,另一方在听。
  全双工是能同时接收和发送消息,发送和接收是独立的,比如UART利用两根数据线TXD和RXD进行收发就是全双工的。举个例子:打电话就是全双工,打电话时双方既能说话(发送信息)也在同时听(接收数据)。

1.4波特率与比特率

  波特率和比特率都是描述数据传输的速率的量。
  比特率表示单位时间内传输的比特数量,比如9600bps(bits per second)代表每秒传输9600个比特。
  波特率表示单位时间内传输的码元数量,一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据、4bit数据,一般波特率有9600,115200等,9600 Baud表示一秒内传输了9600个码元信息,当一个码元只含1 bit信息时,波特率=比特率。

2.UART帧格式

  UART通信协议下,每次收发的数据帧格式如下:
在这里插入图片描述

  当收发器不发送接收消息时处于空闲状态,为高电平,数据帧由起始位、数据位、校验位和停止位组成,要发送数据的标志是起始位为低电平,数据位为5~8位,不能超过8位,这是因为前面我们提过异步通信模式要避免累计误差,每次传输的数据量不能太大。
  校验有多种方式,常见的为奇偶校验。
  还有一个疑问,每次发送的数据是怎么判定一个比特的,比如要发送01111怎么才能准确发送4个1而不是发送2个、3个1呢?答案就是掐时间,我们假设波特率设为1Baud,一个码元是一比特,那么每一秒就是1比特,我们要发送四个一就计时4s即可。
  一般处理器都会集成UART控制器,我们使用UART时一般主要就是设置寄存器即可。
  UART硬件连接方式如下:一般就是3根线——TXD,RXD,GND。
在这里插入图片描述

3.UART接发数据过程

  在UART发送数据过程中,数据会先放在队列缓冲区,通过移位器,一位一位取出数据,通过发送器发送,在UART接收数据过程中,数据通过移位器一位一位取得数据每一位把它按顺序放到队列缓冲区,以待CPU取用。
在这里插入图片描述

  CPU跟其他模块获取数据方式:1.轮询2.中断.3.DMA(Direct Memory Acess直接存储器访问)
轮询就是频繁询问,看是否有数据获取,中断则是触发中断条件才去取用数据,DMA则是设备直接访问内存,不需要CPU的参与。举个例子:(快递小哥送快递)假设你在网上买了一张桌子,知道快递今天会送到,由于不知道具体时间,你会隔一会就下去快递站看到了吗,可能你问了好多次,最后才有一次说到了,这种就是轮询,你由于不确定一次一次地询问,而如果你在看电视,等快递站打电话你才去拿,这种就是中断,而如果你什么都不干,买的桌子让快递小哥上门直接放在客厅(打算摆放的位置),你不需要干啥,这就是DMA。
  对于CPU写入数据速度和发送器速度不一致的问题,可以利用标志位进行协调写入操作。

3.UART存在的问题

3.1UART存在的问题1——TTL电平不统一

  UART通信时的低电平是0V,但是高电平使用的是处理器使用的电平,即TTL电平,但是不同处理器的TTL电平一般不同,比如51的TTL电平为5V,stm32的电平为3.3V,所以不同处理器设备不能直接相连。

3.2UART存在的问题2——连接器标准不统一

  UART没有规定连接器的统一标准,就像插头和插座没有规定统一尺寸时就无法匹配一样,连接很不方便。

RS232和RS485还是依赖于串口,在电气层面做了改进,抗干扰能力更强

3.3抗干扰能力差

3.4通信距离短

4.RS232协议

  基于UART协议,用-5V~-15V表示逻辑“1”,用5V-15V表示逻辑“0”,0和1是一个区间的电平范围,提高通信过程抗干扰能力,通信距离可达15m,一般只使用TXD,RXD,GND三条线。虽然抗干扰能力提升了,但是还是和TTL电平不匹配,需要加电平转换芯片。

5.RS232协议存在的问题

  • 5.1RS232协议存在的问题1——信号电平值较高容易损坏接口电路芯片且与TTL电平不兼容
  • 5.2RS232协议存在的问题2——通信速度低
  • 5.3RS232协议存在的问题3——易产生共模干扰,抗噪声干扰弱
  • 5.4RS232协议存在的问题4——通信距离较短

6.RS485协议

  基于UART协议,RS485采用差分信号进行数据传输,用两根数据线的电平差值表示信号值,两线间电压为+2V-+6V表示逻辑“1“,两线间电压为-2V–6V表示逻辑“0“,能减少噪声信号干扰,且电压值比RS232低,对接口芯片电路损坏小,更重要的是该协议电平与TTL电平兼容,连接方便。由于两根线都用了,RS485通信过程变成了半双工通信方式,没有所谓的TXD和RXD了,只有a和b,此时用的是a-b的值表示电平信号。
  RS485采用两线制,接线方式为总线拓扑结构,在同一总线上可以存在多个结点,构建成一个网络。
  虽然很多处理器中都会集成 UART 控制器,但处理器产生的信号一般都是 TTL 信号并不是符合 RS485 标准的信号,所以一般我们还需要在处理器外部去添加电路将 TTL 信号转换成差分信号

7.RS485协议优势

  • 接口的信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路连接
  • 通信速度快
  • 抗噪声干扰性强
  • 传输距离较远(1500m)
  • 可实现多节点组网

8.UART&RS232&RS485关系举例

  火车将乘客从A地运往B地,在上车时谁先上进行一个排序就是UART,解决了信号时序问题,但是从A地到B地走哪条线路的选择则是RS232或者RS485,是电气层面的改动,RS232和RS485没有改变UART的信号帧格式。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐