nRF24L01无线通信模块使用手册
nRF24L01 无线模块 说明书
nRF24L01 无线模块用户手册目录产品概述 (3)基本特性 (3)引脚接口说明 (4)模块尺寸 (6)nRF2401工作模式 (7)Enhanced ShockBurstTM收发模式 (7)Enhanced ShockBurstTM数据发送流程 (8)空闲模式 (9)关机模式 (9)nRF24L01模块参数设置 (9)主要参数设置 (10)程序设计分析 (10)nRF24L01初始化 (10)nRF24L01SPI写操作 (11)nRF24L01 SPI读操作 (11)nRF24L01写寄存器函数 (12)nRF24L01连续读多个寄存器函数 (12)nRF24L01连续写多个寄存器函数 (12)nRF24L01接收模式设置 (13)nRF24L01接收数据流程 (13)nRF24L01发送数据流程 (13)无线应用注意事项 (14)我们的承诺 (15)产品概述nRF24L01是挪威NordicVLSI公司出品的一款新型射频收发器件,采用4 mm×4 mm QFN20封装;nRF24L01工作在ISM频段:2.4~2.524 GHz。
且内置频率合成器、功率放大器、晶体振荡器、调制器等功能,并融合增强型ShockBurst技术,其中地址、输出功率和通信频道可通过程序进行配置,适合用于多机通信。
nRF24L01功耗很低,在以-6 dBm的功率发射时,工作电流也只有9 mA;而对应接收机的工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
nRF24L01在业界领先的低功耗特点使其特别适合采用钮扣电池供电的2.4G应用,整个解决方案包括链路层和MultiCeiver功能提供了比现有的 nRF24XX 更多的功能和更低的电源消耗,与目前的蓝牙技术相比在提供更高速率的同时,而只需花更小的功耗基本特性(1) 2.4Ghz全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强(3) 125频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 低功耗1.9 - 3.6V 工作,适合电池供电应用(6) 待机模式下状态为22uA;掉电模式下为900nA(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便(8) 内置专门稳压电路,即使开关电源也有很好的通信效果(9) 标准DIP间距接口,便于嵌入式应用(10)具有自动应答机制,和CRC校验,数据通讯稳定可靠。
nRF24L01无线通信模块使用手册
nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm2.2Mbps,传输速率高3.功耗低,等待模式时电流消耗仅22uA4.多频点(125个),满足多点通信及跳频通信需求5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)6.工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。
如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。
最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。
当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。
若此时自动应答开启,接收方则同时进入发射状态回传应答信号。
最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
三、模块引脚说明四、模块与AT89S52单片机接口电路注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU模块时,请将Nrf24L01通讯模块每个端口(MOSI、SCK、CSN和CE)接4.7K的排阻上拉到VCC增强其驱动能力(如下图:)。
NRF24L01使用方法
四、 程序说明
4.1 发射:
/* PD3--20 脚--CE----模块芯片开启信号 激活 RX 或 TX PD2--19 脚--CSN---模块 SPI 片选信号 PC7--17 脚--SCK---模块 SPI 时钟信号 PC6--16 脚--MOSI--模块 SPI 输入信号 PC5--15 脚--MISO--模块 SPI 输出信号 PC4--14 脚--IRQ---模块可屏蔽中断信号 低电平有效 */ #include <NRF_2401C.h> #include <delay.h> uchar RevTempDate[5];//最后一位用来存放结束标志 uchar TxAddr[]={0x34,0x43,0x10,0x10,0x02};//发送地址 /*****************状态标志*****************************************/ uchar sta; //状态标志 单片机输出 单片机输出 单片机输出 单片机输出 单片机输入 单片机输入
写寄存器 TXFIFO
广东顺德春暖花开自动化开发设计工作室
伍耀斌
4.2 接收:
/* PD3--20 脚--CE----模块芯片开启信号 激活 RX 或 TX PD2--19 脚--CSN---模块 SPI 片选信号 PC7--17 脚--SCK---模块 SPI 时钟信号 PC6--16 脚--MOSI--模块 SPI 输入信号 PC5--15 脚--MISO--模块 SPI 输出信号 PC4--14 脚--IRQ---模块可屏蔽中断信号 低电平有效 */ #include <NRF_2401C.h> #include <delay.h> uchar RevTempDate[5];//最后一位用来存放结束标志 uchar TxAddr[]={0x34,0x43,0x10,0x10,0x02};//发送地址 /*****************状态标志*****************************************/ uchar sta; //状态标志 //RX_DR=sta^6; //TX_DS=sta^5; PLC_BitState.BitState0.Bit.M4=1; //MAX_RT=sta^4; struct PLC_BITSTATE { //-------------------------------------------union BITSTATE0 { char all; struct BIT00 { uchar M0:1;// uchar M1:1;// uchar M2:1;// uchar M3:1;// uchar MAX_RT:1;// uchar TX_DS:1;// uchar RX_DR:1;// uchar M7:1;// }Bit; }BitState0; }PLC_BitState; /*****************SPI 时序函数******************************************/ uchar NRFSPI(uchar date) { } /**********************NRF24L01 初始化函数*******************************/ void NRF24L01Int() { } /*****************SPI 读寄存器一字节函数*********************************/ 单片机输出 单片机输出 单片机输出 单片机输出 单片机输入 单片机输入
nRF24L01无线通信模块使用手册12要点
深圳市德普施科技有限公司nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm2.2Mbps,传输速率高3.功耗低,等待模式时电流消耗仅22uA4.多频点(125个),满足多点通信及跳频通信需求5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)6.工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。
如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。
最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。
当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。
若此时自动应答开启,接收方则同时进入发射状态回传应答信号。
最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
三、模块引脚说明深圳市德普施科技有限公司7 NC 空 8 CSN 芯片片选信号 I 9 CE 工作模式选择I 10+5V电源四、模块与AT89S52单片机接口电路注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU 模块时,请将Nrf24L01通讯模块每个端口(MOSI 、SCK 、CSN 和CE )接4.7K 的排阻上拉到VCC 增强其驱动能力(如下图:)。
NRF24L01模块说明书
NRF24L01高速嵌入式无线数传模块说明书2008年12月20日一、产品特性2.4GHz全球开放ISM频段,最大0dBm发射功率,免许可证使用支持六路通道的数据接收低工作电压:1.9~3.6V低电压工作高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率)多频点:125频点,满足多点通信和跳频通信需要超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。
低应用成本:NRF24L01集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等,NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
便于开发:由于链路层完全集成在模块上,非常便于开发。
自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制自动存储未收到应答信号的数据包自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程载波检测—固定频率检测内置硬件CRC检错和点对多点通信地址控制数据包传输错误计数器及载波检测功能可用于跳频设置可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM间距接口,便于嵌入式应用二、基本电气特性三、引脚说明说明:1)VCC脚接电压范围为1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。
推荐电压3.3V左右。
(2)除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。
当然对3V左右的单片机更加适用了。
(3)硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了(a:与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。
NRF24L01无线通信模块
NRF24L01无线通信模块一、NRF24L01简介:NRF24L01 是一款工作在2.4~2.5GHz 世界通用ISM 频段的单片无线收发器芯片。
无线收发器包括:频率发生器、增强型SchockBurst TM 模式控制器、功率放大器、晶体振荡器、调制器、解调器。
输出功率、频道选择和协议的设置可以通过SPI 接口进行设置。
极低的电流消耗:当工作在发射模式下发射功率为-6dBm 时电流消耗为9mA,接收模式12.3mA。
掉电模式和待机模式下电流消耗更低。
二、NRF24L01参考数据:三、模块接口尺寸和说明四、引脚及功能:五、NRF24L01的SPI命令宏定义:六、NRF24L01相关寄存器地址宏定义:七、NRF24L01的工作模式:1、NRF24L01模式配置2、发送模式函数配置3、接收模式函数配置4、发送、接收模式说明(1)在发射模式下,CE至少要拉高10us。
(2)NRF24L01在接收模式下可以接收6路不同通道的数据,每一个数据通道使用不同的地址,但是共用相同的频道。
(3)数据通道0是唯一一个可以配置为40位自身地址的数据通道,1~5数据通道都为8位自身地址和32位共用地址。
(4)所有的数据通道都可以设置为增强型ShockBurst模式。
八、NRF24L01的打包格式:1、增强型ShockBurst模式下的数据包形式前导码 | 地址(3~5字节) | 9位(标志位) | 数据(1~32字节) | CRC校验(0/1/2字节) 2、ShockBurst模式下与NRF24L01等相兼容的数据包形式前导码 | 地址(3~5字节) | 数据(1~32字节) | CRC校验(0/1/2字节)3、数据包说明前导码:在发送模式下加入,接收模式下去除,用来检测0和1。
地址:1)地址内容为接收机地址。
2)地址宽度可以是3、4或5字节宽度。
3)地址可以对接收通道和发射通道分别进行配置。
4)从接收的数据包中自动去除地址。
NRF24L01模块系列说明书
答:原厂给的标准收发演示例程,有 51 PIC STM32 的,都是标准 C 语言编写, 因此即使移植其它单片机也很快
14 问:拿到模块和程序后,自己焊接测试电路和移植程序,下载进去后通讯不 了。
答:首先不用怀疑模块的问题。生产工艺成熟,不良率在不测试时候低于 1%, 何况全部测试,不良率低于千分之一。大部分新手自己焊接电路移植程序不良是 因为移植时候硬件错误或者软件增删错误引起,因为即使很小点错误,也能导致 整个程序的失效,所以建议自己移植程序时候要很小心,尽量照搬我们的例程, 等整个程序跑起来再做修改。若实在搞不定,可以借用我们的测试板,或者付出 很少费用就能买到配套的测试板,这样能给客户节省不少的时间。
11 问 NRF24L01 系列模块可以一对多发送或者多对一接收吗?
答:完全可以,70%客户都这么用的。
12 问:我是新手,你们提供哪些方面的技术支持?
答:2.4G 系列模块属于有点技术难度的产品,若完全依靠客户参照规格书 写程序,会浪费客户一个多礼拜的时间,比较幸运的是我们提供了参考程序,并 且提供和程序配套的测试板借用或购买,可以让客户快速体验模块的性能。建议 项目比较急的客户选用,价格每个 20 元成本价格销售,可以给客户节省好几天 的调试时间,很划算。
答:一款原产台湾,一款原产品挪威,随着众多 IC 晶圆厂自己无线 IC 的 推出,兼容模块的价格从 2008 年的 20 元左右一直跌落到目前的 4.5,利润由当 初的 10 元降到现在的 0.5 元以下,其中挪威版的出的最早,价格虽然猛降,但 是始终拼不过台产芯片。
3 问:挪威版本的 NRF24L01+和台产版的哪个使用效果会更好? 答:台产版的完全克隆挪威版的,并在以前的基础上加了+7DB 的功放电路,
2.4G无线通信使用教程
} //在指定位置写指定长度的数据 //reg:寄存器(位置) //*pBuf:数据指针 //len:数据长度 //返回值,此次读到的状态寄存器值 u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len) { u8 status,u8_ctr; NRF24L01_CSN = 0; //使能 SPI 传输 status = SPI2_ReadWriteByte(reg);//发送寄存器值(位置),并读取状 态值 for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPI2_ReadWriteByte(*pBuf++); //写入数据 NRF24L01_CSN = 1; //关闭 SPI 传输 return status; //返回读到的状态值 } //启动 NRF24L01 发送一次数据 //txbuf:待发送数据首地址 //返回值:发送完成状况 u8 NRF24L01_TxPacket(u8 *txbuf) { u8 sta; SPI2_SetSpeed(SPI_BaudRatePrescaler_4);//spi 速度为 9Mhz(24L01 的最大 SPI 时钟为 10Mhz) NRF24L01_CE=0; NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);// 写 数 据 到 TX BUF 32 个字节 NRF24L01_CE=1;//启动发送 while(NRF24L01_IRQ!=0);//等待发送完成 sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值 NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); // 清 除 TX_DS 或 MAX_RT 中断标志 if(sta&MAX_TX)//达到最大重发次数 { NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除 TX FIFO 寄存器 return MAX_TX; } if(sta&TX_OK)//发送完成 { return TX_OK; }
NRF24l01使用手册函数介绍
NRF24l01使用手册以及函数指令寄存器介绍芯片简介NRF24L01 是NORDIC 公司最近生产的一款无线通信通信芯片,采用FSK 调制,内部集成NORDIC 自己的Enhanced Short Burst 协议。
可以实现点对点或是1 对6 的无线通信。
无线通信速度可以达到2M(bps)。
NORDIC 公司提供通信模块的GERBER 文件,可以直接加工生产。
嵌入式工程师或是单片机爱好者只需要为单片机系统预留5 个GPIO,1 个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU 系统构建无线通信功能。
NRF24L01功能框图NRF24L01 的框图如Fig.1 所示,从单片机控制的角度来看,我们只需要关注Fig.1 右面的六个控制和数据信号,分别为CSN、SCK、MISO、MOSI、IRQ、CE。
CSN:芯片的片选线,CSN 为低电平芯片工作。
SCK:芯片控制的时钟线(SPI 时钟)MISO:芯片控制数据线(Master input slave output)MOSI:芯片控制数据线(Master output slave input)IRQ:中断信号。
无线通信过程中MCU 主要是通过IRQ 与NRF24L01 进行通信。
CE:芯片的模式控制线。
在CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。
NRF24L01状态机NRF24L01 的状态机见Fig.2 所示,对于NRF24L01 的固件编程工作主要是参照NRF24L01 的状态机。
主要有以下几个状态Power Down Mode:掉电模式Tx Mode:发射模式Rx Mode:接收模式Standby-1Mode:待机1 模式Standby-2 Mode:待机2 模式上面五种模式之间的相互切换方法以及切换所需要的时间参照Fig.2。
对24L01 的固件编程的基本思路如下:1)置CSN 为低,使能芯片,配置芯片各个参数。
nRF24L01中文全数据手册翻译
图 4:在微处理器中的数据时钟形式 与
无线射频发送技术
下图中分别示意了在没有无线射频发送时,数据传输速率由 MCU 决定 以及 有无线 射频发送时的时钟状态:
图 5:nRF2401 工作在无线射频时或非无线射频时的电流损耗
图 6:nRF2401 以无线射频模式进行数据发送的流程图
nRF2401 以无线射频发送数据时的条件: 相关 MCU 接口引脚:CE、CLK1、DATA � 当运行 MCU 并有数据发送时,置高 CE。接下来便激活 nRF2401 进行发送数据的 处理 � 接收机地址与所需传输的数据在系统时钟下写入 nRF2401,此时芯片运行速率或 MCU 运行速率小于 1Mbps(例如只有:10kbps) � 在上述情况完成后,MCU 置低 CE,这一行为便激活 nRF2401 以无线射频方式进 行数据发送 � nRF2401 的无线射频发送: � 射频前端上电 � 射频数据包完成(数据开始位添加成功,CRC 校验计算完成) � 数据以高速进行发送(用户可以配置发送速率为:250kbps 或 1Mbps) � 当数据发送完成,nRF2401 进入睡眠模式
nRF2401 运行模式:
概述: 通过不同的设置 PWR_UP、CE、CS 这三个引脚,nRF2401 可以工作在一下主要工作模式:
表 6:nRF2401 主要工作模式 � 激活模式(接收/发送) :PWR_UP—CE—CS(110) � 配置模式:PWR_UP—CE—CS(101) � 睡眠模式:PWR_UP—CE—CS(100) � 掉电模式:PWR_UP—CE—CS(0XX) 对于完整概述 nRF2401 输入/输出引脚的不同工作模式的设置请参照表 7。 激活模式: nRF2401 有两种接收/发送工作模式: � 无线射频模式 � 直接发送模式 nRF2401 工作于何种激活模式完全依照于配置字的组成,而配置字存在于专有的配置区域。 无线射频模式( Shock Burst) : 无线射频技术使用片上的先入先出( FIFO)功能来记录低速的数据写入,并以非常高 的速率进行数据发送,因此这样可以极大的减少电能损耗。 当 nRF2401 工作在无线射频模式时, 你可以通过由 2.4GHz 的频带来获得高速的数据传 输速率 (1Mbps) 而不需要额外的费用, 而这些数据的传输加工均由高速的微处理器来完成。 通过片上的无线射频协议来处理高速信号的传输,nRF2401 具有如下优势: � 大大减小电流的损耗 � 更低的系统花费(使用相对便宜的微处理器) � 通过短时间传输大大减低信号在空中的因传输干扰而产生的危险 nRF2401 可以通过使用 3 线接口来对其进行编程处理, 其数据的传输速率由微处理器的 处理速率决定。 当无线射频连接在最大数据传输速率时, 让芯片会把运行状态下的数字处理部分工作在 最低速率,此时 nRF2401 工作在无线射频模式下时可以在相当大的范围内减小平均电流声 损耗。 无线射频传输规则( Shock Burst Principle) : 当 nRF2401 配置为无线射频模式时(Shock Burst mode) ,其数据的发送或接收遵循如 下组成方式(以 10kbps 为范例) :
NRF24L01无线模块详细规格介绍说明书。
用也4无线模块使用说明HTO 4无线模块0状态寄存卷默认为STATUSReservedRX DR6RAV 0RAVRX PNORW R/WTXFULL接收数据中研.当收到有效数据包后置L数据发送完成中断.数据发送完成后产生中断.如果工作在自动应答模式卜,只有当接收到应答信号后此位置1.:写1清除中断。
重发次数溢出中断.写T稠除中断.如果MAX_RT中断产生那么必须清除后系线才■行通讯■接收数据通道号:(XX) 101:数据通道号110:未使用llldlXFLFO寄存需为空TX FIFO寄存器满标志。
hTXEIK)寄存器满0: DLHFO寄存器未濯,有可用空间.第10页HTO4无线模块RX FULL 1;ORRX FIFO 寄存器满标志cLRXFTFO 寄存器滴(hRXFIFO 寄存鹫未满.有可用空间.RX_EMPTY0 1 RRX FIFO 寄存器空标志。
1:RXFIFO 寄存器空 0:RXFIFO 寄存器|卜空N/A TX_PLD2559 WRX_PLD 255:0R表6-2寄存器内容及说明SPI 指令格式:(命令字:山高位到低位(每字节))(数据字节:低字节到高字节,每一字节高位在前) SPI 时序:图6-1, 6-2和表6-3给出了SPI 操作及时序。
在写寄存器之前一定要进入待机 模式或掉电模式。
在图6-16-2中用到了如下符号:Cn-SPI 指令位Sn-状态寄存器 位Dn-数据位(注:山低字节到高字节,每字节高位在前)CSIN \小—TLTLrumrmrLjmrLnjWLrLJWLnrLnRn图6-1SPI 读操作2022年-2023年图6-2SPI 写操作第13页MISUMISUHTO4无线模块PA kA MEIERSYMBOL MINMAXUNITS1i<^ S< l< Setup Tdc 2ns SCK «> D ;ii ;i Hold Tdh 2ns L SN ” D 如 Valid Tcsd42 ns SCK to Dnta Valid Ted58ns SCK 1A >U Iin>e Td 40 ns SCK High Time Teh 40i 】、 ]SCK rrfqucnc>Fsck 0R MH/. SCK Rise :mJ Pull Tr.Tf)(M)ns CSN to SCK Setup Tee s ns SCK to CSN Hold Tech 2n 、 C'SN liuiclivc tiiiK B ']cwh5(>ns C SN to (hitput High Z1 Cll/42ns ;图6-3SPI 参考时序七、NRF24L01模块电路2022年-2023年菖修菖修第14页邸24无线模块八、NRF24L01(SMA)与单片机接口电路例如2022年-2023年4?VV九,绝对极限参数工作电压 VDD-0. 3Vto+3. 6VVSS0V 输入电压Vi-0. 3Vto+5. 25V 输出电压VoVSStoVDD 总功耗 PD(TA=+85℃ )60Mw温度 工作温度-20℃to+85 c 存储温度-40℃to+125℃第15页4?VVBrail : hkw rf@163 ccmBrail : hkw rf@163 ccm0 Q : 2843823762022年-2023年1ROAM1RX <AB:&*那么丁BLLgIXTI IXTO T1 TOIT VPXI X2*V\r玉2022年-2023年迹跑4无线模块 2. 4G高速无线数传模块说明书一、产品特性2. 4GHz全球开放ISM频段,最大OdBm发射功率,免许可证使用支持六路通道的数据接收低工作电压:1.9〜3. 6V低电压工作高速率:2Mbps,山于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率)多频点:125频点,满足多点通信和跳频通信需要超小型:内置2. 4GHz天线,体积小巧,15x29mm (包括天线)低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。
NRF24L01功能使用文档
NRF24L01使用文档基于c8051f330单片机目录芯片简介 (3)1 NRF24L01功能框图 (4)2 NRF24L01状态机 (5)3 Tx与Rx的配置过程 (7)3.1 Tx 模式初始化过程 (7)3.2 Rx模式初始化过程 (8)4控制程序详解 (9)4.1 函数介绍 (9)4.1.1 uchar SPI_RW(uchar byte) (9)4.1.2 uchar SPI_RW_Reg (uchar reg, uchar value) (10)4.1.3 uchar SPI_Read (uchar reg); (10)4.1.4 uchar SPI_Read_Buf (uchar reg, uchar *pBuf, uchar bytes); (11)4.1.5 uchar SPI_Write_Buf (uchar reg, uchar *pBuf, uchar bytes); (11)4.1.6 void RX_Mode(void) (12)4.1.7 void TX_Mode(void) (13)4.2 NRF24L01相关命令的宏定义 (13)4.3 NRF24L01相关寄存器地址的宏定义 (14)5 实际通信过程示波器图 (16)1)发射节点CE与IRQ信号 (17)2)SCK与IRQ信号(发送成功) (18)3)SCK与IRQ信号(发送不成功) (19)芯片简介NRF24L01是NORDIC公司最近生产的一款无线通信通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst 协议。
可以实现点对点或是1对6的无线通信。
无线通信速度可以达到2M(bps)。
NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。
嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。
nRF24L01中文手册
迅ቤተ መጻሕፍቲ ባይዱ科技
描述 20 脚 QFN 4*4mm, RoHS&SS-00259compliant
评估套件 表 2、nRF24L01 分类信息
版本 D 1.0
结构方框图:
技
科
通
迅 图 1 nRF24L01 及外部接口
COPYRIGHT ©2007 迅通科技 TEL 北京:+86 10 64390486 深圳:+86 755 26675941
时钟信号
CRC
循环冗余校验
CSN
片选非
ESB
增强型 ShockBrustTM
GFSK
高斯键控频移
IRQ
中断请求
ISM
工业—科学—医学
LNA LSB LSByte Mbps MCU MISO MOSI
低噪声放大 最低有效位 最低有效字节 兆位/秒 微控制器 主机输入从机输出 主机输出从机输入
技
MSB MSByte
2
引脚及其功能: 引脚 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
迅通科技
名称 CE CSN SCK MOSI MISO IRQ VDD VSS XC2 XC1 VDD_PA ANT1 ANT2 VSS VDD IREF VSS VDD DVDD VSS
nrf24l01可以设置为以下几种主要的模式模式pwrupprimrxcefifo寄存器状态接收模式111发送模式101数据在txfifo寄存器中发送模式1010停留在发送模式直至数据发送完待机模式ii101txfifo为空待机模式i10无数据传输掉电模式0表6nrf24l01主要工作模式关于nrf24l01io脚更详细的描述请参见下面的表7
NRF24L01无线模块
XL24L01P‐D01模块手册尊敬的客户:您好,感谢您选用本公司的无线模块,为了更快更好的使用此产品,请您仔细阅读本使用说明。
无线传输距离受空间环境,输出速率,天线等因素影响,本公司标注的距离为基于本公司的测试硬件的开阔地测试距离,仅供参考。
深圳市汇睿微通科技开发有限公司为专业无线模块制造厂商,具有多年的无线模块开发设计和制造生产能力,使用中有任何技术问题,请及时联系本公司的技术支持!一:模块简介XL24L01P‐D01是采用挪威NORDIC公司的nrf24L01p 2.4G无线收发IC设计的一款高性能2.4G无线收发模块,采用GFSK调制,工作在2400‐2483M的国际通用ISM频段,最高调制速率可达2MBPS。
XL24L01P-D01集成了所有与RF协议相关的高速信号处理部分,如:自动重发丢失数据包和自动产生应答信号等,模块的SPI接口可以利用单片机的硬件SPI口连接或用单片机的I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
模块大小32*15.2mm,2.54mm间距的双排插针接口,使用内置PCB天线设计,开阔地1MBPS速率下,收发10个字节的数据量测试距离最远约70米左右。
1.1 模块尺寸:管脚次序 管脚定义 功能描述1 GND 电源地(方形焊盘)2 VIN 输入电源(3.0—3.3V)3 CE 工作模式选择,RX或TX模式选择4 CSN SPI使能,低有效5 SCK SPI时钟6 MOSI SPI输入7 MISO SPI输出8 IRQ 中断输出二:模块功能2.1 特性z工作频率 2400‐2483M,共125个工作频道, 符合国际通用ISM法规,z FSK/GSK调制z支持2M的高速数据传输,减少发射时间,降低平均功耗。
z当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了平均功耗收 z自动重发功能,自动检查和重发丢失的数据包,重发时间及重发次数可软件控制z自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程z内置硬件CRC检错和点对多点通信地址控制z数据包传输错误计数器及载波检测功能可用于跳频设置z可同时设置六路接收通道地址,可选择性的打开接收通道z自动存储未收到的应答信号的数据包2.2 应用范围无线遥控机器人控制家庭自动化智能玩具游戏无线控制器无线传感器无线语音2.3 电气特性Item Parameters Min TypMax UnitCondition 1 Supply1.1 Supply voltage 1.9 3.6 V2 Current Consumption2.1 sleep mode 0.9 uA2.2 Standby mode 32 uA2.3 Rx states 11.8 mA @1MBPS2.4Tx states 11.3 mA @0dBm2.5 7 mA @‐18dBm3 Transmitter Part3.1 Tx data rate 250 1000 2000 Kbps3.2 Frequency range 2400 2483.5MHz3.3 Output power ‐18 0 4 dBm3.4 Spurious emissions25MHz ~ 1GMz47 ~ 74, 87.5 ~ 118, 174 ~230,470 ~ 862MHz1800 ~ 1900MHzAt 2nd‐RF and 3rd‐RFOtherwise above 1GHz‐36‐54‐47‐41‐30dBmdBmdBmdBmdBm4 Receiver Part4.1 Receiver sensitivity ‐85 dBm@1000Kbps4.2 Saturation ‐23 dBm4.3 Adjacent channel rejection 21 dB Desired channel 3dB above thesensitivity limit.1MHz channelspecing4.4 Alternate channel rejection 30 dB Desired channel 3dB above thesensitivity limit.1MHz channelspecing工作范围ParametersMin Max UnitSupply Voltage 1.9 3.6 V Temperature ambient ‐20 60 ℃三:使用注意事项3.1 静电无线模块为静电敏感器件,使用时请注意静电防护,特别是在干燥的冬季 尽量不用收去触摸模块上的器件,以免造成不必要的损坏。
NRF24L01配置说明
USB串口无线模块的配置说明带USB接口的模块直接插电脑进行配置,不带USB接口的模块得借助USB转串口进行配置;(如下图所示)1、USB转串口模块以及带USB的无线驱动模块需要安装CH341驱动;(文件在“CH341>>DRIVER>SETUP.EXE)2、波特率默认设置为9600(带USB与不带USB的),波特率的选择范围为:2400-115200,具体,请看配置参数对应的描述;3、配置时,必须在断电的情况下,插上跳线帽,再从新上电;(注意:不能上着电的情况下,插跳线帽!)4、配置完成之后,必须得把跳线帽拔掉;(注意:必须得在断电的情况下拔,然后,再重新上电!)5、配置的格式为8个字节:“0X00+每个数据包的长度+0X01+频道+0X02+工作模式+单向/双向运行模式+‘波特率’”注意:1、必须插上跳线帽进行配置,配置完之后,必须拔掉跳线帽才能正常使用;(配置时,在上电前就得插上跳线帽;当然,正常使用时也得在断电的情况下,拔跳线帽,再重新上电)2、串口调试助手发送数据的格式为:十六进制;3、USB转串口模块的TX,RX与NRF24L01驱动模块(无USB的)的TX,RX要交叉相连,即一方的TX与另外一方的RX相连,然后,一方的RX与另外一方的TX相连;4、两个模块的数据长度,频道得设置成一样,否则工作不正常;数据的长度选择范围:(单向工作模式最小为1个字节,最大为32个字节)(双向工作模式最小为2个字节,最大为32个字节);频道的选择范围为:从0X00到0X7F 选择一个;(即0-127,从0开始,2的6次方)5、同一个实验室的,为了不互相影响,得把频道设置成不一样,否则会互相干扰,;6、“工作模式”只分两种:TX模式(0X01)和 RX模式(0X00),注意:两个模块的工作模式不能一样,必须得其中一个模块为TX模式,另外一个模块为RX模式,否则,不能实现两个模块的无线通信;7、单向/双向运行模式,0X01:模块运行在双向通信模式,0X00:模块运行在单向通信模式;双向模式相对单向模式而言,双向模式中,可以通过发送AT 指令来切换方向,具体请看双向模式的使用要求;8、波特的选择,从小到大分别为:2400(0X07),4800(0X08), 9600(0X00),14400(0X01), 19200(0X02), 38400(0X03), 56000(0X04), 57600(0X05), 115200(0X06);9、数据的长度得选择适中,串口调试助手(单片机)的发送频率也得选择适中;单向运行模式:(注意:配置的时候记得插上跳线帽,否则,配置不成功!)(图1) (图2) 配置参数为:0X00+0X06+0X01+0X78+0X02+0X01+0X00+0X06(如图1所示)这组配置参数的意思是:单个数据包的数据长度为 6个字节,频道选择120(0X78),让模块的工作模式为TX模式(0X01),模块运行在单向通信模式(0X00),波特率将选择115200(0X06)。
NRF24l01使用手册函数介绍
NRF24l01使用手册以及函数指令寄存器介绍芯片简介NRF24L01 是NORDIC 公司最近生产的一款无线通信通信芯片,采用FSK 调制,内部集成NORDIC 自己的Enhanced Short Burst 协议。
可以实现点对点或是1 对 6 的无线通信。
无线通信速度可以达到2M(bps)。
NORDIC 公司提供通信模块的GERBER 文件,可以直接加工生产。
嵌入式工程师或是单片机爱好者只需要为单片机系统预留5 个GPIO,1 个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU 系统构建无线通信功能。
NRF24L01功能框图NRF24L01 的框图如Fig.1 所示,从单片机控制的角度来看,我们只需要关注Fig.1 右面的六个控制和数据信号,分别为CSN、SCK、MISO、MOSI、IRQ、CE。
CSN:芯片的片选线,CSN 为低电平芯片工作。
SCK:芯片控制的时钟线(SPI 时钟)MISO:芯片控制数据线(Master input slave output)MOSI:芯片控制数据线(Master output slave input)IRQ:中断信号。
无线通信过程中MCU 主要是通过IRQ 与NRF24L01 进行通信。
CE:芯片的模式控制线。
在CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。
NRF24L01状态机NRF24L01 的状态机见Fig.2 所示,对于NRF24L01 的固件编程工作主要是参照NRF24L01 的状态机。
主要有以下几个状态Power Down Mode:掉电模式Tx Mode:发射模式Rx Mode:接收模式Standby-1Mode:待机1 模式Standby-2 Mode:待机2 模式上面五种模式之间的相互切换方法以及切换所需要的时间参照Fig.2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm2.2Mbps,传输速率高3.功耗低,等待模式时电流消耗仅22uA4.多频点(125个),满足多点通信及跳频通信需求5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)6.工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD按照时序由SPI 口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。
如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD 从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。
最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。
当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ 变低,以便通知MCU去取数据。
若此时自动应答开启,接收方则同时进入发射状态回传应答信号。
最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
二、模块电气特性参数数值单位供电电压5V最大发射功率0dBm最大数据传输率2Mbps电流消耗(发射模式,0dBm)11.3mA电流消耗(接收模式,2Mbps)12.3mA电流消耗(掉电模式)900nA温度范围-40~+85℃三、模块引脚说明管脚符号功能方向1GND电源地2IRQ中断输出O3MISO SPI输出O4MOSI SPI输入I5SCK SPI时钟I6NC空7NC空8CSN芯片片选信号I9CE工作模式选择I10+5V电源四、模块与AT89S52单片机接口电路注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU 模块时,请将Nrf24L01通讯模块每个端口(MOSI 、SCK 、CSN 和CE )接4.7K 的排阻上拉到VCC 增强其驱动能力(如下图:)。
若使用其它单片机与Nrf24L01通讯模块相连时请串联2K 电阻。
五、工作模式控制工作模式由CE 和PWR_UP 、PRIM_RX 两寄存器共同控制:模式 PWR_UP PRIM_RX CE FIFO 寄存器状态 接收模式 1 1 1 -发射模式 1 0 11数据存储在FIFO 寄存器中,发射所有数据VCC P1.0 P1.1 CN CN P1.2 P1.3 P1.4 P3.2 GNDAT89S52MCU 模块+5V CE CSN CN CN SCK MOSI MISO IRQ GNDNrf24L01通讯模块发射模式100→12数据存储在FIFO寄存器中,发射一个数据待机模式II101TX FIFO为空待机模式I1-0无正在传输的数据掉电模式0---注1:进入此模式后,只要CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据数据发射完毕,之后进入待机模式II。
注2:正常的发射模式,CE端的高电平应至少保持10us。
24L01将发射一个数据包,之后进入待机模式I。
六、数据和控制接口通过以下六个引脚,可实现模块的所有功能:①IRQ(低电平有效,中断输出)②CE(高电平有效,发射或接收模式控制)③CSN(SPI信号)④SCK(SPI信号)⑤MOSI(SPI信号)⑥MISO(SPI信号)通过SPI接口,可激活在数据寄存器FIFO中的数据;或者通过SPI命令(1个字节长度)访问寄存器。
在待机或掉电模式下,单片机通过SPI接口配置模块;在发射或接收模式下,单片机通过SPI接口接收或发射数据。
1.SPI指令所有的SPI指令均在当CSN由低到高开始跳变时执行;从MOSI写命令的同时,MISO实时返回24L01的状态值;SPI指令由命令字节和数据字节两部分组成。
SPI命令字节表2.SPI时序SPI读写时序见下面两图。
在写寄存器之前,一定要进入待机模式或掉电模式。
其中,Cn——SPI 指令位;Sn——状态寄存器位;Dn——数据位(低字节在前,高字节在后;每个字节中高位在前)SPI读时序SPI写时序七、寄存器内容及说明地址(十六进制)寄存器位复位值类型说明00CONFIG配置寄存器Reserved70R/W默认为0MASK_RX_DR60R/W 可屏蔽中断RX_RD1:中断产生时对IRQ没影响0:RX_RD中断产生时,IRQ引脚为低MASK_TX_DS50R/W 可屏蔽中断TX_RD1:中断产生时对IRQ没影响0:TX_RD中断产生时,IRQ引脚为低MASK_MAX_RT40R/W 可屏蔽中断MAX_RT1:中断产生时对IRQ没影响0:MAX_RT中断产生时,IRQ 引脚为低EN_CRC31R/W CRC使能。
如果EN_AA中任意一位为高,则EN_CRC为高。
CRCO20R/W CRC校验值:0:1字节1:2字节PWR_UP10R/W0:掉电 1:上电PRIM_RX00R/W0:发射模式 1:接收模式八、模块编程控制1.ShockBurst TM发射模式①设置PRIM_RX为低。
②通过SPI接口,将接收节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块,写TX_PLD时,CSN 必须一直置低。
③置CE为高,启动发射。
CE高电平持续时间至少为10us。
④ShockBurst TM发射模式:系统上电启动内部16MHz时钟数据打包数据发射⑤若启动了自动应答模式(ENAA_P0=1),则模块立即进入接收模式(NO_ACK已设置)。
如果接收到应答信号,则表示发射成功,TX_DS置高且TX FIFO中的有效数据被移出;如果没有接收到应答信号,则自动重发(自动重发已设置);如果自动重发次数超过最大值(ARC),MAX_RT置高,在TX FIFO中的数据不被移出。
当MAX_RT和TX_DS置高时,IRQ激活。
只有重新写状态寄存器(STATUS)才能关闭IRQ。
如果重发次数达到最大后,仍没有接收到应答信号,在MAX_RT中断清除之前,不会再发射数据。
PLOS_CNT 计数器会增加,每当有一个MAX_RT中断产生。
⑥如果CE置低,则系统进行待机模式I,否则发送TX FIFO寄存器中的下一个数据包。
当TX FIFO 中的数据发射完,CE仍为高时,系统进入待机模式II。
⑦在待机模式II下,CE置低,则进入待机模式I。
2.ShockBurst TM接收模式①设置PRIM_RX为高,配置接收数据通道(EN_RXADDR)、自动应答寄存器(EN_AA)和有效数据宽度寄存器(RX_PW_PX)。
②置CE为高,启动接收模式。
③130us后,模块检测空中信号,④接收到有效的数据包后(地址匹配、CRC检验正确),数据储存在RX FIFO中,RX_DR置高。
⑤如果启动了自动应答功能,则发送应答信号。
⑥MCU置CE为低,进入先机模式I。
⑦MCU可通过SPI接口将数据读出⑧模块准备好进入发射模式或接收模式或待机模式。
RF通道频率指的是nRF24L01所使用的中心频率,该频率范围从2.400GHz到2.525GHz,以1MHz区分一个频点,故有125个频点可使用。
由参数RF_CH确定,公式为:F0 = 2400 + RF_CH(MHz)十、示例程序接收模块与发射模块大部分程序代码相同,如下:1.SPI命令和寄存器配置头文件API.h(根据第六、七两点编写)#ifndef _BYTE_DEF_#define _BYTE_DEF_typedef unsigned char BYTE;#endif// SPI命令#define READ_REG 0x00 //读第0个寄存器#define WRITE_REG 0x20 //写第0个寄存器#define RD_RX_PLOAD 0x61 //在接收模式下使用,读有效数据#define WR_TX_PLOAD 0xA0 //在发送模式下使用,写有效数据#define FLUSH_TX 0xE1 //在发送模式下使用,清TX FIFO寄存器#define FLUSH_RX 0xE2 //在接收模式下使用,清RX FIFO寄存器#define REUSE_TX_PL 0xE3 //发送方使用,重复发送最后的数据#define NOP 0xFF //空操作,用于读状态寄存器STATUS的值// nRF24L01寄存器地址#define CONFIG 0x00 //配置寄存器,8bit#define EN_AA 0x01 //自动应答设置寄存器,8bit#define EN_RXADDR 0x02 //接收地址设置寄存器,8bit#define SETUP_AW 0x03 //地址宽度设置寄存器,8bit#define SETUP_RETR 0x04 //自动重复发送设置寄存器,8bit#define RF_CH 0x05 //RF通道寄存器,8bit#define RF_SETUP 0x06 //RF设置寄存器,8bit#define STATUS 0x07 //状态寄存器,8bit#define OBSERVE_TX 0x08 //发送观测寄存器,8bit#define CD 0x09 //载波检测寄存器,8bit,#define RX_ADDR_P0 0x0A //接收地址数据通道0,40bit#define RX_ADDR_P1 0x0B#define RX_ADDR_P2 0x0C#define RX_ADDR_P3 0x0D#define RX_ADDR_P4 0x0E#define RX_ADDR_P5 0x0F#define TX_ADDR 0x10 //发送地址.发送方使用,40bit#define RX_PW_P0 0x11 //通道0接收的有效数据字节长度(1-32字节),8bit#define RX_PW_P1 0x12#define RX_PW_P2 0x13#define RX_PW_P3 0x14#define RX_PW_P4 0x15#define FIFO_STATUS 0x17 //FIFO状态寄存器,8bit2.SPI操作头文件(与单片机的接口设置在此头文件中)#define uchar unsigned char#define TX_ADR_WIDTH 5 //地址长度为5个字节#define TX_PLOAD_WIDTH 20 //数据长度为20个字节uchar const TX_ADDRESS[TX_ADR_WIDTH] = {0xE7,0xE7,0xE7,0xE7,0xE7};char rx_buf[TX_PLOAD_WIDTH]; //接收缓冲区uchar flag; //标志位int test[12];#define CE P0_0 //芯片使能:Chip Enable#define CSN P0_1 //片选信号:Chip Select Not#define SCK P1_2 //串行时钟信号:Serial Clock#define MOSI P0_3 //主发从收:Master In Slave Out#define MISO P0_4 //主收从发:Master Out Slave In#define IRQ P3_2 //中断查询:Interrupt Requestuchar bdata sta;sbit RX_DR = sta^6;sbit TX_DS = sta^5;sbit MAX_RT = sta^4;uchar SPI_RW(uchar byte)//写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据{uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) //先写字节的高位,再写低位{MOSI = (byte & 0x80); //MOSI取byte最高位byte = (byte << 1); //byte左移一位SCK = 1; //SCK从高到低时开始写入byte |= MISO;//获取MISO位.从MOSI写命令的同时,MISO返回nRF24L01的状态及数据SCK = 0;}return(byte);}uchar SPI_RW_Reg(BYTE reg, BYTE value)//将字节value写入寄存器reg{uchar status;CSN = 0; //CSN为0时,才能进行SPI读写status = SPI_RW(reg); //选择寄存器regSPI_RW(value); //写字节value到该寄存器CSN = 1; //终止SPI读写return(status);}{BYTE reg_val;CSN = 0; //CSN为0时,才能进行SPI读写SPI_RW(reg); //选择寄存器regreg_val = SPI_RW(0); //写0,什么操作也不进行,仅仅为了读寄存器状态CSN = 1; //终止SPI读写return(reg_val);}uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)//从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址{uchar status,byte_ctr;CSN = 0; //CSN为0时,才能进行SPI读写status = SPI_RW(reg); //选择寄存器reg并返回其状态字for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)pBuf[byte_ctr] = SPI_RW(0); //从寄存器读数据CSN = 1; //终止SPI读写return(status); //返回状态值}uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)//将数据写入寄存器,如TX数据,RX/TX地址等. {uchar status,byte_ctr;CSN = 0; //CSN为0时,才能进行SPI读写status = SPI_RW(reg); //选择寄存器reg并返回其状态字for(byte_ctr=0; byte_ctr<bytes; byte_ctr++)SPI_RW(*pBuf++); //写数据到寄存器CSN = 1; //终止SPI读写return(status); //返回状态值}//接收模式初始化:设置RX地址,RX数据宽度,RF通道,速率,低噪声放大器增益//设置完之后,将CE置高,准备好接收数据void RX_Mode(void){SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);// 写 TX_Address 到 nRF24L01SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 自动重发延时:500us + 86us;重发次数:10次SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);//将地址TX_ADDRESS写入寄存器0的数据通道0 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //ENAA_P0=1,数据通道0自动应答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //ERX_P0=1,使能SPI_RW_Reg(WRITE_REG + RF_CH, 40); //40个通信频段SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F);//速率为2Mbps,发送功率为0dBm,低噪声放大器增益为1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);//PRIM_RX=1,接收方;PWR_UP=1;CRC检验字为2字节;}//发送模式初始化:设置发送地址,设置发送的数据,设置接收方地址,RF通道,速率等,与接收类似void TX_Mode(void){SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);SPI_RW_Reg(WRITE_REG + RF_CH, 40);SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);}void show_status(void) //显示状态寄存器的值{test[0] = SPI_Read(EN_AA); //0x01test[1] = SPI_Read(EN_RXADDR); //0x01test[2] = SPI_Read(SETUP_AW); //0x03,5个字节test[3] = SPI_Read(SETUP_RETR); //0x1atest[4] = SPI_Read(RF_CH); //0x28test[5] = SPI_Read(RF_SETUP); //0x0ftest[6] = SPI_Read(RX_ADDR_P2);test[7] = SPI_Read(RX_ADDR_P3);test[8] = SPI_Read(RX_ADDR_P4);test[9] = SPI_Read(RX_ADDR_P5);test[10] = SPI_Read(RX_PW_P0); //0x14test[11] = SPI_Read(STATUS);}void init_io(void){CE = 0; //待机CSN = 1; //SPI禁止读写SCK = 0;}void Inituart(void)//设置串口工作模式TMOD |= 0x20; //定时器1工作在方式2,8位自动重装模式TL1 = 0xfd; //波特率为9600TH1 = 0xfd;SCON = 0x50; //模式1,8位数据TR1 = 1; //启动定时器1TI=1;}void init_int0(void)//外部中断设置{EA=1; //允许全局中断ES=1; //开串行口中断EX0=1; //允许外部中断0}void delay_ms(unsigned int x) //毫秒级延时{unsigned int i,j;i=0;for(i=0;i<x;i++){j=108;while(j--);}}3.发送模块主函数(向接收模块发射数据“abcdefg”,中断方式)void main(void){int i;init_io(); //IO端口设置Inituart(); //串口设置init_int0(); //外部中断0设置for(i=0;i<7;i++) //待发的数据tx_buf,发送的数据为”abcdefg”七个字母tx_buf[i] = 'a'+i;while(1){CE = 0; //Standby-1模式TX_Mode(); //发送设置CE = 1; //启动发送模式delay_ms(20);CE = 0; //Standby-1模式delay_ms(1000);}}//中断函数//如果RX_DR=1,则读取数据,之后清除标志位;//如果TX_DS或MAX_RT为1,则仅清除中断标志位void ISR_int0(void) interrupt 0{sta=SPI_Read(STATUS); //读状态寄存器STATUSif(RX_DR) //如接收到数据,则中断{SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据flag=1; //标志位置高}if(MAX_RT) //重发中断达到最大数SPI_RW_Reg(FLUSH_TX,0); //清除TX FIFO寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除RX_DR,TX_DS和MAX_RT中断标志位}4.接收模块主函数(接收并在串口输出,同时输出状态寄存器的值,使用查询方式)void main(void){int i;init_io(); //IO端口设置Inituart(); //串口设置init_int0(); //外部中断0设置CE=0; //Standby-1模式RX_Mode(); //设置接收模式CE = 1; //准备接收数据while(1){sta=SPI_Read(STATUS);if(RX_DR) //接收到数据{SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据for(i=0;i<7;i++)printf("%c ",rx_buf[i]); //通过串口发送接收到的数据printf("\n");show_status(); //输出状态寄存器的值,可不用此操作for(i=0;i<12;i++)printf("%x ",test[i]);printf("\n");delay_ms(10);}if(MAX_RT) //重发中断达到最大数SPI_RW_Reg(FLUSH_TX,0); //清除TX FIFO寄存器} }。