最近在做一个STM8L+NRF24L01的小项目,现把部分代码跟大家分享一下(其实里面大部分代码也是别人的),NRF24L01的资料,网上随便一扫荡就是大把的,这里就不上传了。
上代码:
#include#include "rf24l01.h" const uint8_t TX_ADDRESS[TX_ADR_WIDTH]={0x68,0x86,0x66,0x88,0x28}; //发送地址 const uint8_t RX_ADDRESS[RX_ADR_WIDTH]={0x68,0x86,0x66,0x88,0x28}; //发送地址 /******************************************************************************* * Function Name : SPI_RF_Init * Description : Initializes the peripherals used by the SPI FLASH driver. * Input : None * Output : None * Return : None *******************************************************************************/ void NRF24L01_Init(void) { SPI_DeInit(SPI1); /* Set the MOSI and SCK at high level */ GPIO_ExternalPullUpConfig(GPIOB, GPIO_Pin_6 | GPIO_Pin_5, ENABLE); CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE); SPI_Init(SPI1,SPI_FirstBit_MSB, SPI_BaudRatePrescaler_4, SPI_Mode_Master,\ SPI_CPOL_Low, SPI_CPHA_1Edge,\ SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07); SPI_Cmd(SPI1,ENABLE); GPIO_Init(SPI_PORT , SPI_Pin_CS, GPIO_Mode_Out_PP_High_Fast); SPI_RF_CS_HIGH(); GPIO_Init(SPI_PORT,SPI_Pin_CE, GPIO_Mode_Out_PP_High_Fast); /* CE引脚初始化为输出 */ GPIO_Init(GPIOD,GPIO_Pin_5,GPIO_Mode_In_PU_IT ); EXTI_SetPinSensitivity(EXTI_Pin_5, EXTI_Trigger_Falling); ITC_SetSoftwarePriority(EXTI5_IRQn, ITC_PriorityLevel_1); } /*********************************************/ /* 函数功能:给24L01的寄存器写值(一个字节) */ /* 入口参数:reg 要写的寄存器地址 */ /* value 给寄存器写的值 */ /* 出口参数:status 状态值 */ /*********************************************/ uint8_t NRF24L01_Write_Reg(uint8_t reg,uint8_t value) { uint8_t status; SPI_RF_CS_LOW() ; //CSN=0; status = SPI_RF_SendByte(reg);//发送寄存器地址,并读取状态值 SPI_RF_SendByte(value); SPI_RF_CS_HIGH(); //CSN=1; return status; } /*************************************************/ /* 函数功能:读24L01的寄存器值 (一个字节) */ /* 入口参数:reg 要读的寄存器地址 */ /* 出口参数:value 读出寄存器的值 */ /*************************************************/ uint8_t NRF24L01_Read_Reg(uint8_t reg) { uint8_t value; SPI_RF_CS_LOW() ; //CSN=0; SPI_RF_SendByte(reg);//发送寄存器值(位置),并读取状态值 value = SPI_RF_SendByte(NOP); SPI_RF_CS_HIGH(); //CSN=1; return value; } /*********************************************/ /* 函数功能:读24L01的寄存器值(多个字节) */ /* 入口参数:reg 寄存器地址 */ /* *pBuf 读出寄存器值的存放数组 */ /* len 数组字节长度 */ /* 出口参数:status 状态值 */ /*********************************************/ uint8_t NRF24L01_Read_Buf(uint8_t reg,uint8_t *pBuf,uint8_t len) { uint8_t status,u8_ctr; SPI_RF_CS_LOW() ;//CSN=0 status=SPI_RF_SendByte(reg);//发送寄存器地址,并读取状态值 for(u8_ctr=0;u8_ctr