串口编程基础入门

1,004 阅读6分钟

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

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

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。

  

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

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

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

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

  1. 串行传输线缆少,因此信号衰减较慢,电磁兼容性较好,传输距离较长;并行传输线缆多,因此信号衰减较快,电磁兼容性较差,传输距离短。
  2. 串行传输速度乍看起来是并行传输的 1/N ,但实际上由于并行线缆的电磁干扰的物理特性限制,导致并行传输的最高频率(比如几十MHz)要远远低于串行传输的最高频率(高达几十GHz),因此串行传输的速度并不比并行的慢。
  3. 串行传输硬件接口简单,占用空间小,成本低;并行传输硬件接口复杂,占用空间大,成本稍高。
  4. 串行传输由于线缆少,因此数据的正常传输需要各种特定的算法,软件设计复杂;并行传输每个数据位独立,算法和软件设计相对简单。

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

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

1,同步传输

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

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

2 ,异步传输

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

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

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

原图网址:www.zhihu.com/question/29…

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

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

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

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

这样一来,设备之间就是异步通信的,只要设置好一致的波特率即可,依靠起始位、数据位、校验位、停止位来协调。

以上这样的异步串行通信方式,就是所谓的UART。相信聪明的你都get到了吧 ^_^