虽然STM32F0也是STM32,可是F1的程序并不能直接移植到F0上,因为基础配置还是有很多不同的地方,本人也是被折磨了一段时间。所以总结个人经验,给需要的人节省时间,也算是多年作为伸手党做出的一点贡献。
初始化端口
/*******************************************************************************
* @Brief 初始化端口 因为CSN用的PB12 CE 用的PA11所以两个时钟都要开
* @param None
* @retval None
****************************************************************Author:Liming**/
void NRF24L01_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB,ENABLE);//使能端口A/B时钟
GPIO_InitStructure.GPIO_Pin = SPI2_CE_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_Init(SPI2_CE_PORT,&GPIO_InitStructure); //CE控制脚
GPIO_InitStructure.GPIO_Pin = SPI2_CSN_PIN;
GPIO_Init(SPI2_CSN_PORT,&GPIO_InitStructure); //CSN控制脚
GPIO_ResetBits(SPI2_CE_PORT,SPI2_CE_PIN);
GPIO_SetBits(SPI2_CSN_PORT,SPI2_CSN_PIN);
GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_Init(SPI2_SCK_GPIO_PORT,&GPIO_InitStructure); //SPI 引脚
GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN;
GPIO_Init(SPI2_MISO_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;
GPIO_Init(SPI2_MOSI_GPIO_PORT,&GPIO_InitStructure);
GPIO_PinAFConfig(SPI2_SCK_GPIO_PORT, SPI2_SCK_SOURCE, SPI2_SCK_AF);
GPIO_PinAFConfig(SPI2_MISO_GPIO_PORT, SPI2_MISO_SOURCE, SPI2_MISO_AF);
GPIO_PinAFConfig(SPI2_MOSI_GPIO_PORT, SPI2_MOSI_SOURCE, SPI2_MOSI_AF);
}
初始化spi
/*******************************************************************************
* @brief 初始化SPI 因为NRF24L01SPI最大支持10M,所以分频到6MHz
* @param None
* @retval None
****************************************************************Author:Liming**/
void SPIx_Init(void)
{
SPI_InitTypeDef SPI_InitStruture;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); //使能SPI2时钟
SPI_InitStruture.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI 设置为双线双向全双工
SPI_InitStruture.SPI_Mode = SPI_Mode_Master;//设置为主SPI
SPI_InitStruture.SPI_DataSize = SPI_DataSize_8b;//SPI 发送接收8 位帧结构
SPI_InitStruture.SPI_CPOL = SPI_CPOL_Low;//时钟悬空低
SPI_InitStruture.SPI_CPHA = SPI_CPHA_1Edge;//数据捕获于第一个时钟沿
SPI_InitStruture.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//波特率预分频值为8 48/8=6MHz
SPI_InitStruture.SPI_NSS = SPI_NSS_Soft;//内部 NSS 信号有SSI 位控制
SPI_InitStruture.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始
SPI_InitStruture.SPI_CRCPolynomial = 7; //CRC校验计算式
SPI_Init(SPI2,&SPI_InitStruture); //应用到SPI1
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);// 很重要的一句代码
SPI_Cmd(SPI2,ENABLE);
}
主要就在上面俩配置文件。更多的详细介绍在附件。
|