微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > NRF24L01无线通讯模块驱动

NRF24L01无线通讯模块驱动

时间:11-19 来源:互联网 点击:

24l01.c

#include "24l01.h"const u8 TX_ADDRESS[TX_ADR_WIDTH]={ADDR1_VALUE,ADDR2_VALUE,ADDR3_VALUE,ADDR4_VALUE,ADDR5_VALUE}; //发送地址const u8 RX_ADDRESS[RX_ADR_WIDTH]={ADDR1_VALUE,ADDR2_VALUE,ADDR3_VALUE,ADDR4_VALUE,ADDR5_VALUE}; //发送地址//初始化24L01的IO口void Nrf24l01Init(void){ 	GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBRCC_APB2Periph_GPIODRCC_APB2Periph_GPIOG, ENABLE);	 //使能PB,D,G端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				 //PB12上拉 防止W25X的干扰GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);	//初始化指定IOGPIO_SetBits(GPIOB,GPIO_Pin_12);//上拉				GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;				 //PD2推挽输出上拉   禁止SD卡的干扰GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_SetBits(GPIOD,GPIO_Pin_2);//初始化指定IOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6GPIO_Pin_7;	//PG6 7 推挽 	  GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IOGPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PG8 输入  GPIO_Init(GPIOG, &GPIO_InitStructure);GPIO_ResetBits(GPIOG,GPIO_Pin_6GPIO_Pin_7GPIO_Pin_8);//PG6,7,8上拉					 Spi2Init();    		//初始化SPI	 SPI_Cmd(SPI2, DISABLE); // SPI外设不使能SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //SPI设置为双线双向全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//SPI主机SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;		//发送接收8位帧结构SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;		//时钟悬空低SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//数据捕获于第1个时钟沿SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSS信号由软件控制SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;		//定义波特率预分频的值:波特率预分频值为16SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial = 7;	//CRC值计算的多项式SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Cmd(SPI2, ENABLE); //使能SPI外设NRF24L01_CE=0; 			//使能24L01,初始化低电平进入待机模式NRF24L01_CSN=1;			//SPI片选取消  }//SPI写寄存器//reg:指定寄存器地址//value:写入的值//每一个命令的执行都需要一次CSN由低到高的过程u8 Nrf24l01WriteReg(u8 reg,u8 value){u8 status;	NRF24L01_CSN=0;                 //使能SPI传输NRF24L01_CE=0;					//待机模式才能进行寄存器写入status =Spi2ReadWriteByte(WRITE_REG_NRF+reg);//发送寄存器号 +读寄存器命令Spi2ReadWriteByte(value);      //写入寄存器的值NRF24L01_CSN=1;                 //禁止SPI传输	   return(status);       			//返回状态值}//读取SPI寄存器值//reg:要读的寄存器u8 Nrf24l01ReadReg(u8 reg){u8 reg_val;	    NRF24L01_CSN = 0;          //使能SPI传输		Spi2ReadWriteByte(READ_REG_NRF+reg);   //发送寄存器号+读寄存器命令reg_val=Spi2ReadWriteByte(0XFF);//读取寄存器内容NRF24L01_CSN = 1;          //禁止SPI传输		    return(reg_val);           //返回状态值}//在指定位置读出指定长度的数据//reg:寄存器(位置)//*pBuf:数据指针//len:数据长度//返回值,此次读到的状态寄存器值 u8 Nrf24l01ReadBuf(u8 reg,u8 *pBuf,u8 len){u8 status,u8_ctr;	       NRF24L01_CSN = 0;           //使能SPI传输status=Spi2ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值   	   for(u8_ctr=0;u8_ctr				            

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top