基本概念
串行外设接口(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;
}