【嵌入式基础】串口通信

1. 前言

串口通信在实际嵌入式开发中非常常用,通常用于和传感器进行数据交互。

2. 基本概念

串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

了解串口通讯原理,需要先了解一下基本概念:波特率、起始位、数据位、校验位、停止位、空闲位。

在这里插入图片描述

2.1 波特率

这是衡量通信速度的参数,表示每秒传送的bit个数。比如100表示每秒发送100bit。

2.2 起始位

起始位是持续一个比特时间的逻辑0电平,表示传输一个字符的开始。接收方可以用起始位使自己的接收时钟与发送方的数据同步。

2.3 数据位

数据位紧跟在起始位之后,是通信中的真正有效信息。

数据位的位数可以有通信双方共同约定,一般可以是5位、7位或8位。

传送字符时,先传低位,再传高位。标准的ASCII码是0~127;拓展的ASCII码是0 ~ 255(8位)。

2.4 校验位

奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶校验位不是必须的。

如果是奇校验,需要保证传输的数据总共奇数个高电平;如果是偶校验,需要保证传输的数据总共偶数个高电平。

假设传输的数据位为 01010101,如果是奇校验,则奇校验位为1(要确保共有奇数个1)。如果是偶校验,则偶校验位为0(要确保共有偶数个1)。

2.5 停止位

停止位一定是逻辑1电平,表示着一个字符的结束。停止位可以是1位、1.5位或2位,可以由软件设定。

2.6 空闲位

空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,必须由高电平来填充。

3. 工作模式

串口通讯根据数据传输方向分为3种工作模式:单工模式、半双工模式和全双工模式。

3.1 单工模式

单工模式的数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端。数据只能使用一根线沿一个方向传输。

3.2 半双工模式

半双工模式既可以发送数据也可以接受数据,但不能同时进行发送和接受。数据传输允许数据在两个方向上传输,但是任何时刻只能由其中的一方发送数据,另一方接受数据。

半双工模式既可以使用一根数据线,也可以使用两根数据线。

3.3 全双工模式

全双工模式通讯允许数据同时在两个方向上传输,是两个单工通信方式的结合,要求发送设备和接受设备都要独立的接收和发送能力。

在全双工模式中,每端都有发送器和接收器,有两条传输线,信息传输高些。

4. 同步通信和异步通信

同步通信和异步通信最明显的区别是有无时钟信号。

4.1 同步通信

同步通信(SYNC:synchronous data communication)是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

同步通信把许多字符组成一个信息组(信息帧),每帧的开始用同步字符来指示,一次通信只传送一帧信息。在传输数据的同时还需要传输时钟信号,以便接收方可以用时针信号来确定每个信息位。

同步通信的优点是传送信息的位数几乎不受限制,一次通信传输的数据有几十到几千个字节,通信效率较高。同步通信的缺点是要求在通信中始终保持精确的同步时钟,即发送时钟和接收时钟要严格的同步(常用的做法是两个设备使用同一个时钟源)。

4.2 异步通信

异步通信(ASYNC:asynchronous data communication),又称为起止式异步通信,是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。

在异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。停止位至下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始。而根据起始位和停止位也就很容易的实现了字符的界定和同步。

显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步。

5. 流控

在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。
如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。

流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,实现收发双方的速度匹配,防止数据的丢失。

PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止)。

5.1 RTS

Require ToSend,发送请求,为输出信号,用于指示本设备准备好可以接收数据,低电平有效。

低电平说明本设备可以接收数据。

5.2 CTS

Clear ToSend,发送允许,为输入信号,用于判断是否可以向对方发送数据,低电平有效。

低电平说明本设备可以向对方发送数据。

5.3 硬件流控使用举例

RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS (Clear ToSend,发送清除)为输入信号,用于指示对端设备是否准备好接收数据。

比如A、B两个设备通信,两个设备的RTS、CTS交叉连接。对B设备发送(A设备接收)来说,如果A设备的接收缓冲区快满时,将自身的RTS拉高(通知B设备停止发送),一段时间后A设备接收缓冲区有了空间,将自身的RTS拉低(通知B设备可以开始发送)。

在这里插入图片描述

5.4 软件流控

软件流控和硬件流控方式一样,只是实现方式不同而已。在通信过程中,软件流控通过在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。

6. 写在最后

参加工作好多年,感觉串口通信还没搞透彻,惭愧。

即使再简单的东西,如果没有亲身实践或工作中没有实际使用到,可能也不能说自己懂了。

实际工作中,调试串口通信一般都是调用平台封装好的接口,即便如此,熟悉基本原理,在遇到异常的时候可以更快排查原因。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强人电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值