串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

  • 在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。简单来说物理层规定我们用嘴巴还是用肢体来交流,协议层规定我们用中文还是用英文来交流。

电平标准
根据通讯使用的电平标准不同,串口通信可分为TTL标准及RS-232标准,见如下表格:

通讯标准 电平标准(发送端)
5V TTL 逻辑1::2.4V ~ 5V —— 逻辑0: 0 ~ 0.5V
RS-232 逻辑1::-15V ~ -3V —— 逻辑0: +3V ~ +15V

我们常见的电子电路中常使用TTL的电平标准,如我们的计算机内部识别的就是TTL电平,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0,所以说计算机CPU也只能识别二进制的0和1;但TTL电平有个缺点就是它不适合远距离传输,所以为了增加串口通讯的远距离传输及抗干扰能力,我们通常会使用RS-232电平,RS-232电平使用-15V表示逻辑1,+15V表示逻辑0。

RS-232信号线
串口通信协议简介
因为控制器一般使用TTL电平标准,所以在传输过程中就需要用到MAX3232芯片或者CH340芯片对TTL及RS-232电平的信号进行相互转换;可以这样理解,假设有两台计算机需要进行串口通信,在发送端,计算机内部的TTL电平需经过电平转换芯片(MAX3232或CH340)将其转换为RS-232电平后再进行传输,到了另一台计算机,则需要电平转换芯片(MAX3232或CH340)将接收到的RS-232电平转换为TTL电平,这样计算机CPU才能识别到。

协议层
串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

串口通信协议简介
通俗理解就是,你通过一根信号线不断的给我发送高低电平,我这边需要确定哪些是我要的数据;首先你得给我的起始信号吧,告诉我你接下来要准备发送数据了,数据发送完了,检验一下发送得对不对,检验OK了,给个停止信号,告诉我你已经发送完毕了,那么这就是咱们双方约定好的协议了……

数据信号传输中的几个概念:

具体可查看《STM32F4xx中文参考手册》第22章通用同步异步收发器(USART)

1. 波特率
USART的全称是通(U)用同步(S)异(A)步收®发(T)器,每个字母都有它对应的含义;不过本次学习的是串口异步通讯,因为同步通讯是需要时钟信号来进行同步的,但我使用的串口线没有时钟信号;因此两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率为4800、9600、115200等。
2. 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束,数据包的起始信号有一个逻辑0的数据位表示,而数据包的停止位可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
3. 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度通常是8位。
4. 数据校验
在有效数据之后,有一个可选的数据校验位;由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程中加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity)。

奇校验 要求有效数据和校验位中"1"的个数为奇数 ,比如一个8位长的有效数据为:01101001,此时总共有4个"1",为达到奇校验效果,校验位为"1" ,最后传输的数据是将8位的有效数据加上1位的校验位总共9位
偶校验 偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数
0校验 不管有效数据中的内容是什么,校验位总为“0”
1校验 校验位总为“1”
无校验 在无校验的情况下,数据包中不含校验位

相关文章: