SPI协议

基本概念

串行外设接口(SerialPeripheralInterface)的简称也叫做 SPI,是一种高速的、全双工同步通信的一种接口,串行外设接口一般是需要4根线来进行通信(NSS、MISO、MOSI、SCK),但是如果打算实现单向通信(最少3根线),就可以利用这种机制实现一对多或者一对一的通信。

引脚定义

SPI 总线采用的环形结构,利用的是主从模式(主机---->从机)进行数据的传输,由于是同步通信,所以在主机发送数据的同时也会收到从机发送的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
工作模式
注意:由于SPI外设是全双工同步通信,所以时钟信号就由SCK引脚来生成,SCK引脚只能由主设备控制,从设备是无法控制的,所以SCK引脚输出的脉冲信号的极性和相位就需要进行配置。
时钟极性:指的是在SPI总线空闲状态下(不传输任何数据)SCK引脚的默认的电平状态。
SCK 空闲状态下的电平可以由SPI_CR1寄存器的CPOL位来进行设置。主设备的时钟极性要根据从设备来设置。
时钟相位:指的是在传输数据时选择脉冲信号的边沿(上升沿或者下降沿)来进行数据的采集或者修改。该位可以由SPI_CR1寄存器的CPHA位来进行设置。主设备的时钟相位要根据从设备来设置。
(1) CPOL=0,CPHA=0 模式0
该模式指的是SCK引脚在空闲状态下为低电平,并且在第一个时钟边沿(上升沿)采集数据,在第二个时钟边沿(下降沿)来修改数据。
(2) CPOL=0,CPHA=1 模式1
该模式指的是SCK引脚在空闲状态下为低电平,并且在第二个时钟边沿(下降沿)采集数据,在第一个时钟边沿(上升沿)来修改数据。
(3) CPOL=1,CPHA=0 模式2
该模式指的是SCK引脚在空闲状态下为高电平,并且在第一个时钟边沿(下降沿)采集数据,在第二个时钟边沿(上升沿)来修改数据。
(4) CPOL=1,CPHA=1 模式3
该模式指的是SCK引脚在空闲状态下为高电平,并且在第二个时钟边沿(上升沿)采集数据,在第一个时钟边沿(下降沿)来修改数据。
通过这两位可以得到四种不同的组合,就被作为SPI总线的工作模式(模式0~模式3),到底要选择哪种模式,主机的工作模式必须根据从设备的数据手册的说明进行设置。

0.96 寸OLED屏

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

uint8_t SPI_SendByte(uint8_t Data) //模式 0 MSB
 {
 uint8_t recv = 0;
 //1.空闲 SCK 为低电平
//2.循环
for(i=0;i<8;i++)
 {
 //判断待发送的数据的最高位 MSB
 if(data & 0x80)
 {
 MOSI(1);
 }
 else
 MOSI(0);
 data <<= 1;
 delay_us(5);
//4.把SCK时钟线电平拉高,此时第一个边沿到达
SCK(1);
 delay_us(5);
 recv<<=1;
 recv|=MISO();
 //5.把SCK时钟线电平拉低,此时第二个边沿到达
SCK(0);
 delay_us(5);
 }
 returnrecv;
 }
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值