NRF24L01配置功能函数.zip

  • y8_368608
    了解作者
  • 3.6KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-09 05:31
    上传日期
NRF24L01不一样的配置方式,方便简洁明了,一个函数配置出所有你想要的功能。由结构体打包函数,每个参数设置都有注释说明,傻瓜式配置。 ------------------NRF24L01函数目录——————————————— typedef struct { u8 NRF24L01_Mode;//模式 接收,发送模式 NRF24L01_TXMode NRF24L01_RXMode u8 NRF24L01_Shield_Interrupt;//屏蔽中断 MASK_RX_DR MASK_TX_DS MASK_MAX_RT EN_MASK u8 NRF24L01_ENCRCO8_16;//使能CRC校验 EN_CRC8 EN_CRC16 CRC_NO u8 NRF24L01_ENACK;//使能自动应答 EN_CH0~EN_CH5 u8 NRF24L01_ENRX;//使能接收通道 EN_CH0~EN_CH5 u8 NRF24L01_AddrWide;//设置所有通道的接收/发送地址宽度 3~5字节 AddrWide_3~AddrWide_5 u8 NRF24L01_ResendDelay;//重发延时 (('0000'+1)250+86)us//0~15 u8 NRF24L01_ResendCount;//重发次数 0~15次 u8 NRF24L01_RF_CHf;//设置工作通道频率 0~125 u8 NRF24L01_RF_Speed;//数据传输率 0-1Mbps,1-2Mbps //RF_Speed1Mbps RF_Speed2Mbps u8 NRF24L01_RF_PWR;//发送功率 0,-6,-12,-18dBm// RF_PWR_18dBm RF_PWR_12dBm RF_PWR_6dBm RF_PWR0dBm u8 NRF24L01_RXADDR_P0[5];//通道0接收地址 u8 NRF24L01_RXADDR_P1[5];//通道1接收地址 u8 NRF24L01_RXADDR_P2_P5[4];//通道2~5接收地址(每字节表各通道最低字节), //高4字节与NRF24L01_RXADDR_P1[5]高4字节相等(不可修改) u8 NRF24L01_TXADDR[5];//发送地址(ShockBurst模式下NRF24L01_RXADDR_P0[5]与此地址相等) u8 NRF24L01_RX_PW[6];//(0~5通道)接收数据通道有效数据宽度 (1~32) }NRF24L01_InitTypeDef; //初始化为接收模式 void NRF24L01_RXInit(); //NRF24L01功能初始化 void NRF24L01_Init(NRF24L01_InitTypeDef *NRF24L01_InitStructure); //SPI读写一字节数据 u8 NRF24L01_SPIR_WByte(u8 dat); //SPI读NRF24L01寄存器 u8 NRF24L01_ReadReg(u8 RegAddr); //SPI写NRF24L01寄存器 u8 NRF24L01_WriteReg(u8 RegAddr,u8 dat); //读取RXFIFO寄存器的值 //寄存器地址//读取数据存放变量//读取数据长度//用于接收 u8 NRF24L01_ReadRxDate(u8 RegAddr,u8 *RxDate,u8 DateLen); //写入TXFIFO寄存器的值 //寄存器地址//写入数据存放变量//读取数据长度//用于发送 u8 NRF24L01_WriteTxDate(u8 RegAddr,u8 *TxDate,u8 DateLen);
NRF24L01配置功能函数.zip
  • NRF24L01配置功能函数
  • NRF24L01.h
    4.5KB
  • NRF24L01.c
    5.6KB
内容介绍
//2019.8//ZSX #include "NRF24L01.h" //初始化为接收模式 void NRF24L01_RXInit() { u8 RXADDR_P0[5]={0xaa,0xaa,0xaa,0xaa,0xaa};//地址设置 u8 RXADDR_P1[5]={0xaa,0xaa,0xaa,0xaa,0xaa}; u8 RXADDR_P2_5[4]={0xaa,0xaa,0xaa,0xaa}; u8 TXADDR[5]={0xaa,0xaa,0xaa,0xaa,0xaa}; u8 RX_PW[6]={6,6,6,6,6,6};//0~5通道接收数据长度 NRF24L01_InitTypeDef NRF24L01_InitStructure; NRF24L01_InitStructure.NRF24L01_Mode =NRF24L01_RXMode;//接收模式 NRF24L01_InitStructure.NRF24L01_Shield_Interrupt =EN_MASK;//使能所有中断 NRF24L01_InitStructure.NRF24L01_ENCRCO8_16 =EN_CRC16;//使能CRC16校验 NRF24L01_InitStructure.NRF24L01_ENACK =EN_ALLCH;//使能所有通道自动应答 NRF24L01_InitStructure.NRF24L01_ENRX =EN_ALLCH;//使能所有接收通道 NRF24L01_InitStructure.NRF24L01_AddrWide =AddrWide_5;//5字节地址 NRF24L01_InitStructure.NRF24L01_ResendDelay =3;//重发延时 (('0011'+1)250+86)us=836us NRF24L01_InitStructure.NRF24L01_ResendCount =3;//重发次数 0~15次 NRF24L01_InitStructure.NRF24L01_RF_CHf =10;//设置工作通道频率 0~125 NRF24L01_InitStructure.NRF24L01_RF_Speed =RF_Speed1Mbps;//数据传输率 NRF24L01_InitStructure.NRF24L01_RF_PWR =RF_PWR0dBm;//发送功率 NRF24L01_InitStructure.NRF24L01_RXADDR_P0[5] =RXADDR_P0[5];//通道0接收地址 NRF24L01_InitStructure.NRF24L01_RXADDR_P1[5] =RXADDR_P1[5];//通道1接收地址 NRF24L01_InitStructure.NRF24L01_RXADDR_P2_P5[4] =RXADDR_P2_5[4];//通道2~5接收地址 NRF24L01_InitStructure.NRF24L01_TXADDR[5] =TXADDR[5];//发送地址(ShockBurst模式下NRF24L01_RXADDR_P0[5]与此地址相等) NRF24L01_InitStructure.NRF24L01_RX_PW[6] =RX_PW[6];//(0~5通道)各接收数据通道有效数据宽度 (1~32) NRF24L01_Init(&NRF24L01_InitStructure); } //NRF24L01功能初始化 void NRF24L01_Init(NRF24L01_InitTypeDef *NRF24L01_InitStructure) { u8 RegDat; NRF24L01_CE =0; //使能自动应答 RegDat =NRF24L01_InitStructure->NRF24L01_ENACK; NRF24L01_WriteReg(0x20|EN_AA,RegDat); //使能接收通道 RegDat =NRF24L01_InitStructure->NRF24L01_ENRX; NRF24L01_WriteReg(0x20|EN_RXADDR,RegDat); //设置所有通道的接收/发送地址宽度 3~5字节 RegDat =NRF24L01_InitStructure->NRF24L01_AddrWide; NRF24L01_WriteReg(0x20|SETUP_AW,RegDat); //重发延时(('0000'+1)250+86)us//重发次数0~15次 RegDat =(NRF24L01_InitStructure->NRF24L01_ResendDelay<<4)|NRF24L01_InitStructure->NRF24L01_ResendCount; NRF24L01_WriteReg(0x20|SETUP_RETR,RegDat); //设置工作通道频率 0~126 RegDat =NRF24L01_InitStructure->NRF24L01_RF_CHf; NRF24L01_WriteReg(0x20|RF_CH,RegDat); //数据传输率//发送功率 RegDat =NRF24L01_InitStructure->NRF24L01_RF_Speed|NRF24L01_InitStructure->NRF24L01_RF_PWR; NRF24L01_WriteReg(0x20|RF_SETUP,RegDat); //接收地址 RX NRF24L01_WriteTxDate(0x20|RX_ADDR_P0,NRF24L01_InitStructure->NRF24L01_RXADDR_P0,NRF24L01_InitStructure->NRF24L01_AddrWide+2); NRF24L01_WriteTxDate(0x20|RX_ADDR_P1,NRF24L01_InitStructure->NRF24L01_RXADDR_P1,NRF24L01_InitStructure->NRF24L01_AddrWide+2); NRF24L01_WriteReg(0x20|RX_ADDR_P2,NRF24L01_InitStructure->NRF24L01_RXADDR_P2_P5[0]); NRF24L01_WriteReg(0x20|RX_ADDR_P3,NRF24L01_InitStructure->NRF24L01_RXADDR_P2_P5[1]); NRF24L01_WriteReg(0x20|RX_ADDR_P4,NRF24L01_InitStructure->NRF24L01_RXADDR_P2_P5[2]); NRF24L01_WriteReg(0x20|RX_ADDR_P5,NRF24L01_InitStructure->NRF24L01_RXADDR_P2_P5[3]); //发送地址 TX NRF24L01_WriteTxDate(0x20|TX_ADDR,NRF24L01_InitStructure->NRF24L01_TXADDR,NRF24L01_InitStructure->NRF24L01_AddrWide+2); //各通道接收字节宽度 NRF24L01_WriteReg(0x20|RX_PW_P0,NRF24L01_InitStructure->NRF24L01_RX_PW[0]); NRF24L01_WriteReg(0x20|RX_PW_P1,NRF24L01_InitStructure->NRF24L01_RX_PW[1]); NRF24L01_WriteReg(0x20|RX_PW_P2,NRF24L01_InitStructure->NRF24L01_RX_PW[2]); NRF24L01_WriteReg(0x20|RX_PW_P3,NRF24L01_InitStructure->NRF24L01_RX_PW[3]); NRF24L01_WriteReg(0x20|RX_PW_P4,NRF24L01_InitStructure->NRF24L01_RX_PW[4]); NRF24L01_WriteReg(0x20|RX_PW_P5,NRF24L01_InitStructure->NRF24L01_RX_PW[5]); //模式设置 //屏蔽中断//使能CRC校验 RegDat =NRF24L01_InitStructure->NRF24L01_Mode|NRF24L01_InitStructure->NRF24L01_Shield_Interrupt|NRF24L01_InitStructure->NRF24L01_ENCRCO8_16; NRF24L01_WriteReg(0x20|CONFIG,RegDat); NRF24L01_CE =1; } //SPI读写一字节数据 u8 NRF24L01_SPIR_WByte(u8 dat) { u8 i; for(i=0;i<8;i++) { if(dat&0x80)NRF24L01_MOSI=1; else NRF24L01_MOSI=0; dat<<=1; NRF24L01_SCLK=1; if(NRF24L01_MISO) dat|=0x01; //nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据 NRF24L01_SCLK=0; } return(dat); // 返回读出的数据 } //SPI读NRF24L01寄存器 u8 NRF24L01_ReadReg(u8 RegAddr) { u8 BackDat; NRF24L01_CSN =0;//启动时序 NRF24L01_SPIR_WByte(RegAddr);//写寄存器地址 BackDat =NRF24L01_SPIR_WByte(0x00);//写入读寄存器指令 NRF24L01_CSN =1; return(BackDat); //返回状态 } //SPI写NRF24L01寄存器 u8 NRF24L01_WriteReg(u8 RegAddr,u8 dat) { u8 BackDat; NRF24L01_CSN =0;//启动时序 BackDat =NRF24L01_SPIR_WByte(RegAddr);//写入地址 NRF24L01_SPIR_WByte(dat);//写入值 NRF24L01_CSN =1; return(BackDat); } //读取RXFIFO寄存器的值 //寄存器地址//读取数据存放变量//读取数据长度//用于接收 u8 NRF24L01_ReadRxDate(u8 RegAddr,u8 *RxDate,u8 DateLen) { u8 BackDat,i; NRF24L01_CSN=0;//启动时序 BackDat=NRF24L01_SPIR_WByte(RegAddr);//写入要读取的寄存器地址 for(i=0;i<DateLen;i++) //读取数据 RxDate[i]=NRF24L01_SPIR_WByte(0); NRF24L01_CSN=1; return(BackDat); } //写入TXFIFO寄存器的值 //寄存器地址//写入数据存放变量//读取数据长度//用于发送 u8 NRF24L01_WriteTxDate(u8 RegAddr,u8 *TxDate,u8 DateLen) { u8 BackDat,i; NRF24L01_CSN=0; BackDat=NRF24L01_SPIR_WByte(RegAddr);//写入要写入寄存器的地址 for(i=0;i<DateLen;i++)//写入数据 NRF24L01_SPIR_WByte(*TxDate++); NRF24L01_CSN=1; return(BackDat); }
评论
    相关推荐
    • FreeMaker IDE
      FreeMarker的Eclipse插件,可以高亮显示FTL标签,提示语法错误,以及智能提示!
    • selenium ide
      selenium ide下载,fire path
    • IDE设置
      IDE设置
    • FreeMaker IDE
      FreeMaker IDE FreeMaker IDE
    • silabs ide
      用于调试51F023的软件 可以与CE3配套使用
    • ide
      ide
    • ide
      ide
    • IDE Factory
      【名称】IDE Factory 【作用】Flex Builder的AS3开发插件,主要用于生成Geter and Setter 、Format code...etc 【版本】Beta2 1.05(2008.12.20 最新) 【官网】开代理访问 www.idefactory.com 【已知Bug】 根据...
    • SiLabs IDE
      新华龙公司特别为C8051系列开发的编译软件IDE,界面很直观,非常好用!
    • Perl IDE
      一个Perl的程序设计器。