串口通信是电子工程师面对的最基本的问题,但是往往大家对UART,RS232, COM口这三者的关系理解的不是很透彻,百度他们的区别,网上各种网友自己本身一知半解,更不敢看做出的解答。于是下决心一定要搞清楚他们的关系。抽象的解释固然听起来高大上,但是往往出自已经对该问题有了比较深刻的理解的人之口。对于初学者,看到那些抽象的解释往往解决不了心中的疑惑。
在学习借鉴了好几篇博客和微信推送之后,整理出下面对他们的解释:
UART: 通用异步收发传输
器(当作硬件来看),通常称作UART。
异步通信协议
(当作软件来看)。
特性:两根线,全双工,异步通信,速度慢,也就是一根线发送一根线接收。并且电平逻辑是时间的函数,如何理解这句话?发送和接收一个bit有一个固定的时间宽度,也就是等于这个时间宽度时才认为是1bit,为了约定这个时间宽度,就产生了一个比特率的概念:表示一秒可以传输多少bit的数据。 单位bps=bit per second。
RS232:
RS232是物理层的电气接口要求,是
一种接口和总线标准,UART可以使用RS232通信,
另一种解释:
RS232、RS499、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。
总的来说对于一项通信任务,通信协议可以使用UART协议,而通信协议可以使用COM口( cluster communication port COM口是指针对串行通信协议的一种端口,是PC上异步串行通信口的简写,大部分为9针孔D型。COM口里分RS232,RS422和RS485,传输功能依次递增) 即串行通讯端口来实现硬件连接,此协议下的传输方式可以选用RS232或者RS485,RS422等等。
下面用一个形象生动的比喻来解释UART和RS***的关系是什么:
(
这个比喻借鉴网上的资源,实在找不到出处了。这里声明转载)
通讯问题和交通是一样的,串口通信,我们这里可以和公交运输类比。
公交运行可以被分为两个部分:
1:车站(决定车上装什么人,怎么发送班次)
2:公路(当汽车上路了就要遵守交通规则,过桥有过桥的规则,高速有高速的规则,就和车站没用关系了)
回到问题本身,其实UART就相当于车站,而RS232/RS485等等就相当于公路的规则。
那么它要完成什么功能呢?它的最基本功能,是
串行数据和并行数据之间的转换
。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。
UART协议格式:信号线上空闲的时候为高电平,当出现下跳到低电平的时候表示数据的起始位,接着是先发送低位再发送高位的数据流,尾部可以加奇偶校验位,最后加停止位,停止位长度可以定义,下面例子无奇偶校验位,1bit停止位。
这就是UART要做的工作,一个Byte就是发一班车,两个Byte就是发两班车,UART控制两班车之间间隔多长时间。
那么道路上的规定是怎么样的呢?
RS232/RS485,是两种不同的电气协议,也就是说,是对电气特性以及物理特性的规定,作用于数据的传输通路上,它并不内含对数据的处理方式。更具体的,电气的特性也决定了线路的连接方式,比如RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而RS485, 使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用4根线。但是,无论使用RS232还是RS485,它们与UART是相对独立的,但是由于电气特性的差别,必须要有专用的器件和UART连接,才能完成数据在线路和UART之间的正常流动。
RS232甚至规定了接口的具体样式,图为DB9接口