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 寄存器 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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_FullDuplex SPI 设置为双线双向全双工 SPI_Direction_2Lines_RxOnly SPI 设置为双线单向接收 SPI_Direction_1Line_Rx SPI 设置为单线双向接收 SPI_Direction_1Line_Tx SPI 设置为单线双向发送
SPI_Mode 设置了 SPI 工作模式。
SPI_Mode 描述 SPI_Mode_Master 设置为主 SPI SPI_Mode_Slave 设置为从 SPI
SPI_DataSize 设置了 SPI 的数据大小
SPI_DataSize 描述 SPI_DataSize_16b SPI 发送接收 16 位帧结构 SPI_DataSize_8b SPI 发送接收 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_Hard NSS 由外部管脚管理 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_Direction SPI_Direction_2Lines_FullDuplex SPI_Mode SPI_Mode_Slave SPI_DataSize SPI_DataSize_8b SPI_CPOL SPI_CPOL_Low SPI_CPHA SPI_CPHA_1Edge SPI_NSS SPI_NSS_Hard SPI_BaudRatePrescaler SPI_BaudRatePrescaler_2 SPI_FirstBit SPI_FirstBit_MSB SPI_CRCPolynomial 7
例: /* 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 外设 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 NewState: 外设 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 中断 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_IT:待使能或者失能的 SPI 中断源 参阅 Section:SPI_IT 查阅更多该参数允许取值范围 输入参数 3 NewState: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 请求 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_DMAReq:待使能或者失能的 SPI DMA 传输请求 参阅 Section:SPI_DMAReq 查阅更多该参数允许取值范围 输入参数 3 NewState: 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 发送一个数据 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 Data: 待发送的数据 输出参数 无 返回值 无 先决条件 无 被调用函数 无
例: /* 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 管脚 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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 输出 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 NewState: 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 数据大小 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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 传输 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 NewState: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 值计算 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 NewState: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 值 输入参数 1 SPIx: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 在双向模式下的数据传输方向 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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 标志位设置与否 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_FLAG:待检查的 SPI 标志位 参阅 Section:SPI_FLAG 查阅更多该参数允许取值范围 输出参数 无 返回值 SPI_FLAG 的新状态(SET 或者 RESET) 先决条件 无 被调用函数 无
SPI_FLAG 描述 SPI_FLAG_BSY 忙标志位 SPI_FLAG_OVR 超出标志位 SPI_FLAG_MODF 模式错位标志位 SPI_FLAG_CRCERR CRC 错误标志位 SPI_FLAG_TXE 发送缓存空标志位 SPI_FLAG_RXNE 接收缓存非空标志位
1.18 函数SPI_ ClearFlag
函数名 SPI_ClearFlag 函数原形 void SPI_ClearFlag(SPI_TypeDef* SPIx, u16 SPI_FLAG) 功能描述 清除 SPIx 的待处理标志位 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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 中断发生与否 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_IT:待检查的 SPI 中断源 参阅 Section:SPI_IT 查阅更多该参数允许取值范围 输出参数 无 返回值 SPI_IT 的新状态 先决条件 无 被调用函数 无
SPI_ GetITStatus检查的中断标志位列表
SPI_IT 描述 SPI_IT_OVR 超出中断标志位 SPI_IT_MODF 模式错误标志位 SPI_IT_CRCERR CRC 错误标志位 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 的中断待处理位 输入参数 1 SPIx:x 可以是 1 或者 2,来选择 SPI 外设 输入参数 2 SPI_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) 所有函数的介绍及使用的内容。 有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。 创作不容,如果文档对您有帮助,记得给个赞。