我的程序,你可以参考:
//SPI1初始化,Spi1在Pa4~Pa7
void SPI1_Init(void)
{
/* Private variables ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|RCC_APB2Periph_GPIOA, ENABLE);
//----Pa6-SPI2_MISO-对应GPIO口初始化--------------------------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//----Pa5-SPI2_SCK&Pa7-SPI2_MOSI-对应GPIO口初始化--------------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//----Pa4-SPI2_NSS-对应GPIO口初始化----------------------------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//----------------------------------------------------------------------------------
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//全双工;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主机模式;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8位数据模式;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//空闲模式下SCK为1;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据采样从第2个时间边沿开始;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS软件管理;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;//波特率,4M时钟MFRC522不行,要2M以下,
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//大端模式;
SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC多项式;
SPI_Init(SPI1,&SPI_InitStructure);
// SPI_Cmd(SPI1, DISABLE); //现在不开SPI,
SPI_Cmd(SPI1,ENABLE); //现在开SPI,
}
|