50576xtu41ifmcak.jpg

嵌入式系统中,诸多设备都可以通过串口来控制,比如WiFi、蓝牙、RFID等等,因此在嵌入式设备中使用串口就显得特别重要。

blob.png

首先,有几个概念简单澄清一下。


RS232RS485TTL指的是电气电平标准。一般而言,TTL使用0V表示低电平,+5V表示高电平。RS232使用负逻辑电平,即+3V ~ +15V表示低电平,-3V ~ -15V表示高电平。RS485和RS232一样都是基于串口的通讯接口,数据收发的操作是一致的,RS485采用差分信号负逻辑,+2V~+6V表示低电平,- 6V~-2V表示高电平。


以上三个协议(RS232、RS485和TTL)是电气特性,规定的是物理层接口要求。物理层标准的建设,就好比各种公路的建设,公路有了我们就可以在上面跑各种汽车,并制定各种汽车的不同行驶规则,这就是通信协议,UART就是其中的一种通信协议,全称是通用异步收发器,规范了在串行通信中,最常见的异步传输的通信模式,下面会有详解。


平常说的串口COM口指的是物理接口,它们通常有9针和4针两种样式标准。4针串口标准中的四个管脚分别是:VCC、TXRX和GND,其中TX和RX分别是发送端(Transmit)和接收端(Receive)。一般而言两个串行口互相收发信息的时候,需要让他们的这两个管×××互相连,即A口的TX接B口的RX,反过来A口的RX接B口的TX。

blob.png

在左边儿的D型9针接口中,一般而言实际用到的也是VCC、TX、RX和GND四个脚。



下面就来具体看看串口是怎么回事。


串口通常指的是串行接口,这跟并行接口相对而言。比如有一个8-bits的数据从A发往B,并行和串行的区别分别如下面所示。

串行传输.png

可以看到,串行传输只需要一根线缆就够了,而并行的话需要8根线。他们各自的特点如下:


  1. 串行传输线缆少,因此信号衰减较慢,电磁兼容性较好,传输距离较长;并行传输线缆多,因此信号衰减较快,电磁兼容性较差,传输距离短。

  2. 串行传输速度乍看起来是并行传输的 1/N ,但实际上由于并行线缆的电磁干扰的物理特性限制,导致并行传输的最高频率(比如几十MHz)要远远低于串行传输的最高频率(高达几十GHz),因此串行传输的速度并不比并行的慢。

  3. 串行传输硬件接口简单,占用空间小,成本低;并行传输硬件接口复杂,占用空间大,成本稍高。

  4. 串行传输由于线缆少,因此数据的正常传输需要各种特定的算法,软件设计复杂;并行传输每个数据位独立,算法和软件设计相对简单。


简单来看,串行传输比并行传输有更多优势,实际上随着各种设备的主频越来越高,串行通信在现代计算机领域越来越大行其道。


那这一根线的串行通信,究竟是怎么传输数据的呢?主要有下面两种办法。


1,同步传输

所谓同步传输,最核心的地方就是用统一的时钟来控制发送方和接收方,然后规定一个同步起始字符,同时规定传输的每个字符包含的位数(一般是5-8位)就可以了。


由于同步传输必须要求收发双方时钟一致,甚至要求使用严格的同一时钟源,而这在多数场合下都是无法达到的要求,因此虽然同步传输比异步传输速度高,但应用更为广泛的还是异步传输。


2,异步传输

顾名思义,异步传输的本质是不要求收发双方时钟的同步性,这意味着他们可以各自有各自的时钟(时钟不需要同步,但频率还得是一样的,不然根本就鸡同鸭讲,即波特率必须得一致),这极大降低了工程实施的复杂性。因此着重要关注的是异步传输。


既然是异步传输,即发送方随时可以发送数据过来,事先是没有跟接收方有过任何协同商量的,那接收方很自然地就会有个疑问:你的数据究竟什么时候过来?一般的做法是这样:规定一个空闲的电位状态(比如高电平),然后规定一个起始位(比如一个低电平时钟间隔),然后接着就是正常的数据位(当然也可以规定长度,比如8-bits),然后是可选的校验位(用来校验数据传输过程中是否受到电磁环境的影响发生数位翻转),然后是停止位(比如一个高电平时钟间隔)。


说那么多,来几张直观的图说明问题吧。下面援引知乎的几幅图,配以实例加以说明。


原图网址:www.zhihu.com/question/29033993


串口传输的典型例子就是键盘按键,当我们按下 'k' 时,实际上就是传输了该字符的ASCII码值 01101011到了主机。

blob.png


但在大部分时候,键盘可能根本没有产生任何数据,那我们就要有一个能表达空闲状态的电平,比如这样。

blob.png


没数据(空闲)时,一直维持在高电平。那好,当我们按下字母 'k' 的时候,我们就立刻发去一个起始位,并紧跟着我们的数据 'k' ,就像这样

blob.png



主机接受了若干个数据位(跟键盘预先商量好)之后就知道,键盘发送了一个 'k' 过来了。然后是可选的校验位和停止位,然后将线缆电平恢复到空闲状态

blob.png


这样一来,设备之间就是异步通信的,只要设置好一致的波特率即可,依靠起始位、数据位、校验位、停止位来协调。以上这样的异步串行通信方式,就是所谓的UART。相信聪明的你都get到了吧 ^_^

blob.png


微信入口:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289214&idx=1&sn=c55efbd2f94137eee67773a3bd5fcfed&chksm=8011462bb766cf3d0061ab8ee10ab01358aa92b862996349891a91443110204951ee474d241d#rd