基于stm32f030控制NRF24l01射频模块,基于库开发,spi总线通讯。
项目研发流程
一、查资料,购买开发模块,16块钱的NRF24l01射频模块,stm32f030f4开发小板
二、参考模块资料的例程,基于stm32f103的程序。
三、学习stm32f030的开发资料,知道IO功能配置,复用功能配置,基本库函数,和工程文件结构。
四、移植程序
1、学会运用硬件SPI控制器,运用库函数。
2、写一个void SPI__Init(uint8_t a);函数
里面包括管脚定义SPI接口定义,复用功能定义。SPI初始化定义
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8bit
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF); //stm32新版的SPI加了FIFO,需清除缓存
SPI_Cmd(SPI1, ENABLE); //使能
SPIx_ReadWriteByte(0xff);
3、写MFRC522的初始化程序
主要包括管脚定义,检测函数,收发功能函数。
uint8_t NRF24L01_Check(void)
通过读写寄存器,验证值,来检测SPI通讯是否成功。硬件连接是否正常。
TX_Mode()
RX_Mode()
收发模式转换函数
/*****************************************************
中断配置
*********************************************************/
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn; //中断入口
NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_InitStruct.EXTI_Line = EXTI_Line0; //NRF24L01 IRQ PA0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿中断
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
中断服务函数
void EXTI0_1_IRQHandler(void)
通过stm32f0xx.h查找中断向量表,把中断源和中断服务函数对应
只要实现基本的收发数据功能函数,就可以应用了。
基于stm32f030控制NRF24l01射频模块,基于库开发,spi总线通讯。
项目研发流程
一、查资料,购买开发模块,16块钱的NRF24l01射频模块,stm32f030f4开发小板
二、参考模块资料的例程,基于stm32f103的程序。
三、学习stm32f030的开发资料,知道IO功能配置,复用功能配置,基本库函数,和工程文件结构。
四、移植程序
1、学会运用硬件SPI控制器,运用库函数。
2、写一个void SPI__Init(uint8_t a);函数
里面包括管脚定义SPI接口定义,复用功能定义。SPI初始化定义
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8bit
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF); //stm32新版的SPI加了FIFO,需清除缓存
SPI_Cmd(SPI1, ENABLE); //使能
SPIx_ReadWriteByte(0xff);
3、写MFRC522的初始化程序
主要包括管脚定义,检测函数,收发功能函数。
uint8_t NRF24L01_Check(void)
通过读写寄存器,验证值,来检测SPI通讯是否成功。硬件连接是否正常。
TX_Mode()
RX_Mode()
收发模式转换函数
/*****************************************************
中断配置
*********************************************************/
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn; //中断入口
NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_InitStruct.EXTI_Line = EXTI_Line0; //NRF24L01 IRQ PA0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿中断
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
中断服务函数
void EXTI0_1_IRQHandler(void)
通过stm32f0xx.h查找中断向量表,把中断源和中断服务函数对应
只要实现基本的收发数据功能函数,就可以应用了。
举报