要使用SPI,必须使用GPIO的复用功能,因此,使用SPI与使用其他GPIO应用类似,首先必须进行GPIO复用初始化,然后再对SPI进行初始化。在外设驱动文件stm32f4xx_spi.h与stm32f4xx_spi.c中我们可以找到SPI初始化结构体、SPI初始化函数与其他SPI相关的驱动函数。常用的SPI结构体与库函数如下:
1.SPI的初始化结构体
SPI的初始化结构体是SPI_InitTypeDef,在stm32f4xx_spi.h中找到的成员如下:
2.SPI初始化函数SPI-Init()
初始化结构体完成后,使用SPI初始化函数SPI_Init()进行初始化。该函数的说明如图9-11所示。
图9-11 SPI_Init()函数说明
该函数有两个形参,第一个形参是SPI编号,第二个形参是SPI初始化结构体指针。比如使用SPI2作为SPI接口,该函数可写为SPI_Init(SPI2,& SPI_InitStructure)。
3.SPI使能函数SPI-Cmd()
初始化完毕后,开启SPI接口工作,使用SPI_Cmd()函数进行使能。该函数说明如图9-12所示。使能SPI2时,该函数可写为SPI_Cmd(SPI2,ENABLE)。
图9-12 SPI_Cmd()函数说明
4.SPI发送数据函数SPI-I2S-SendData()
发送数据用SPI_I2S_SendData()函数,这里多了一个I2S的字符。I2S是集成电路内置音频总线的意思。STM32将这个总线接口与SPI接口复用在了一起,因此多了I2S的字符。该函数说明如图9-13所示。该函数有两个形参,第一个形参是使用的SPI口,第二个形参是需要发送的无符号整型数据。使用SPI2发送时该函数可写成SPI_I2S_SendData(SPI2,0xA5)。
图9-13 SPI_I2S_SendData()函数说明
5.SPI接收数据函数SPI-I2S-ReceiveData()
接收数据函数有一个形参,返回值为16位无符号数,如图9-14所示。如要读取SPI2的接收数据,可以这样使用函数:
(www.xing528.com)
图9-14 SPI_I2S_ReceiveData()函数说明
uint16_t A;
A=SPI_I2S_ReceiveData(SPI2);
6.SPI中断设置函数SPI-I2S-ITConfig()
与串行通信一样,SPI通信也可以使用中断的方式。SPI_I2S_ITConfig()函数用来使能SPI的中断。函数说明如图9-15所示。函数有三个形参:第一个形参是SPI号;第二个形参确定SPI的中断源,参数可选择SPI_I2S_IT_TXE(发送缓冲空中断)、SPI_I2S_IT_RXNE(接收缓冲非空中断)、SPI_I2S_IT_ERR(错误中断);第三个形参可选择ENABLE或DISABLE。
图9-15 SPI_I2S_ITConfig()函数说明
7.SPI获取中断标志函数SPI-I2S-GetITStatus()
SPI在使用中断时,可以通过函数SPI_I2S_GetITStatus()查询SPI中断状态。函数带返回值SET或者RESET。函数说明如图9-16所示。函数有两个形参,第一个形参是SPI号,第二个形参是状态标志位。比如读取SPI2的接收缓冲非空中断标志,编写函数如下:
图9-16 SPI_I2S_GetITStatus()函数说明
ITStatus SPI_IT_Status;
SPI_IT_Status=SPI_I2S_GetITStatus(SPI2,SPI_I2S_IT_RXNE);
8.SPI获取状态标志函数SPI-I2S-GetFlagStatus()
函数SPI_I2S_GetFlagStatus()用于获取SPI的状态信息,带返回值SET或者RESET。函数说明如图9-17所示。该函数有两个形参,第一个形参是SPI号,第二个形参是需要检查的SPI状态。比如要获取SPI2是否发送缓冲区空,编写函数如下:
图9-17 SPI_I2S_ITConfig()函数说明
FlagStatus Status;
Status=SPI_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE);
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。