#参考江科大STM32视频#
一、通信接口
- 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统
- 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 |
USART | TX、RX | 全双工 | 异步 | 单端 | 点对点 |
I2C | SCL、SDA | 半双工 | 同步 | 单端 | 多设备 |
SPI | SCLK、MOSI、MISO、CS | 全双工 | 同步 | 单端 | 多设备 |
CAN | CAN_H、CAN_L | 半双工 | 异步 | 差分 | 多设备 |
USB | DP、DM | 半双工 | 异步 | 差分 | 点对点 |
全双工:指通信双方能够同时进行双向通信,一般有两根数据线(手机)
半双工:指通信双方只能由一方进行数据发送或接收,不能同时双向通信,一般只有一根数据线(对讲机)
单工 :指一个数据只能从一个设备到另一个设备,而不能反向(广播)
时钟 :告诉设备每隔多久时间进行采样
二、串口通信
- 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信
- 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力
1. 硬件电路
- 简单双向串口通信有两根通信线(发送端TX和接收端RX)
- TX与RX要交叉连接
- 当只需单向的数据传输时,可以只接一根通信线
- 当电平标准不一致时,需要加电平转换芯片
VCC和GND是供电端,TX和RX是通信端,TX和RX是单端信号,它们的高低电平是相对于GND的,因此串口通信中TX、RX、GND是必须要接的,如果设备有单独供电可以不接VCC
2. 电平标准
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
- TTL电平:+3.3V或+5V表示1,0V表示0
- RS232电平:-3~-15V表示1,+3~+15V表示0
- RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)
3. 串口参数及时序
- 波特率:串口通信的速率
- 起始位:标志一个数据帧的开始,固定为低电平
- 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
- 校验位:用于数据验证,根据数据位计算得来
- 停止位:用于数据帧间隔,固定为高电平
- 1000bps:表示1s发送1000位,每一位的时间就是1ms
- 空闲状态为高电平,在开始前有一个固定为低电平的起始位,产生下降沿,告诉设备要发送数据了;同理停止位在数据发送结束后有一个固定为高电平的结束位。
- 若想发送数据0x0F,先转换为二进制0000 1111,低位先行,即发送时为1111 0000
与上图相比多了校验位, 如果使用奇校验,那么包括校验位在内的9位数据会出现奇数个1,比如传输0000 1111,目前为4个1,偶数个,那么就要在校验位补1;如果传输0000 1110,此时3个1,奇数个,那么校验位就补0。
发送方在发送数据后,会补一个校验位,保证1的个数为奇数,接收方在接收数据后,会验证数据位和校验位,如果1的个数还是奇数,就认为数据没有出错。如果在传输中,因为干扰,有一位由1变成0,或者由0变成1了,那么整个数据的奇偶特性就会变化。接收方验证1的个数不是奇数,那就认为传输出错,可以选择丢弃或重传数据。
示波器实例:
该波形是发送一个字节数据0x55时,在TX引脚输出的波形,波特率是9600,所以每一位的时间就是1/9600,大概为104us。
在数据发送前,是空闲状态高电平。数据帧开始,先发送起始位,产生下降沿,代表数据帧开始,数据0x55转为二进制,低位先行,就是依次发送1010 1010,该参数为8位数据,1位停止,无校验,最后停止位把引脚置回高电平,至此数据帧完成。
若波特率改为4800,时间被拉宽至原来的二倍。