视频1:点击观看原视频
视频2:这个讲得不错的视频,可以一起kk
浅谈单片机通信[UART、I2C、SPI]
一、通信
1、概念
对于单片机来说,通信是与 传感器存储芯片外围控制芯片 的信息交换
。
2、种类
(1、基本类型
- 并行通信
- 串行通信
(2、三种传输方式
单行道嘛
双向单行道,
3、波特率(baud)
波特率是指数据通信中的传输速率,也称为数据传输速率或比特率。它表示每秒钟传输的比特数(单位为bps,即bits per second)。
在串行通信中,波特率是指每秒钟传输的符号数或信号变化次数。每个符号可以代表一个二进制位(比特),例如,在常见的异步串行通信中,一个波特率为9600 bps的串口可以每秒发送9600个二进制位。
二、三种通信方式
1、UART
特点:低位在前,高位在后
(1、发送一个字节的全过程
- 当总线处于空闲状态时,线路保持高电平;
- 发送数据前,会先发送一个低电平,让总线从 高电平 变为 低电平,提醒数据接收方做好准备;
- 依次从高位到低位发送8为数据位;
- 8位数据 完成传输后,会发出一个高电平,让总线重新回到高电平状态;
uart传输数据时,一次发送8位,但再加上起始位和停止位时,实际是发送了10位。
(2、应用场景
- 232,9针通信接口,一般用于计算机和单片机之间通信。但后续笔记本为了更加轻便,这个接口被取消了;
- USB转串口,目前PC机与微机通信最常见的方式;
- 主辅控制芯片,两个单片机之间通信。
总体来说,uart多用于板间通信;PC与微机;2个设备之间
2、IIC
(1、结构【2条线】
- SCL 同步时钟线
- SDA 数据传输线
特点: 可挂载多个器件,且支持多主机模式(即线路上的任何一个器件都可以作为主机,局限于只有一根信号线,同一时刻只能有一个主机);主机用有该时刻下总线的控制权,也就是发起和结束一次通信的权利;从机只能被主机呼叫。
在IIC总线协议中,每个器件都有一个7位的地址(就像咱们的电话号码)。
(2、发生一个字节的全过程
- 它们的地址分别是0x21, 0x31,0x41,0x51;
- 当MCU为主机,要读取E2PROM里的数据时,会向总线先发送一个0x31,找到E2PROM
- 若要向E2PROM发送数据0x96
其发送数据的顺序与uart不同,是先高 后低,依次发送。
- 当总线
空闲
时,SCL与SDA都保持高电平
; - 当主机要开始传输数据时,会将SDA电平拉低,然后它的
起始位
是 由高变低的下降沿
; - 再进行器件寻址,在SCL低电平时,依次发生7位地址位0x31,
- 发送完毕后,紧接着,主机会发送一个
读写指示位
,低电平:要发送数据,高电平:请求数据。 - 当主机发送完以上数据,从机若是成功接收,会发送一个
应答位
到总线上
注意点:只有SCL低电平时,SDA才可以变化。因为SCL高电平的时候,SDA要保持住,因为接受方要接受你在SCL低电平时候发生变化的数据!!!!
- 发完寻址位,找到要通信的器件后,接下来就可以正式发送数据了;(上一个发送的数据是器件的地址位,先找到地址嘛,现在才是要发送的数据)
- 发送的过程和寻址过程一样。
注意:
1.当发生完一个字节后,要有一个应答位才能发送下一个字节;
2.当要传输的所有数据发送完毕后,主机要将SCL拉到高电平,并将SDA数据线从低拉到高电平;低 -> 高,也表示停止位
;
总结
3、SPI
(1、结构【标准SPI 有4根线,只有SCL是必须的,其余3条根据情况删减】
多个从机才需要CS进行片选。
(2、多机通信,需要用到CS进行片选
具体拉低/高,看单片机的设定;
以低电平选定为例,当主机要和Slave1 通信时, 通过CS1输出低电平,选择Slave1;
(3、发送一个字节的全过程
其发送数据的顺序与
IIC相同
,是先高 后低,依次发送。
- SCLK 在空闲时,可以为高电平,也可以为低电平;
- 以空闲时刻为高电平为例,
- 当SCLK出现下降沿时,进行数据输出。
- 当SCLK出现上升沿时,进行数据采样;
具体的:
-
初始化:选择要与之通信的外部设备,并将对应的片选线(CS)拉低,进入通信模式。
-
准备数据:将要发送的字节数据加载到发送缓冲区中。
-
数据输出:从发送缓冲区读取数据位,根据通信协议的要求,在SCLK的下降沿时将数据位输出到数据线(MOSI)上。具体步骤可描述如下:
- 在空闲时刻(SCLK为高电平),将第一个数据位设置到数据线。
- 当SCLK出现下降沿时,数据线上的电平会保持不变,以输出当前数据位。
- 当SCLK再次回到高电平时,移动到下一个数据位,准备进行下一轮数据输出。
-
数据采样:根据CPOL的设置,当SCLK出现上升沿时,进行数据采样。具体步骤可描述如下:
- 当SCLK出现上升沿时,外部设备会将数据线上的电平变化反映到接收缓冲区。
- 微控制器会在SCLK上升沿时读取数据线上的电平,采样当前数据位。
- 根据通信协议的要求,可以在上升沿、下降沿或其他特定时机进行数据采样。
-
重复步骤3和4:根据需要,依次发送和采样每个数据位。在每个SCLK的上升沿和下降沿,进行数据输出和采样操作。
-
停止传输:传输完所有数据位后,将片选线拉高,表示结束通信,释放外部设备。
和IIC 相比,SPI没有开始位、结束位和应答位;
以上两两组合,构成了SPI的四种模式。
-
CPOL是SPI(Serial Peripheral Interface)协议中的一个参数,表示时钟极性(Clock Polarity)。SPI是一种常用的串行通信接口,用于在微控制器和外部设备之间进行数据传输。
-
CPOL定义了时钟信号的极性,它有两个可能的取值:
- CPOL=0:时钟空闲状态为低电平,时钟信号在每个数据传输周期的上升沿触发。
- CPOL=1:时钟空闲状态为高电平,时钟信号在每个数据传输周期的下降沿触发。
-
CPOL的设置需要发送方和接收方保持一致,以确保数据的正确传输。它对于数据传输的稳定性和可靠性有重要影响,特别是在高速通信和高噪声环境下。
-
需要注意的是,CPOL与另一个参数CPHA(Clock Phase,时钟相位)一起使用,共同定义了数据采样和传输的时序。CPHA决定了数据采样的时机,而CPOL决定了时钟信号的极性。