15 STM32标准库函数 之 串行外设接口(SPI) 所有函数的介绍及使用

1 SPI的库函数预览

函数名描述
SPI_DeInit将外设 SPIx 寄存器重设为缺省值
SPI_Init根据 SPI_InitStruct 中指定的参数初始化外设 SPIx 寄存器
SPI_StructInit把 SPI_InitStruct 中的每一个参数按缺省值填入
SPI_Cmd使能或者失能 SPI 外设
SPI_ITConfig使能或者失能指定的 SPI 中断
SPI_DMACmd使能或者失能指定 SPI 的 DMA 请求
SPI_SendData通过外设 SPIx 发送一个数据
SPI_ReceiveData返回通过 SPIx 最近接收的数据
SPI_DMALastTransferCmd使下一次 DMA 传输为最后一次传输
SPI_NSSInternalSoftwareConfig为选定的 SPI 软件配置内部 NSS 管脚
SPI_SSOutputCmd使能或者失能指定的 SPI SS 输出
SPI_DataSizeConfig设置选定的 SPI 数据大小
SPI_TransmitCRC发送 SPIx 的 CRC 值
SPI_CalculateCRC使能或者失能指定 SPI 的传输字 CRC 值计算
SPI_GetCRC返回指定 SPI 的发送或者接受 CRC 寄存器值
SPI_GetCRCPolynomial返回指定 SPI 的 CRC 多项式寄存器值
SPI_BiDirectionalLineConfig选择指定 SPI 在双向模式下的数据传输方向
SPI_GetFlagStatus检查指定的 SPI 标志位设置与否
SPI_ClearFlag清除 SPIx 的待处理标志位
SPI_GetITStatus检查指定的 SPI 中断发生与否
SPI_ClearITPendingBit清除 SPIx 的中断待处理位

1.1 函数 SPI_DeInit

函数名SPI_DeInit
函数原形void SPI_DeInit(SPI_TypeDef* SPIx)
功能描述将外设 SPIx 寄存器重设为缺省值
输入参数SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输出参数
返回值
先决条件
被调用函数对 SPI1 ,RCC_APB2PeriphClockCmd() 对 SPI2 ,RCC_APB1PeriphClockCmd()

例:
/* Deinitialize the SPI2 */
SPI_DeInit(SPI2);

1.2 函数 SPI_Init

函数名SPI_Init
函数原形void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct)
功能描述根据 SPI_InitStruct 中指定的参数初始化外设 SPIx 寄存器
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_InitStruct:指向结构 SPI_InitTypeDef 的指针,包含了外设 SPI 的配置信息 参阅 Section:SPI_InitTypeDef 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

SPI_InitTypeDef structure
typedef struct
{
u16 SPI_Direction;
u16 SPI_Mode;
u16 SPI_DataSize;
u16 SPI_CPOL;
u16 SPI_CPHA;
u16 SPI_NSS;
u16 SPI_BaudRatePrescaler;
u16 SPI_FirstBit;
u16 SPI_CRCPolynomial;
} SPI_InitTypeDef;

SPI_Direction 设置了 SPI 单向或者双向的数据模式。

SPI_Direction描述
SPI_Direction_2Lines_FullDuplexSPI 设置为双线双向全双工
SPI_Direction_2Lines_RxOnlySPI 设置为双线单向接收
SPI_Direction_1Line_RxSPI 设置为单线双向接收
SPI_Direction_1Line_TxSPI 设置为单线双向发送

SPI_Mode 设置了 SPI 工作模式。

SPI_Mode描述
SPI_Mode_Master设置为主 SPI
SPI_Mode_Slave设置为从 SPI

SPI_DataSize 设置了 SPI 的数据大小

SPI_DataSize描述
SPI_DataSize_16bSPI 发送接收 16 位帧结构
SPI_DataSize_8bSPI 发送接收 8 位帧结构

SPI_CPOL 选择了串行时钟的稳态。

SPI_CPOL描述
SPI_CPOL_High时钟悬空高
SPI_CPOL_Low时钟悬空低

SPI_CPHA 设置了位捕获的时钟活动沿。

SPI_CPHA描述
SPI_CPHA_2Edge数据捕获于第二个时钟沿
SPI_CPHA_1Edge数据捕获于第一个时钟沿

SPI_NSS 指定了 NSS 信号由硬件(NSS 管脚) 还是软件(使用 SSI 位) 管理。

SPI_NSS描述
SPI_NSS_HardNSS 由外部管脚管理
SPI_NSS_Soft内部 NSS 信号由 SSI 位控制

SPI_BaudRatePrescaler 用来定义波特率预分频的值, 这个值用以设置发送和接收的 SCK 时钟。

SPI_NSS描述
SPI_BaudRatePrescaler2波特率预分频值为 2
SPI_BaudRatePrescaler4波特率预分频值为 4
SPI_BaudRatePrescaler8波特率预分频值为 8
SPI_BaudRatePrescaler16波特率预分频值为 16
SPI_BaudRatePrescaler32波特率预分频值为 32
SPI_BaudRatePrescaler64波特率预分频值为 64
SPI_BaudRatePrescaler128波特率预分频值为 128
SPI_BaudRatePrescaler256波特率预分频值为 256

SPI_FirstBit 指定了数据传输从 MSB 位还是 LSB 位开始。

SPI_FirstBit描述
SPI_FisrtBit_MSB数据传输从 MSB 位开始
SPI_FisrtBit_LSB数据传输从 LSB 位开始

SPI_CRCPolynomial
SPI_CRCPolynomial 定义了用于 CRC 值计算的多项式。

例:
/* Initialize the SPI1 according to the SPI_InitStructure members */
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DatSize = SPI_DatSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler =
SPI_BaudRatePrescaler_128;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);

1.3 函数SPI_StructInit

函数名SPI_StructInit
函数原形void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct)
功能描述把 SPI_InitStruct 中的每一个参数按缺省值填入
输入参数SPI_InitStruct:指向结构 SPI_InitTypeDef 的指针,待初始化
输出参数
返回值
先决条件
被调用函数
成员缺省值
SPI_DirectionSPI_Direction_2Lines_FullDuplex
SPI_ModeSPI_Mode_Slave
SPI_DataSizeSPI_DataSize_8b
SPI_CPOLSPI_CPOL_Low
SPI_CPHASPI_CPHA_1Edge
SPI_NSSSPI_NSS_Hard
SPI_BaudRatePrescalerSPI_BaudRatePrescaler_2
SPI_FirstBitSPI_FirstBit_MSB
SPI_CRCPolynomial7

例:
/* Initialize an SPI_InitTypeDef structure */
SPI_InitTypeDef SPI_InitStructure;
SPI_StructInit(&SPI_InitStructure);

1.4 函数SPI_ Cmd

函数名SPI_Cmd
函数原形void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState)
功能描述使能或者失能 SPI 外设
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2NewState: 外设 SPIx 的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

例:
/* Enable SPI1 */
SPI_Cmd(SPI1, ENABLE);

1.5 函数SPI_ITConfig

函数名SPI_ITConfig
函数原形void SPI_ITConfig(SPI_TypeDef* SPIx, u16 SPI_IT, FunctionalState NewState)
功能描述使能或者失能指定的 SPI 中断
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_IT:待使能或者失能的 SPI 中断源 参阅 Section:SPI_IT 查阅更多该参数允许取值范围
输入参数 3NewState:SPIx 中断的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

SPI_IT
输入参数 SPI_IT 使能或者失能 SPI 的中断。可以取下表的一个或者多个取值的组合作为该参数的值。

SPI_IT描述
SPI_IT_TXE发送缓存空中断屏蔽
SPI_IT_RXNE接收缓存非空中断屏蔽
SPI_IT_ERR错误中断屏蔽

例:
/* Enable SPI2 Tx buffer empty interrupt */
SPI_ITConfig(SPI2, SPI_IT_TXE, ENABLE);

1.6 函数SPI_ DMACmd

函数名SPI_DMACmd
函数原形void SPI_DMACmd(SPI_TypeDef* SPIx, u16 SPI_DMAReq, FunctionalState NewState)
功能描述使能或者失能指定 SPI 的 DMA 请求
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_DMAReq:待使能或者失能的 SPI DMA 传输请求 参阅 Section:SPI_DMAReq 查阅更多该参数允许取值范围
输入参数 3NewState: SPIx DMA 传输的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

SPI_DMAReq
SPI_DMAReq 使能或者失能 SPI Tx 和/或 SPI Rx 的 DMA 传输请求。

SPI_DMAReq描述
SPI_DMAReq_Tx选择 Tx 缓存 DMA 传输请求
SPI_DMAReq_Rx选择 Rx 缓存 DMA 传输请求

例:
/* Enable SPI2 Rx buffer DMA transfer request */
SPI_DMACmd(SPI2, SPI_DMAReq_Rx, ENABLE);

1.7 函数SPI_ SendData

函数名SPI_SendData
函数原形void SPI_SendData(SPI_TypeDef* SPIx, u16 Data)
功能描述通过外设 SPIx 发送一个数据
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2Data: 待发送的数据
输出参数
返回值
先决条件
被调用函数

例:
/* Send 0xA5 through the SPI1 peripheral */
SPI_SendData(SPI1, 0xA5);

1.8 函数SPI_ ReceiveData

函数名SPI_ReceiveData
函数原形u16 SPI_ReceiveData(SPI_TypeDef* SPIx)
功能描述返回通过 SPIx 最近接收的数据
输入参数SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输出参数
返回值接收到的字
先决条件
被调用函数

例:
/* Read the most recent data received by the SPI2 peripheral */
u16 ReceivedData;
ReceivedData = SPI_ReceiveData(SPI2);

1.9 函数SPI_NSSInternalSoftwareConfig

函数名SPI_NSSInternalSoftwareConfig
函数原形void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, u16 SPI_NSSInternalSoft)
功能描述为选定的 SPI 软件配置内部 NSS 管脚
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_NSSInternalSoft:SPINSS 内部状态 参阅 Section:SPI_NSSInternalSoft 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

SPI_NSSInternalSoft
SPI_NSSInternalSoft 内部设置或者重置 NSS 管脚。

SPI_NSSInternalSoft描述
SPI_NSSInternalSoft_Set内部设置 NSS 管脚
SPI_NSSInternalSoft_Reset内部重置 NSS 管脚

例:
/* Set internaly by software the SPI1 NSS pin /
SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
/
Reset internaly by sofwtare the SPI2 NSS pin */
SPI_NSSInternalSoftwareConfig(SPI2, SPI_NSSInternalSoft_Reset);

1.10 函数SPI_SSOutputCmd

函数名SPI_SSOutputCmd
函数原形void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState)
功能描述使能或者失能指定的 SPI SS 输出
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2NewState: SPI SS 输出的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

例:
/* Enable the SPI1 SS output: single master mode */
SPI_SSOutputCmd(SPI1, ENABLE);

1.11 函数SPI_DataSizeConfig

函数名SPI_DataSizeConfig
函数原形void SPI_DataSizeConfig(SPI_TypeDef* SPIx, u16 SPI_DatSize)
功能描述设置选定的 SPI 数据大小
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_DataSize:SPI 数据大小 参阅 Section:SPI_DataSize 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

SPI_DataSize 设置 8 位或者 16 位数据帧结构。

SPI_DataSize描述
SPI_DataSize_8b设置数据为 8 位
SPI_DataSize_16b设置数据为 16 位

例:
/* Set 8bit data frame format for SPI1 /
SPI_DataSizeConfig(SPI1, SPI_DataSize_8b);
/
Set 16bit data frame format for SPI2 */
SPI_DataSizeConfig(SPI2, SPI_DataSize_16b);

1.12 函数SPI_ TransmitCRC

函数名SPI_TransmitCRC
函数原形void SPI_TransmitCRC(SPI_TypeDef* SPIx, FunctionalState NewState)
功能描述使能或者失能指定 SPI 的 CRC 传输
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2NewState:SPIxCRC 传输的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

例:
/* Enable the CRC transfer for SPI1 */
SPI_TransmitCRC(SPI1);

1.13 函数SPI_ CalculateCRC

函数名SPI_CalculateCRC
函数原形void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState)
功能描述使能或者失能指定 SPI 的传输字 CRC 值计算
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2NewState:SPIx 传输字 CRC 值计算的新状态,可以取值:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

例:
/* Enable the CRC calculation for the transfered bytes from SPI2 */
SPI_CalculateCRC(SPI2, ENABLE);

1.14 函数SPI_ GetCRC

函数名SPI_GetCRC
函数原形u16 SPI_GetCRC(SPI_TypeDef* SPIx)
功能描述返回指定 SPI 的 CRC 值
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输出参数
返回值CRC 值
先决条件
被调用函数

SPI_CRC 选择 SPI Rx 或者 SPI Tx 的 CRC 寄存器

SPI_CRC描述
SPI_CRC_Tx选择 Tx CRC 寄存器
SPI_CRC_Rx选择 Rx CRC 寄存器

例:
/* Returns the SPI1 transmit CRC register */
u16 CRCValue;
CRCValue = SPI_GetCRC(SPI1, SPI_CRC_Tx);

1.15 函数SPI_GetCRCPolynomial

函数名SPI_GetCRCPolynomial
函数原形u16 SPI_GetCRCPolynomial(SPI_TypeDef* SPIx)
功能描述返回指定 SPI 的 CRC 多项式寄存器值
输入参数SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输出参数
返回值CRC 多项式寄存器值
先决条件
被调用函数

例:
/* Returns the SPI2 CRC polynomial register */
u16 CRCPolyValue;
CRCPolyValue = SPI_GetCRCPolynomial(SPI2);

1.16 函数SPI_BiDirectionalLineConfig

函数名SPI_BiDirectionalLineConfig
函数原形void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, u16 SPI_Direction)
功能描述选择指定 SPI 在双向模式下的数据传输方向
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_Direction:待读取的 CRC 寄存器 参阅 Section:SPI_CRC 查阅更多该参数允许取值范围
输出参数
返回值CRC 值
先决条件
被调用函数

SPI_Direction选择SPI在双向模式下的数据传输方向。

SPI_Direction描述
SPI_Direction_Tx选择 Tx 发送方向
SPI_Direction_Rx选择 Rx 接收方向

例:
/* Set the SPI2 in bidirectional transmit only mode */
SPI_BiDirectionalLineConfig(SPI_Direction_Tx);

1.17 函数SPI_ GetFlagStatus

函数名SPI_GetFlagStatus
函数原形FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, u16 SPI_FLAG)
功能描述检查指定的 SPI 标志位设置与否
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_FLAG:待检查的 SPI 标志位 参阅 Section:SPI_FLAG 查阅更多该参数允许取值范围
输出参数
返回值SPI_FLAG 的新状态(SET 或者 RESET)
先决条件
被调用函数
SPI_FLAG描述
SPI_FLAG_BSY忙标志位
SPI_FLAG_OVR超出标志位
SPI_FLAG_MODF模式错位标志位
SPI_FLAG_CRCERRCRC 错误标志位
SPI_FLAG_TXE发送缓存空标志位
SPI_FLAG_RXNE接收缓存非空标志位

1.18 函数SPI_ ClearFlag

函数名SPI_ClearFlag
函数原形void SPI_ClearFlag(SPI_TypeDef* SPIx, u16 SPI_FLAG)
功能描述清除 SPIx 的待处理标志位
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_FLAG:待清除的 SPI 标志位 参阅 Section:SPI_FLAG 查阅更多该参数允许取值范围
输出参数
返回值
注意标志位 BSY, TXE 和 RXNE 由硬件重置
先决条件
被调用函数

例:
/* Clear the SPI2 Overrun pending bit */
SPI_ClearFlag(SPI2, SPI_FLAG_OVR);

1.19 函数SPI_ GetITStatus

函数名SPI_GetITStatus
函数原形ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, u8 SPI_IT)
功能描述检查指定的 SPI 中断发生与否
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_IT:待检查的 SPI 中断源 参阅 Section:SPI_IT 查阅更多该参数允许取值范围
输出参数
返回值SPI_IT 的新状态
先决条件
被调用函数

SPI_ GetITStatus检查的中断标志位列表

SPI_IT描述
SPI_IT_OVR超出中断标志位
SPI_IT_MODF模式错误标志位
SPI_IT_CRCERRCRC 错误标志位
SPI_IT_TXE发送缓存空中断标志位
SPI_IT_RXNE接收缓存非空中断标志位

例:
/* Test if the SPI1 Overrun interrupt has occurred or not */
ITStatus Status;
Status = SPI_GetITStatus(SPI1, SPI_IT_OVR);

1.20 函数SPI_ ClearITPendingBit

函数名SPI_ClearITPendingBit
函数原形void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_IT)
功能描述清除 SPIx 的中断待处理位
输入参数 1SPIx:x 可以是 1 或者 2,来选择 SPI 外设
输入参数 2SPI_IT:待检查的 SPI 中断源 参阅 Section:SPI_IT 查阅更多该参数允许取值范围
注意中断标志位 BSY, TXE 和 RXNE 由硬件重置
输出参数
返回值
先决条件
被调用函数

例:
/* Clear the SPI2 CRC error interrupt pending bit */
SPI_ClearITPendingBit(SPI2, SPI_IT_CRCERR);

该文档修改记录:

修改时间修改说明
2024年2月14日第一次发布,介绍了 15 STM32标准库函数 之 串行外设接口(SPI) 所有函数的介绍及使用

总结

以上就是 15 STM32标准库函数 之 串行外设接口(SPI) 所有函数的介绍及使用的内容。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: stm32f4标准库函数是由ST公司提供的一套软件函数,针对stm32f4系列单片机开发而设计。该函数包含了各种控制器的初始化函数、IO口控制函数、定时器控制函数断处理函数等。 其,控制器的初始化函数用于对各个控制器进行初始化,以实现控制器的各种功能。例如,GPIO_Init函数用于初始化IO口,使用户可以控制IO口的状态。而定时器控制函数则可用于实现各种定时器功能,如定时断、计时功能等。 此外,stm32f4标准库函数还提供了各种断处理函数,用于处理不同的断事件。例如,GPIO断处理函数可用于处理IO口的断事件,而定时器断处理函数则可用于处理定时器的断事件。 总体而言,stm32f4标准库函数stm32f4系列单片机开发不可或缺的一部分,能够大大简化开发人员的开发工作,提高开发效率。 ### 回答2: STM32F4系列是意法半导体推出的Cortex-M4内核的微控制器系列。为方便开发人员利用该系列微控制器进行项目开发,意法半导体提供了一份标准库,其包含了大量的函数来支持STM32F4系列微控制器的各种外设。本文将对STM32F4标准库函数进行说明。 STM32F4标准库函数可以在意法半导体的官方网站上下载。文件主要包括以下几个部分: 1. CMSIS: Cortex Microcontroller Software Interface Standard (ARM Cortex微控制器软件接口标准)。包括系统时钟配置、断、NVIC(Nested Vectored Interrupt Controller)、Systick(全局定时器)等相关的函数。 2. Device驱动:该部分是针对当前芯片的设备驱动程序,包括GPIO、定时器、SPI、I2C、串口等模块。 3. Peripherals驱动:该部分是针对当前芯片的外设驱动,包括ADC(模数转换器)、DMA(直接存储器访问)、DAC(数模转换器)、SDIO(Secure Digital Input/Output)、USB(通用串行总线)等模块。 4. Middleware:该部分是意法半导体提供的一些间件,可供用户自行选择。主要包括LWIP(Lightweight IP协议栈)、USB Host/Device等。 需要注意的是,在使用STM32F4标准库进行开发时,需要对进行配置,以满足对外设或功能的不同要求。 总的来说,STM32F4标准库函数提供了大量的函数,可以有效地进行硬件编程,为用户带来方便、高效的微控制器开发体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常驻客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值