一:定义的数据结构
typedef struct
{
uint16_t SPI_BaudRatePrescaler; //指定波特率预分频器值,用于配置发送和接收SCK时钟。此参数可以是 SPI_BaudRate_Prescaler的值
uint16_t SPI_CPHA; //指定位捕获的时钟活动边沿。此参数可以是SPI_Clock_Phase的值
uint16_t SPI_CPOL; //指定串行时钟稳定状态。此参数可以是SPI_Clock_Polarity的值
uint16_t SPI_CRCPolynomial; //指定用于CRC计算的多项式。
uint16_t SPI_DataSize; //指定SPI数据大小。此参数可以是SPI_data_size的值
uint16_t SPI_Direction ; //指定SPI单向或双向数据模式。此参数可以是SPI_data_direction的值
uint16_t SPI_FirstBit; //指定数据传输是从MSB还是LSB位开始。此参数可以是SPI_MSB_LSB_transmission的值
uint16_t SPI_Mode; //指定SPI操作模式。此参数可以是SPI_mode的值
uint16_t SPI_NSS; //指定NSS信号是由硬件(NSS引脚)管理还是由软件使用SSI位管理。此参数可以是 SPI_MSB_LSB_transmission的值
} SPI_InitTypeDef;
typedef struct
{
uint32_t I2S_AudioFreq; //指定为I2S通信选择的频率。此参数可以是I2S_Audio_Frequency的值
uint16_t I2S_CPOL; //指定I2S时钟的空闲状态。此参数可以是I2S_Clock_Polarity的值
uint16_t I2S_DataFormat; //指定I2S通信的数据格式。此参数可以是I2S_Data_Format的值
uint16_t I2S_MCLKOutput; //指定是否启用I2S MCLK输出。此参数可以是I2S_MCLK_Output的值
uint16_t I2S_Mode; //指定I2S操作模式。此参数可以是I2S_Mode的值
uint16_t I2S_Standart; //指定用于I2S通信的标准。此参数可以是I2S_Standard的值
} I2S_InitTypeDef;
二:预定义的配置项
/*------------------SPI_data_direction----------------------------*/
#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)
#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400)
#define SPI_Direction_1Line_Rx ((uint16_t)0x8000)
#define SPI_Direction_1Line_Tx ((uint16_t)0xC000)
#define IS_SPI_DIRECTION_MODE(MODE) (((MODE)== SPI_Direction_2Lines_FullDuplex)|| \
((MODE)== SPI_Direction_2Lines_RxOnly)|| \
((MODE)== SPI_Direction_1Line_Rx)|| \
((MODE)== SPI_Direction_1Line_Tx))
/*------------------SPI_mode----------------------------*/
#define SPI_Mode_Master ((uint16_t)0x0104)
#define SPI_Mode_Slave ((uint16_t)0x0000)
#define IS_SPI_MODE(MODE) (((MODE)== SPI_Mode_Master)|| \
((MODE)== SPI_Mode_Slave))
/*------------------SPI_data_size----------------------------*/
#define SPI_DataSize_16b ((uint16_t)0x0800)
#define SPI_DataSize_8b ((uint16_t)0x0000)
#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
((DATASIZE) == SPI_DataSize_8b))
/*-----------------SPI_Clock_Polarity ----------------------------*/
#define SPI_CPOL_Low ((uint16_t)0x0000)
#define SPI_CPOL_High ((uint16_t)0x0002)
#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
((CPOL) == SPI_CPOL_High))
/*-----------------SPI_Clock_Phase ----------------------------*/
#define SPI_CPHA_1Edge ((uint16_t)0x0000)
#define SPI_CPHA_2Edge ((uint16_t)0x0001)
#define IS_SPI_CPHA(CPHA (((CPHA) == SPI_CPHA_1Edge) || \
((CPHA) == SPI_CPHA_2Edge))
/*-----------------SPI_Slave_Select_management ----------------------------*/
#define SPI_NSS_Soft ((uint16_t)0x0200)
#define SPI_NSS_Hard ((uint16_t)0x0000)
#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
((NSS) == SPI_NSS_Hard))
/*-----------------SPI_BaudRate_Prescaler ----------------------------*/
#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)
#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)
#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)
#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)
#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)
#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)
#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)
#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
((PRESCALER) == SPI_BaudRatePrescaler_4) || \
((PRESCALER) == SPI_BaudRatePrescaler_8) || \
((PRESCALER) == SPI_BaudRatePrescaler_16) || \
((PRESCALER) == SPI_BaudRatePrescaler_32) || \
((PRESCALER) == SPI_BaudRatePrescaler_64) || \
((PRESCALER) == SPI_BaudRatePrescaler_128) || \
((PRESCALER) == SPI_BaudRatePrescaler_256))
/*-----------------SPI_MSB_LSB_transmission ----------------------------*/
#define SPI_FirstBit_MSB ((uint16_t)0x0000)
#define SPI_FirstBit_LSB ((uint16_t)0x0080)
#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
((BIT) == SPI_FirstBit_LSB))
/*-----------------SPI_I2S_Mode ----------------------------*/
#define I2S_Mode_SlaveTx ((uint16_t)0x0000)
#define I2S_Mode_SlaveRx ((uint16_t)0x0100)
#define I2S_Mode_MasterTx ((uint16_t)0x0200)
#define I2S_Mode_MasterRx ((uint16_t)0x0300)
#define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \
((MODE) == I2S_Mode_SlaveRx) || \
((MODE) == I2S_Mode_MasterTx)|| \
((MODE) == I2S_Mode_MasterRx))
/*-----------------SPI_I2S_Standard----------------------------*/
#define I2S_Standard_Phillips ((uint16_t)0x0000)
#define I2S_Standard_MSB ((uint16_t)0x0010)
#define I2S_Standard_LSB ((uint16_t)0x0020)
#define I2S_Standard_PCMShort ((uint16_t)0x0030)
#define I2S_Standard_PCMLong ((uint16_t)0x00B0)
#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \
((STANDARD) == I2S_Standard_MSB) || \
((STANDARD) == I2S_Standard_LSB) || \
((STANDARD) == I2S_Standard_PCMShort) || \
((STANDARD) == I2S_Standard_PCMLong))
/*-----------------SPI_I2S_Data_Format ----------------------------*/
#define I2S_DataFormat_16b ((uint16_t)0x0000)
#define I2S_DataFormat_16bextended ((uint16_t)0x0001)
#define I2S_DataFormat_24b ((uint16_t)0x0003)
#define I2S_DataFormat_32b ((uint16_t)0x0005)
#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \
((FORMAT) == I2S_DataFormat_16bextended) || \
((FORMAT) == I2S_DataFormat_24b) || \
((FORMAT) == I2S_DataFormat_32b))
/*-----------------SPI_I2S_MCLK_Output ----------------------------*/
#define I2S_MCLKOutput_Enable ((uint16_t)0x0200)
#define I2S_MCLKOutput_Disable ((uint16_t)0x0000)
#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \
((OUTPUT) == I2S_MCLKOutput_Disable))
/*-----------------SPI_I2S_Audio_Frequency----------------------------*/
#define I2S_AudioFreq_192k ((uint32_t)192000)
#define I2S_AudioFreq_96k ((uint32_t)96000)
#define I2S_AudioFreq_48k ((uint32_t)48000)
#define I2S_AudioFreq_44k ((uint32_t)44100)
#define I2S_AudioFreq_32k ((uint32_t)32000)
#define I2S_AudioFreq_22k ((uint32_t)22050)
#define I2S_AudioFreq_16k ((uint32_t)16000)
#define I2S_AudioFreq_11k ((uint32_t)11025)
#define I2S_AudioFreq_8k ((uint32_t)8000)
#define I2S_AudioFreq_Default ((uint32_t)2)
#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \
((FREQ) <= I2S_AudioFreq_192k)) || \
((FREQ) == I2S_AudioFreq_Default))
/*-----------------SPI_I2S_Clock_Polarity----------------------------*/
#define I2S_CPOL_Low ((uint16_t)0x0000)
#define I2S_CPOL_High ((uint16_t)0x0008)
#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \
((CPOL) == I2S_CPOL_High))
/*-----------------SPI_I2S_DMA_transfer_requests ----------------------------*/
#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002)
#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001)
#define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))
/*-----------------SPI_CRC_Transmit_Receive ----------------------------*/
#define SPI_CRC_Tx ((uint8_t)0x00)
#define SPI_CRC_Rx ((uint8_t)0x01)
#define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))
/*-----------------SPI_direction_transmit_receive----------------------------*/
#define SPI_Direction_Rx ((uint16_t)0xBFFF)
#define SPI_Direction_Tx ((uint16_t)0x4000)
#define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
((DIRECTION) == SPI_Direction_Tx))
/*-----------------SPI_I2S_interrupts_definition----------------------------*/
#define SPI_I2S_IT_TXE ((uint8_t)0x71)
#define SPI_I2S_IT_RXNE ((uint8_t)0x60)
#define SPI_I2S_IT_ERR ((uint8_t)0x50)
#define I2S_IT_UDR ((uint8_t)0x53)
#define SPI_I2S_IT_TIFRFE ((uint8_t)0x58)
#define SPI_I2S_IT_OVR ((uint8_t)0x56)
#define SPI_IT_MODF ((uint8_t)0x55)
#define SPI_IT_CRCERR ((uint8_t)0x54)
#define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR))
#define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \
((IT) == SPI_I2S_IT_RXNE) || \
((IT) == SPI_I2S_IT_ERR))
#define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE)|| ((IT) == SPI_I2S_IT_TXE) || \
((IT) == SPI_IT_CRCERR) || ((IT) == SPI_IT_MODF) || \
((IT) == SPI_I2S_IT_OVR) || ((IT) == I2S_IT_UDR) ||\
((IT) == SPI_I2S_IT_TIFRFE))
/*-----------------SPI_I2S_flags_definition----------------------------*/
#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001)
#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002)
#define I2S_FLAG_CHSIDE ((uint16_t)0x0004)
#define I2S_FLAG_UDR ((uint16_t)0x0008)
#define SPI_FLAG_CRCERR ((uint16_t)0x0010)
#define SPI_FLAG_MODF ((uint16_t)0x0020)
#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040)
#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080)
#define SPI_I2S_FLAG_TIFRFE ((uint16_t)0x0100)
#define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR))
#define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \
((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \
((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \
((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE)|| \
((FLAG) == SPI_I2S_FLAG_TIFRFE))
/*-----------------SPI_CRC_polynomial----------------------------*/
#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)
/*-----------------SPI_I2S_Legacy----------------------------*/
#define SPI_DMAReq_Tx SPI_I2S_DMAReq_Tx
#define SPI_DMAReq_Rx SPI_I2S_DMAReq_Rx
#define SPI_IT_TXE SPI_I2S_IT_TXE
#define SPI_IT_RXNE SPI_I2S_IT_RXNE
#define SPI_IT_ERR SPI_I2S_IT_ERR
#define SPI_IT_OVR SPI_I2S_IT_OVR
#define SPI_FLAG_RXNE SPI_I2S_FLAG_RXNE
#define SPI_FLAG_TXE SPI_I2S_FLAG_TXE
#define SPI_FLAG_OVR SPI_I2S_FLAG_OVR
#define SPI_FLAG_BSY SPI_I2S_FLAG_BSY
#define SPI_DeInit SPI_I2S_DeInit
#define SPI_ITConfig SPI_I2S_ITConfig
#define SPI_DMACmd SPI_I2S_DMACmd
#define SPI_SendData SPI_I2S_SendData
#define SPI_ReceiveData SPI_I2S_ReceiveData
#define SPI_GetFlagStatus SPI_I2S_GetFlagStatus
#define SPI_ClearFlag SPI_I2S_ClearFlag
#define SPI_GetITStatus SPI_I2S_GetITStatus
#define SPI_ClearITPendingBit SPI_I2S_ClearITPendingBit
#define IS_I2S_EXT_PERIPH(PERIPH) (((PERIPH) == I2S2ext) || \
((PERIPH) == I2S3ext))
#define IS_SPI_23_PERIPH(PERIPH ) (((PERIPH) == SPI2) || \
((PERIPH) == SPI3))
#define IS_SPI_23_PERIPH_EXT(PERIPH ) (((PERIPH) == SPI2) || \
((PERIPH) == SPI3) || \
((PERIPH) == I2S2ext) || \
((PERIPH) == I2S3ext))
#define IS_SPI_ALL_PERIPH(PERIPH ) (((PERIPH) == SPI1) || \
((PERIPH) == SPI2) || \
((PERIPH) == SPI3))
#define IS_SPI_ALL_PERIPH_EXT(PERIPH ) (((PERIPH) == SPI1) || \
((PERIPH) == SPI2) || \
((PERIPH) == SPI3) || \
((PERIPH) == I2S2ext) || \
((PERIPH) == I2S3ext))
#define CR1_CLEAR_MASK ((uint16_t)0x3040)
#define I2SCFGR_CLEAR_MASK ((uint16_t)0xF040)
#define PLLCFGR_PPLR_MASK ((uint32_t)0x70000000)
#define PLLCFGR_PPLN_MASK ((uint32_t)0x00007FC0)
#define SPI_CR2_FRF ((uint16_t)0x0010)
#define SPI_SR_TIFRFE ((uint16_t)0x0100)
三:定义的功能函数
/*-----------------初始化和配置----------------------------*/
void I2S_Cmd(SPI_TypeDef * SPIx,FunctionalState NewState)
说明:
启用或禁用指定的SPI外设(在I2S模式下)
参数:
SPIx: 其中x可以是2或3来选择SPI外设(或I2Sxext用于全双工模式
NewState: SPIx外设的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
void I2S_FullDuplexConfig(SPI_TypeDef * I2Sxext,I2S_InitTypeDef * I2S_InitStruct)
说明:
根据I2S_InitStruct中指定的参数,使用扩展I2Sxext配置I2Sx外设的全双工模式。
参数:
I2Sxext: 其中x可以是2或3来选择I2S外设扩展块。
I2S_InitStruct: 指向I2S_InitTypeDef结构的指针,该结构包含指定I2S外设扩展的配置信息
注意:
I2S_InitStruct参数指向的结构应与主I2S外设使用的结构相同。在这种情况下,如果主设备配置为发送器,则从设备将是接收器,反之亦然。或者,您可以通过将字段I2S_Mode修改为独立于主配置的值I2S_SlaveRx或I2S_SlaveTx来强制执行其他模式。
I2S全双工扩展只能配置为从机模式。
返回值:
无
void I2S_Init(SPI_TypeDef * SPIx,I2S_InitTypeDef * I2S_InitStruct )
说明:
根据I2S_InitStruct中的指定参数初始化SPIx外设。
参数:
SPIx: 其中x可以是2或3来选择SPI外设(在I2S模式下配置)。
I2S_InitStruct: 指向I2S_InitTypeDef结构的指针,该结构包含在I2S模式下配置的指定SPI外设的配置信息。
注意:
该功能计算获得最准确音频所需的最佳预分频器(取决于I2S时钟源,PLL值和产品配置)。但是如果预分频器值大于511,则将配置默认值(0x02)。
如果外部时钟用作I2S的源时钟,则应启用文件stm32f4xx_conf.h中的定义I2S_EXTERNAL_CLOCK_VAL并将其设置为源时钟频率的值(以Hz为单位)。
返回值:
无
void I2S_StructInit (I2S_InitTypeDef *I2S_InitStruct)
说明:
使用其默认值填充每个I2S_InitStruct成员。
参数:
I2S_InitStruct: 指向将被初始化的I2S_InitTypeDef结构的指针
返回值:
无
void SPI_BiDirectionalLineConfig(SPI_TypeDef * SPIx,uint16_t SPI_Direction )
说明:
为指定的SPI选择双向模式下的数据传输方向。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
SPI_Direction: 指定双向模式下的数据传输方向。此参数可以是以下值之一:
SPI_Direction_Tx:选择Tx传输方向
SPI_Direction_Rx:选择Rx接收方向
返回值:
无
void SPI_Cmd(SPI_TypeDef * SPIx,FunctionalState NewState )
说明:
启用或禁用指定的SPI外设。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
NewState: SPIx外设的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
void SPI_DataSizeConfig (SPI_TypeDef * SPIx,uint16_t SPI_DataSize )
说明:
配置所选SPI的数据大小。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
SPI_DataSize: 指定SPI数据大小。此参数可以是以下值之一:
SPI_DataSize_16b:将数据帧格式设置为16bit
SPI_DataSize_8b:将数据帧格式设置为8bit
返回值:
无
void SPI_I2S_DeInit (SPI_TypeDef * SPIx )
说明:
将SPIx外设寄存器取消初始化为其默认复位值。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
注意:
当相对I2S外设被去初始化时(扩展块的时钟由I2S外设时钟管理),扩展的I2S块(即I2S2ext和I2S3ext块)被去初始化。
返回值:
无
void SPI_Init(SPI_TypeDef *SPIx,SPI_InitTypeDef *SPI_InitStruct )
说明:
根据SPI_InitStruct中的指定参数初始化SPIx外设。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
SPI_InitStruct: 指向SPI_InitTypeDef结构的指针,该结构包含指定SPI外设的配置信息。
返回值:
无
void SPI_NSSInternalSoftwareConfig(SPI_TypeDef * SPIx,uint16_t SPI_NSSInternalSoft )
说明:
通过软件在内部配置所选SPI的NSS引脚。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
SPI_NSSInternalSoft: 指定SPI NSS内部状态。此参数可以是以下值之一:
SPI_NSSInternalSoft_Set:在内部设置NSS引脚
SPI_NSSInternalSoft_Reset:在内部复位NSS引脚
返回值:
无
void SPI_SSOutputCmd(SPI_TypeDef *SPIx,FunctionalState NewState )
说明:
启用或禁用所选SPI的SS输出。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
NewState: SPIx外设的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
void SPI_StructInit (SPI_InitTypeDef *SPI_InitStruct)
说明:
使用其默认值填充每个SPI_InitStruct成员。
参数:
SPI_InitStruct: 指向将被初始化的SPI_InitTypeDef结构的指针。
返回值:
无
void SPI_TIModeCmd(SPI_TypeDef *SPIx,FunctionalState NewState )
说明:
启用或禁用SPIx / I2Sx DMA接口。
注意:
只有在调用SPI_Init()函数后才能调用此函数。
选择TI模式时,不考虑控制位SSM,SSI,CPOL和CPHA,并分别由硬件配置TI模式要求。
参数:
SPIx: 其中x可以是1,2或3来选择SPI外设。
NewState: SPIx外设的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
/*-----------------数据传输---------------------------*/
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef *SPIx )
说明:
返回SPIx / I2Sx外设最新接收的数据。
参数:
SPIx : 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
返回值:
接收数据的值。
void SPI_I2S_SendData(SPI_TypeDef *SPIx,uint16_t Data)
说明:
通过SPIx / I2Sx外设传输数据。
参数:
SPIx: 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
Data: 要传输的数据。
返回值:
无
/*-----------------硬件CRC计算功能---------------------------*/
void SPI_CalculateCRC(SPI_TypeDef *SPIx,FunctionalState NewState )
说明:
启用或禁用传输字节的CRC值计算。
参数:
SPIx : 其中x可以是1,2或3来选择SPI外设。
NewState : SPIx CRC值计算的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
uint16_t SPI_GetCRC (SPI_TypeDef *SPIx,uint8_t SPI_CRC )
说明:
返回指定SPI的发送或接收CRC寄存器值。
参数:
SPIx : 其中x可以是1,2或3来选择SPI外设。
SPI_CRC : 指定要读取的CRC寄存器。此参数可以是以下值之一:
SPI_CRC_Tx:选择Tx CRC寄存器
SPI_CRC_Rx:选择Rx CRC寄存器
返回值:
选择的CRC寄存器值.
uint16_t SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
说明:
返回指定SPI的CRC多项式寄存器值。
参数:
SPIx : 其中x可以是1,2或3来选择SPI外设。
返回值:
CRC多项式寄存器值。
void SPI_TransmitCRC(SPI_TypeDef *SPIx)
说明:
传输SPIx CRC值。
参数:
SPIx : 其中x可以是1,2或3来选择SPI外设。
返回值:
无
/*-----------------DMA传输管理---------------------------*/
void SPI_I2S_DMACmd (SPI_TypeDef *SPIx,uint16_t SPI_I2S_DMAReq,FunctionalState NewState)
说明:
启用或禁用SPIx / I2Sx DMA接口。
参数:
SPIx :要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_DMAReq :指定要启用或禁用的SPI DMA传输请求。此参数可以是以下值的任意组合:
SPI_I2S_DMAReq_Tx:Tx缓冲区DMA传输请求
SPI_I2S_DMAReq_Rx:Rx缓冲区DMA传输请求
NewState : 所选SPI DMA传输请求的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无
/*-----------------中断事件和标志管理---------------------------*/
void SPI_I2S_ClearFlag(SPI_TypeDef *SPIx,uint16_t SPI_I2S_FLAG)
说明:
清除SPIx CRC错误(CRCERR)标志。
参数:
SPIx : 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_FLAG : 指定要清除的SPI标志。此函数仅清除CRCERR标志。
SPI_FLAG_CRCERR:CRC错误标志。
注意:
OVR(溢出错误)标志由软件序列清零:对SPI_DR寄存器的读操作(SPI_I2S_ReceiveData()),然后对SPI_SR寄存器(SPI_I2S_GetFlagStatus())进行读操作。
通过对SPI_SR寄存器(SPI_I2S_GetFlagStatus())的读操作清除UDR(欠运行错误)标志。
MODF(模式故障)标志由软件序列清除:对SPI_SR寄存器(SPI_I2S_GetFlagStatus())的读/写操作,然后对SPI_CR1寄存器(SPI_Cmd()使能SPI 的写操作)。
返回值:
无
void SPI_I2S_ClearITPendingBit(SPI_TypeDef *SPIx,uint8_t SPI_I2S_IT)
说明:
清除SPIx CRC错误(CRCERR)中断挂起位。
参数:
SPIx : 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_IT : 指定要清除的SPI中断挂起位。该函数仅清除CRCERR中断挂起位。
SPI_IT_CRCERR:CRC错误中断。
注意:
OVR(溢出错误)中断标志位由软件序列清零:对SPI_DR寄存器的读操作(SPI_I2S_ReceiveData()),然后对SPI_SR寄存器(SPI_I2S_GetITStatus())进行读操作。
通过对SPI_SR寄存器(SPI_I2S_GetITStatus())的读操作清除UDR(欠运行错误)中断标志位。
MODF(模式故障)中断标志位由软件序列清零:对SPI_SR寄存器(SPI_I2S_GetITStatus())进行读/写操作,然后对SPI_CR1寄存器进行写操作(SPI_Cmd()使能SPI)。
返回值:
无
FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef *SPIx,uint16_t SPI_I2S_FLAG)
说明:
检查指定的SPIx / I2Sx标志是否置1。
参数:
SPIx : 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_FLAG : 指定要检查的SPI标志。此参数可以是以下值之一:
SPI_I2S_FLAG_TXE:发送缓冲区空标志。
SPI_I2S_FLAG_RXNE:接收缓冲区非空标志。
SPI_I2S_FLAG_BSY:忙旗。
SPI_I2S_FLAG_OVR:溢出标志。
SPI_FLAG_MODF:模式故障标志。
SPI_FLAG_CRCERR:CRC错误标志。
SPI_I2S_FLAG_TIFRFE:格式错误。
I2S_FLAG_UDR:欠载错误标志。
I2S_FLAG_CHSIDE:通道侧标志。
返回值:
该SPI_I2S_FLAG的新状态(SET或RESET)
ITStatus SPI_I2S_GetITStatus(SPI_TypeDef * SPIx,uint8_t SPI_I2S_IT)
说明:
检查是否发生了指定的SPIx / I2Sx中断
参数:
SPIx : 要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_IT :指定要检查的SPI中断源。此参数可以是以下值之一:
SPI_I2S_IT_TXE:发送缓冲区空中断。
SPI_I2S_IT_RXNE:接收缓冲区非空中断。
SPI_I2S_IT_OVR:溢出中断。
SPI_IT_MODF:模式故障中断。
SPI_IT_CRCERR:CRC错误中断。
I2S_IT_UDR:欠载中断。
SPI_I2S_IT_TIFRFE:格式错误中断。
返回值:
该SPI_I2S_IT的新状态(SET或RESET)
void SPI_I2S_ITConfig(SPI_TypeDef *SPIx,uint8_t SPI_I2S_IT,FunctionalState NewState)
说明:
启用或禁用指定的SPI / I2S中断。
参数:
SPIx :要选择SPIx / I2Sx外设,其中x可以是:SPI模式下为1,2或3,I2S模式下为2或3,I2S为全双工模式时为I2Sxext。
SPI_I2S_IT : 指定要启用或禁用的SPI中断源。此参数可以是以下值之一:
SPI_I2S_IT_TXE:Tx缓冲区空中断掩码
SPI_I2S_IT_RXNE:Rx缓冲区不为空中断掩码
SPI_I2S_IT_ERR:错误中断屏蔽
NewState : 指定SPI中断的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
无