购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.9 SPI总线

SPI(Serial Peripheral Interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口。它用于CPU与各种外围元器件进行全双工、同步串行通信。

它只需四条线就可以完成MCU与各种外围元器件的通信,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。

SPI总线支持多个从设备,通信时由CS片选硬件决定哪个从设备工作。硬件连线如图4.38所示。

4.9.1 SPI 4种工作模式

SPI通信有4种不同的模式,通信双方必须工作在同一模式下。一般来说从设备的通信方式在出厂时就设置好了,无法改变。我们主设备(单片机)可以通过CPOL(时钟极性)和CPHA(时钟相位)来选择和从设备相同的通信模式,具体如下:

Mode0:CPOL=0,CPHA=0

Mode1:CPOL=0,CPHA=1

Mode2:CPOL=1,CPHA=0

Mode3:CPOL=1,CPHA=1

图4.38 SPI连接示意图

时钟极性CPOL是用来配置SCLK的电平处于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样在第几个边沿:

CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;

CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;

CPHA=0,表示数据采样在第1个边沿,数据发送在第2个边沿;

CPHA=1,表示数据采样在第2个边沿,数据发送在第1个边沿。

通常使用得比较广泛的方式是Mode0和Mode3这两种方式。

4.9.2 STM32的SPI配置

STM32提供SPI控制器,我们只需要设置好相关参数即可进行SPI通信,读者不需要照着时序图用I/O模拟,可以缩短开发时间。STM32的SPI配置主要有以下5步。

1.初始化CS片选引脚

CS片选引脚一般要根据主板的引脚原理图去配置对应的引脚为输出功能。CS引脚输出高电平表示对应的元器件不工作。CS引脚输出低电平表示与对应的元器件进行SPI通信。代码如下:

2.初始化CSK、MISO、MOSI引脚

需要将STM32F407的SPI引脚设置为复用SPI功能,并初始化对应的引脚。本节将展示如何初始化SPI1,对应的引脚是GPIOB_3、GPIOB_4、GPIOB_5。其他SPI对应引脚读者可以查看“附录A\STM32F407开发板原理图.pdf”文件。SPI1引脚初始化代码如下:

3.配置SPI控制器

配置SPI控制器部分的代码,最重要的是CPOL、CPHA的设置。即配置对应的SPI工作模式,一般我们要根据从设备的SPI工作模式配置。代码如下:

4.SPI发送数据

STM32标准库提供了SPI发送的函数,我们只需要调用该函数即可,代码如下:

     void SPI_I2S_SendData(SPI_TypeDef * SPIx, uint16_t Data)

参数:

SPI_TypeDef * SPIx:具体哪个SPI控制器,可填参数有:SPI1、SPI2、SPI3等。

uint16_t Data:发送的数据。

5.SPI接收数据

STM32标准库提供了SPI接收的函数,我们只需要调用该函数即可,代码如下:

     uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx)

参数:

SPI_TypeDef * SPIx:具体哪个SPI控制器,可填参数有:SPI1、SPI2、SPI3等。

返回:函数将返回从SPI总线上接收的数据。

4.9.3 小结

本节主要讲述了SPI总线的通信原理及STM32如何配置使用SPI控制器。读者在使用SPI的过程中一定要确认好从设备的SPI工作模式。

本节所有代码保存在Chapter4\06 SPI_W25Qxx\mdk\SPI.uvprojx。 i6IpkBZ8RAs2ziVvp6yCIKhUGaygJsxImrp60pTEdXw6MaS9IqRNdm2sdGhi0Qku

点击中间区域
呼出菜单
上一章
目录
下一章
×