STM32驱动无线模块,已调好可用#includebsp.hu8TX_ADDRESS[TX_ADR_WIDTH]={0x02,0x02,0x02,0x02,0x02};//发送地址u8RX_ADDRESS[RX_ADR_WIDTH]={0x02,0x02,0x02,0x02,0x02};//发送地址/****************************************************函数名:SPI初始化形参:返回值:函数功能:写使能****************************************************/voidSPI2_Config(void){GPIO_InitTypeDefGPIO_InitStructure;SPI_InitTypeDefSPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//MOSI--PB15SCK--PB13//PB13--SPI2_CKPB14--SPI2_MOSIPB15--SPI2_MISOGPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);//PG6--CEPG7--CSGPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//PG67推挽GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOG,&GPIO_InitStructure);//初始化指定IO//IRQGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_Init(GPIOG,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;GPIO_Init(GPIOB,&GPIO_InitStructure);//SPI协议的初始化SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//SPI2设置为双线全双工SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//SPI主机模式SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//数据8位SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;//CPOL-0SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;//CPHA-0SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//NSS信号软件控制SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;//波特率预分频值为4SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial=7;//CRC值SPI_Init(SPI2,&SPI_InitStructure);SPI_Cmd(SPI2,ENABLE);CE_LOW();//待机CS_HIGH();}/****************************************************函数名:NRF24L01初始化形参:返回值:函数功能:写使能****************************************************//****************************************************函数名:NRF24L01_Check形参:无返回值:0--成功1--失败函数功能:检测24L01是否存在****************************************************/u8NRF24L01_Check(void){u8buf[5]={0XF0,0XF0,0XF0,0XF0,0XF0};u8i;//SPI2_SetSpeed(SPI_BaudRatePrescaler_4);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,buf,5);//写入5个字节的地址.NRF24L01_Read_Buf(TX_ADDR,buf,5);//读出写入的地址for(i=0;i5;i++)//检测读到的数据是否正确{if(buf[i]!=0XF0)break;}if(i!=5)return1;//检测NRF24L01失败return0;//检测NRF24L01成功}/****************************************************函数名:SPI2_Send_Receive_Byte形参:data--给FLASH发送的数据返回值:flash返回的数据函数功能:给FLASH发送数据和读取数据****************************************************/u8SPI2_ReadWriteByte(u8data){u32timeout=0;while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);{timeout++;if(timeout500)return0;}SPI_I2S_SendData(SPI2,data);timeout=0;while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);{timeout++;if(timeout500)return0;}returnSPI_I2S_ReceiveData(SPI2);}/**************************************************函数:SPI_RW_REG()描述:根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01读出一字节**************************************************/u8NRF24L01_Write_Reg(u8reg,u8value){u8status;CS_LOW();//CSN置低,开始传输数据status=SPI2_ReadWriteByte(reg);//选择寄存器,同时返回状态字SPI2_ReadWriteByte(value);//然后写数据到该寄存器CS_HIGH();//CSN拉高,结束数据传输return(status);//返回}/*****************************************************************************函数:SPI_Write_Buf()描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发射通道数据或接收/发送地址******************************************************************************/u8NRF24L01_Write_Buf(u8reg,u8*pBuf,u8bytes){u8status,i;CS_LOW();//CS置低,开始传输数据status=SPI2_ReadWriteByte(reg);//选择寄存器,同时返回状态字for(i=0;ibytes;i++){SPI2_ReadWriteByte(*pBuf++);//逐个字节写入nRF24L01}CS_HIGH();//CSN拉高,结束数据传输return(status);//返回状态寄存器}/*******************************************************************************函数:NRF24L01_Read_Reg(BYTEreg)描述:从reg寄存器读一字节********************************************************************************/u8NRF24L01_Read_Reg(u8reg){u8status;CS_LOW();//CSN置低,开始传输数据SPI2_ReadWriteByte(reg);//选择寄存器status=SPI2_ReadWriteByte(0);//然后从该寄存器读数CS_HIGH();//CSN拉高,结束数据传输return(status);//返回寄存器数据}/********************************************************************************函数:SPI_Read_Buf()描述:从reg寄存器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址********************************************************************************/u8NRF24L01_Read_Buf(u8reg,u8*pBuf,u8bytes){u8status,i;CS_LOW();//CSN置低,开始传输数据status=SPI2_ReadWriteByte(reg);//选择寄存器,同时返回状态字for(i=0;ibytes;i++){pBuf[i]=SPI2_ReadWriteByte(0);//逐个字节从nRF24L01读出}CS_HIGH();//CSN拉高,结束数据传输return(status);//返回状态寄存器}/********************************************************************************函数:RX_Mode()描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包*********************************************************************************/voidRX_Mode(void){CE_LOW();NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址//接收设备接收通道0使用和发送设备相同的发送地址NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);//使能接收通道0自动应答NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RX