此处学习b站江科大的STM32教学第九章,和b站UP:爱上半导体的几节通讯介绍。感谢他们的开源分享精神。
通信的目的是将一个设备的数据传送到另一个设备上,从而一起工作扩展功能
比如陀螺仪,无线蓝牙等,STM32没有的功能就需要外挂芯片来帮助STM32扩展它的功能。
通信协议是通信的规则,按照规则进行数据的收发
不同的通信有不同的引脚。
USART的引脚TXD就是数据发送,RXD为数据接收。
I2C的SCL为时钟,SDA为数据。
SPI的SCLK为时钟,MOSI为主机输出脚,MISO为主机输出脚,CS为片选,用于选择哪一个主机用来通讯使用。
CAN的两个引脚是差分数据引脚
USB也是一对差分数据引脚
USART,I2C,SPI都是根据电平确定01数据的传输,而CAN通信和USB通信是根据电平的差值来确定01数据的传输,这两种方式适用于不同的环境
全双工是如同电话,同时发送接收,互不影响,一般有一条数据发送和一条数据接受线。
半双工是如同对讲机数据的接收和发送在同一条线上。
单工是广播,只能够发送或者只能够接收。
时钟是时钟特性,异步时钟是用与无时钟线的通讯,I2C与SPI有单独的时钟线,所以他们是同步时钟,根据时钟信号的指引下接收发送,异步通讯需要定义一个协定,用于接收发送。
单端信号为高低电平代表了10的信号,例如1为高电平,0为低电平。所以单端信号通信需要共地,采用一样的电位差。
差分信号为两个差分引脚电平的差值,例如有差值为1,无差值为0。例如CAN总线通过双绞线链接,这样数据在传输的过程中就不会因为外部的影响而产生许多失真。
USART和USB通讯是点对点通讯,而其他三个是可以在总线上挂在许多其他的外设。(通常需要寻址才确定需要跟哪一个进行通信。)
串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,一般都是点对点通信,可实现两个设备的互相通信。
单片机的串口可以使单片机与单片机、单片机与电脑(调试程序)、单片机与各式各样的模块(I2C,SPI)互相通信,模块再连接所需要的外设,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力。
在单片机和各个模块相连接的时候,如果模块没有单独的供电,需要根据模块的说明供电,然后与单片机共地,一般是与单片机共用VCC和GND,这样电平才能统一。(或者需要使用电平转换芯片来统一电平标准)
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
TTL电平:+3.3V或+5V表示1,0V表示0
单片机等低压小型设备常用
RS232电平:-3 ~ -15V表示1,+3 ~ +15V表示0
一些干扰大的电气设备常用,给予一个较大的波动范围
RS485电平:两线压差+2 ~ +6V表示1,-2 ~ -6V表示0(差分信号)
CAN等用双绞线链接的电路,可长距离传输,用于汽车等安全性要求等级高的设备
波特率:串口通信的速率
每秒发多少位。1000波特率就是一秒发送1000位,决定了每隔多长时间发射一位数据。
当发送和接收规定了统一的波特率之后,才能进行正常的数据传输,才不会缺位多位。
起始位:标志一个数据帧的开始,固定为低电平。
引脚要放置在高电平代表空闲状态。低电平的作用是有一个下降沿,提醒设备接收数据
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
低位先行:的意思是比如我们要发射一个00001111的数据,再发射的时候应该按照11110000这样的排列去输出,这样接收的时候才会接收到00001111
校验位:用于数据验证,根据数据位计算得来
奇校验是保证8位数据位+校验位为奇数个1,偶校验相反
停止位:用于数据帧间隔,固定为高电平。
本质上其实就是回到了起始位,防止下一位是低电平这样分不清数据。
停止位:有1位,1.5位,2位等,可以我们自行配置,1位就是发送规定的8位数据后出现1个字节时间的停止位,2位就是发送8个字节数据后产生2个字节时间的停止位
可以看到图中八位数据位,加起始低电平停止高电平,一共十位,若有校验位则一共十一位。这些部分加起来组成的这个完整的数据帧。
0x55应该是0101 (5)0101(5),但是注意低位先行,所以是图中的10101010,然后再看接收的逻辑是在检测到起始位下降沿后进行一个中断,并且对准时钟,能够依次将八位数据接收到芯片中。