提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
STM32常用协议系列文章
一、相关理论概念
1.1 通信基本概念
1.1.1 串行/并行
通过数据传送的方式,可将通信的方式分为串行通信和并行通信两种。
串行通信与并行通信示意图
串行通信 | 并行通信 | |
---|---|---|
定义 | 利用单一传输线,按数据位形式一位一位地传输数据 | 利用多条传输线,将数据的各位同时传送 |
传输方式 | 传输一个字节(8个位)的数据时,串口将这8个位进行排队,然后逐个地在一条连接线上进行传输 | 传输一个字节时(8个位)的数据时,并口将这8个位一字排开,分别在8条连接线上同时传输 |
比喻 | 串行通信就像单车道公路,同一时刻只能传输一位数据 | 并行通信就像多车道公路,同一时刻可传输多位数据 |
特点 | 硬件资源耗费少、成本低、抗干扰能力强和传输距离远的优点,但存在传输速度慢的缺点 | 有着传输速度快的优点,但存在硬件资源耗费高、成本高、抗干扰能力弱和传输距离近的缺点 |
1.1.2 单工/半双工/全双工
通信方式 | 说明 |
---|---|
全双工 | 在同一时刻,两个设备之间可以同时收发数据 |
半双工 | 两个设备之间可以收发数据,但不能在同一时刻进行 |
单工 | 在任何时刻都只能进行一个方向的通信,即一个固定为发送设备,另一个固定为接收设备 |
1.1.3 同步/异步通信
根据通信中的数据同步方式,又分为同步和异步两种,可以根据通信过程中是否使用时钟信号进行简单的划分。
同步通信:
在同步通信中,收发设备双方会使用一根信号表示时钟信号,在时钟信号的驱动下,双方进行协调,同步数据。通信中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。上图所示的就是在上升沿对数据线进行采样。
异步通信:
在异步通信中,不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些信号位用于同步信号,或者把主题数据进行打包,以数据帧的格式传输数据。同时,收发双方需要约定数据的传输速率,以便正确地解码数据。
1.2 UART
1.2.1 UART协议
UART定义:
- 全称:Universal Asynchronous Receiver and Transmitter 通用异步收发器
- 定义:属于异步串行通信协议,将每个二进制位一位接一位地传输
UART帧格式
串口通信的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通信的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位【可选】和停止位,通信双方的数据包格式统一是正常收发数据的必要条件之一。
-
波特率
UART是串口异步通信,因此没有时钟信号,所以两个通信设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码。常用的波特率为4800、9600以及115200等。这里要注意区分:比特率和波特率。 -
通信的起始信号和终止信号
串口通信的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,前提是双方要约定一致。 -
有效数据
在数据包的起始位之后紧接着就是要传输的主体数据内容,亦称为有效数据。其长度常被约定为5、6、7或8位长。 -
数据校验
在有效数据之后,有一个可选的校验位。为避免通信过程中,受外界干扰而导致数据传输出现偏差的问题,可以通过在传输过程中加上校验位来解决该问题。校验方法有:奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)和无校验(noparity),共计5种方法。
奇校验:
要求有效数据和校验位中"1"的个数为奇数,比如一个8位长的有效数据为01101001,此时总共有4个"1",为达到奇校验效果,校验位为"1",最后传输的数据将是8位的有效数据加上1位的校验位,总共9位。
偶校验:
其要求刚好与奇校验的要求相反,要求有效数据和校验位中的“1”的个数为偶数,比如一个8位长的有效数据为01101001,此时总共有4个"1",为达到偶校验效果,校验位为"0",最后传输的数据将是8位的有效数据加上1位的校验位,总共9位。
0校验:
不管有效数据的内容是什么,该校验位总为"0"
1校验
不管有效数据的内容是什么,该校验位总为"1"
无校验
不选择校验位
1.2.2 UART硬件层
符号 | 名称 | 方向 | 说明 |
---|---|---|---|
TxD | 发送数据 | DTE->DCE | 数据发送信号,即输出。由DTE【数据终端设备(计算机、路由)】向DCE【调制调解器】方向传输 |
RxD | 接收数据 | DTE<-DCE | 数据接收信号,即输入。 |
RTS | 请求发送 | DTE->DCE | Request To Send,请求发送,DTE请求DCE设备,向DCE端发送数据 |
CTS | 允许发送 | DTE<-DCE | Clear To Send,允许发送,DCE回应DTE的发送请求,告知对方可以发送数据 |
1.2.3 UART标准的问题
电气接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性;
UART通信时一般直接使用处理器使用的电平,即TTL电平。但不同的处理器使用的电平存在差异,比如:STM32(3.3V)和STC51(5V),所以不同的处理器使用UART通信时一般不能直接相连;
UART没有规定不同器件连接时,连接器的标准,所以不同器件之间通过UART通信时连接不方便;
抗干扰能力差
UART一般直接使用TTL信号表示0和1,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错;
通信距离极短
因为TTL信号的抗干扰能力差,所以其通信距离很短,一般只能用于一个电路板上的两个不同芯片之间的通信;
1.3 RS232协议
1.3.1 定义
RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准,该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定。
1.3.2 性质
-
接口
该标准规定采用一个25引脚的DB-25连接器,标准中对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定【重点】;后来IBM的PC机将RS232简化成了DB-9连接器,后来成为事实标准;现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线; -
信号
该标准规定逻辑"1"的电平为-5V到-15V,逻辑"0"的电平为+5V到+15V,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传输距离可达15m;
1.3.3 不足
- 接口信号的电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
- 通信速度较低**【论据待补充?】**
- 易产生共模干扰,抗噪声干扰性弱**【论据待补充???】**
- 传输距离较短(15m)
1.4 RS485协议
1.4.1 定义
该标准由电信行业协会和电子工业联盟定义;使用该标准的通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号;该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立一个设备网络。
1.4.2 信号
RS485标准规定采用差分信号进行数据传输,两线间的电压差为+2V到+6V表示逻辑"1",两线间的电压差为-2V到-6V表示逻辑"0";使用差分信号能有效地减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接。
1.4.3 端口图
RS485 9针
RS485 25针
1.4.4 接线图
RS485半双工具有2个触点
RS485全双工具有4个触点
二、相关实验证明
本次实验的目的:
- 验证总线传输格式是否和理论一致
- 加深对UART传输的理解
- 加强逻辑分析仪和示波器的使用
本次实验的内容:
- 由MCU发送字符到串口,然后串口再原封不动地将数据发送回来。
2.1 串口中断实现的流程示意图
2.2 实验过程及难点分析
2.2.1 实验过程
- 示意图解读:
首先在main.c中进行相关初始化后,进入到while循环中等待串口中断的到来【XCOM2.0上位机提供】,然后进入到中断函数中对传输的数据进行接收与存储,最后再返回到while循环中进行发送。
- 重点部分代码【中断处理函数】
2.3实验结果展示【示波器和逻辑分析仪】
3.总结
- UART串口通信属于异步串行全双工通信,通过"掐时间"的方式来解读电平信号,因此接受双方的波特率是必须要一致的
- 通过以上总结,对波特率有了进一步的了解,下一步需要进行更多的demo进行验证强化
- 通过以上实验,对示波器和逻辑分析仪的使用更得心应手
- 该博客主要起到理解UART协议逻辑框架的作用,还属于万里长征第一步的初级阶段,更多的是为后续的使用提供基础【根基不牢,地动山摇】