前期:
1.打開外設時鐘前期(打開外設時鐘設時鐘均處于開的狀態(tài)。用戶可通過清除CLK_PCKENR1或CLK_PCKENR2中PCKEN位來關閉相應的外設時鐘。但是在關閉外設的時鐘前,用戶必須設置相應的位禁用該外設。為了使能一個外設,用戶必須先設置寄存器CLK_PCKENR中對應的PCKEN位,然后設置外設控制寄存器中的外設使能位。) SPI對應的標號時PCKEN11
2.Alternate function output:SPI outputs must be set-up as push-pull.
3.復用功能的輸出:復用輸出功能為外設輸出到外部或者I/O引腳提供一個方便的操作方法。當復用功能使能時,復用功能模塊接管了輸出鎖存寄存器(Px_ODR)并強制Px_ODR相應的位為1。復用輸出功能可以是上拉或者開漏輸出,取決于外設本身和控制寄存器1(Px_CR1),輸出擺率取決于控制寄存器2 (Px_CR2)的值。
例如:
考慮到要達到最佳性能,SPI輸出引腳必須設置為上拉,快速擺率。
配置步驟
1. 通過SPI_CR1寄存器的BR[2:0]位定義串行時鐘波特率
2. 選擇CPOL和CPHA位,定義數(shù)據(jù)傳輸和串行時鐘間的相位關系(改變CPOL/CPHA位之前,必須清除SPE位將SPI禁止)
3. 配置SPI_CR1寄存器的LSBFIRST位定義幀格式。
4. 硬件模式下,應把NSS腳連接到高電平;軟件模式下,SPI_CR2寄存器的SSM和SSI位為‘1’
5. 必須設置MSTR和SPE位
/********開時鐘************************************/
CLK->PCKENR1 = CLK->PCKENR1|0x10;
/********將所有與spi相關寄存器置0**************/
void SPI_DeInit(void)
{
SPI->CR1 = SPI_CR1_RESET_VALUE;
SPI->CR2 = SPI_CR2_RESET_VALUE;
SPI->ICR = SPI_ICR_RESET_VALUE;
SPI->SR = SPI_SR_RESET_VALUE;
SPI->CRCPR = SPI_CRCPR_RESET_VALUE;
}
/********spi配置函數(shù)***************************/
void SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, SPI_Mode_TypeDef Mode, SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase, SPI_DataDirection_TypeDef Data_Direction, SPI_NSS_TypeDef Slave_Management, uint8_t CRCPolynomial)
/********使能spi*******************************/
void SPI_Cmd(FunctionalState NewState)
就此spi就配置好了