STM32通信协议全面综述
1 通信协议概述
通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统,实现多模块互联
通信协议:制定通信的规则,通信双方按照协议规则进行数据收发
已知单片机内部有很多功能模块:PWM输出,TIM计数,AD采集等等,这些都是芯片内部的电路,这些电路的配置寄存器,数据寄存器都在芯片里面,使用这些功能只需要操作这些寄存器就可以了。但是也有些功能是STM32内部没有的比如:想要蓝牙无线遥控功能,想用WiFi进行远程数据传输,陀螺仪加速度计测量姿态的功能等等。STM32没有,所以就只能外挂芯片来完成,而这些芯片的数据都在STM32的外面,STM32要想获取这些数据就需要我们在这两个设备之间,连接一根或者多跟通信线,通过通信线路发送或者接收数据,完成数据交换,从而实现控制外挂模块和读取外挂模块数据的目的。
2 通信协议简介
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 |
USART | TX,RX | 全双工 | 异步 | 单端 | 点对点 |
I2C | SCL,SDA | 半双工 | 同步 | 单端 | 多设备 |
SPI | SCLK,MOSI,MISO,CS | 全双工 | 同步 | 单端 | 多设备 |
CAN | CAN_H,CAN_L | 半双工 | 异步 | 差分 | 多设备 |
USB | DP,DM | 半双工 | 异步 | 差分 | 点对点 |
2.1模块引脚简述
各个通信模块的引脚,数据按照协议的规定在这些引脚上进行输入和输出,从而实现通信。
USART有两个引脚:TX(Transmit Exchange)数据发送引脚,RX(Receive Exchange)数据接受引脚。
I2C有两个引脚:SCL(Serial Clock)时钟引脚,SDA(Serial Date)是数据。
SPI通信有四个引脚:SCLK(Serial Clock)时钟,MOSI(Master Output Slave Input)主机输出数据引脚,MISO(Master InputSlave Output)主机输入数据引脚,CS(Chip Select)是片选,用于指定通信的对象。
CAN通信:CAN_H和CAN_L,这两个是差分数据引脚,用两个引脚表示一个差分数据。
USB通信:DP(Data Positive)和DM(Data Minus),也可以叫D+和D-,也是一对差分数据引脚。
2.2单工与双工通信模式
按照通信中数据传输的方向和时间,可以分为单工通信,双工通信两种方式,其中双工通信又可以分为全双工通信和半双工通信两种。
(1)单工通信:数据只能朝着一个固定方向传输,不能反向。
(2)半双工通信:数据可以两个方向传输,但是同一时刻只能有一个方向的数据传输。一般只有一根数据线,CAN和USB两根差分线也是组合成一根数据线。
(3)全双工通信:数据可以同时进行双向传输,即同一时刻可以有两个方向的数据同时传输。一般有两根数据线发送和接收。
2.3同步和异步通信
按照时钟的控制方式,可以分为同步通信和异步通信两种方式。
同步通信指的是收、发双方使用同一个时钟控制数据的发送和接收,以达到发送方和接收方完全同步。同步通信中,发送方在发送数据时,要在数据前加一个同步字符组成一个信息帧,接收方检测到同步字符时,将此后的数据作为有效数据。一般同步通信有单独的时钟线例如:I2C,SPI。同步通信一次传输一个大的数据块,因此比异步传输效率高,速度快。
异步通信是指收、发双方使用不同的时钟控制数据的发送和接受。异步通信可以少接一条时钟线,这使得器实现容易,成本低,但是每个数据帧要附加起始位,数据位,停止位,有时还需要加上校验位,适用于低速,以字节为单位传输的通信场合。
2.4电平特性
USART,I2C,SPI都是单端信号,他们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地,也就是把GND接在一起,所以USART,I2C,SPI通信的引脚还应该加一个GND引脚,不接GND是无法通信的。
CAN和USB是靠两个差分引脚的电压差来传输信号的,在通信的时候可以不需要GND,不过USB协议里面也有一些地方需要单端信号,所以USB还是需要共地的。使用差分信号可以极大的提高抗干扰性,所以差分信号一般传输速度和距离都会非常高。
2.5设备特性
USART和USB属于点对点的特性,I2C,SPI,CAN是可以在总线上挂在多个设备的。
举个例子:
点对点就是老师找你一个人去办公室谈话,两个人面对面,直接传输数据就可以。
多设备就相当于老师叫了四五个同学去办公室,老师想找谁说话需要叫到他的名字,需要有一个寻址的过程,以确定通信的对象。
作者:王多鱼鱼鱼