NRF24L01详细教程..
- 格式:doc
- 大小:4.76 MB
- 文档页数:17
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 生产的工作在2.4GHz~2.5GHz 的ISM 频段
的单片无线收发器芯片。
无线收发器包括:频率发生器、增强型SchockBurst 模式控制器、功率放大器、晶体振荡器、调制器和解调器。
输出功率频道选择和协议的设置可以通过SPI 接口进行设置。
几乎可以连接到各种单片机芯片,并完成无线数据传送工作。
极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
nrf24l01 模块使用教程
NRF24L01 与控制器的通信采用的SPI 通信协议,这个协议具体细节
大家可能都懂,不懂的可以之间百度;他们的通信模型是这样的:。
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 简易教程先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。
我们所写的教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形式。
3、把接收到的数据传送到PC 进行查看。
4、发送端每隔大约1.5 秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY 方式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
我们使用的方式是画PCB 的方式呢,若您自己做了接口板子,那么您可以对比下一呢,O(∩_∩)O!我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。
我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。
NRF24L01详细教程近来课程的项目需要用到NRF24L01,用来做基本的收发,虽然资料拿到不少,但是,很多资料并不是很清晰、所带的例程并不够简洁或有不少冗余的部分,再加上对应的中文数据手册部分没翻译出来,翻译出来的不够有条理,很多地方模糊,甚至关键的地方看一两次还看不出来,导致了在学NRF24L01时花费了较多时间,所以,学完NRF24L01后,萌生了写个尽量清晰的教程的想法。
教程中的例程虽然是库开发方式,但基本都是最底层的操作才用到库函数譬如发一字节数据、GPIO置位等,虽然用的STM32,但我在看其他板子的例程时,发觉内容与流程都是差不多的,只是不同板引脚不同所导致的引脚配置的不同,不管用什么方式开发,用什么芯片,了解清楚NRF24L01如何配置,了解清楚其收发流程,基本上就会开发了,所以此文档虽然写的是以STM32为例,但看完此文档用NRF24L01基本也没什么大问题了。
教程说明:这教程是基于STMF103ZET6的,是野火的板子,例程也是从野火提供修改例程得来,用的是库开发的方式。
学习NRF24L01的步骤:1.学习SPI,SPI就是NRF24L01传送数据到单片机的一种协议,类似于USB,当然USB还是比较有难度的。
2.了解NRF24L01相关寄存器,结合中文数据手册了解NRF24L01的基本配置,收发数据前后的操作(如何启动发送接收、寄存器清空、标志位重置等)。
3.分析具体代码SPI的简介:具体的SPI教程,大家可以去野火的教程进行学习,在此只是简略介绍一下,SPI是一种一对多协议:一个主机(MCU)对应对多个从机,可以分时与多个从机通讯SPI 总线包含4 条总线,分别为SS、SCK、MOSI、MISO,其含义分别为SS:Slave Select,片选信号线,主机借此信号线选择一个从机,低电平有效。
MOSI:Master Output,Slave Input,主机数据从此线输出到从机,数据方向从主机到从机。
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使用参考资料1、内部组成图
NRF24L01的状态:
Power Down Mode:掉电模式
Tx Mode:发射模式
Rx Mode:接收模式
Standby-1Mode:待机1模式
Standby-2Mode:待机2模式
2、NRF24L01的SPI读写时序:
3、编程基本思路:
拉低CSN,使能芯片,配置芯片各个参数。
配置参数在Power Down状态中完成。
如果是Tx模式,填充Tx FIFO。
配置完成后,通过CE与CONFIG中的PWR_UP与PRIM_RX参数确定24L01要切换的状态。
Tx Mode:PWR_UP=1;PRIM_RX=0;CE=1(保持超过10us就可以);
Rx Mode:PWR_UP=1;PRIM_RX=1;CE=1;
IRQ引脚会在以下三种情况变低:
Tx FIFO发完并且收到ACK(使能ACK情况下)
Rx FIFO收到数据
达到最大重发次数
将IRQ接到外部中断输入引脚,通过中断程序进行处理。
4、控制命令
命令字:由高位到低位(每字节)。
数据字节:低字节到高字节,每一字节高位在前。
5、相关寄存器地址宏定义
5、引脚功能
6、三个数据
7、管脚定义
8、设计参考图。
1.源程序开发环境建立1.1程序编译软件编译软件用keil C51,打开安装文件,一路点击下一步即可完成。
1.2程序下载软件使用STC ISP下载软件。
2.源程序文件整体结构工程中,只有一个main.c文件,所有程序都写在这个文件里面。
Reg51.h是包含的头文件。
是不是非常简单!3.源程序执行流程无线数据处理程序:串口数据处理程序:4.串口配置函数void serial_open(void){SCON = 0X50;AUXR |= 0X04;TL2 = 0Xc0; // 9600TH2 = 0Xfd;AUXR|=0X10;}此串口配置函数,利用单片机内部的定时器2作为波特率发生器。
共用到4个寄存器:SCON AUXR TL2 TH2SM0和SM1的位决定串口工作的4种方式:程序中,SCON=0X50,即SM0=0 SM1=1,即串口工作在“方式1”;REN=1,允许串口接收数据。
TL2和TH2是定时器2的高位和低位寄存器。
程序中,首先AUXR|=0X40,最后AUXR|=0X10。
即首先把T2x12置1,然后把T2R置1。
即首先把定时器2设置为1T模式,然后把定时器打开。
5.串口发送数据函数void senddata(uchar data_buf){SBUF = data_buf;while(!TI);TI = 0;}用到了寄存器SBUF和寄存器SCON中的TI位。
SBUF寄存器是串口收发数据缓存寄存器,放到这个寄存器中的数据,会通过串口发送出去,接收到的串口数据,也会放到这个寄存器中。
也就是串口接收和发送都是使用这个寄存器。
程序中,SBUF=data_buf,就是把data_buf给了SBUF,单片机自动把SBUF里面的数据发送到串口。
TI是串口发送数据完成标志位,当串口发送完一个数据,此位置1,置位后,需要通过软件清0。
所以通过while(!TI),来检测TI位,达到检测串口是否发送完数据的目的。
NRF24L01 简易教程先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。
我们所写的教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形式。
3、把接收到的数据传送到PC 进行查看。
4、发送端每隔大约1.5 秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY 方式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
我们使用的方式是画PCB 的方式呢,若您自己做了接口板子,那么您可以对比下一呢,O(∩_∩)O!我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。
我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。
NRF24L01详细教程NRF24L01是一款低功耗2.4GHz无线收发模块,广泛应用于各种无线通信项目中。
它可以使微控制器与其他设备进行无线通信,例如Arduino 与Arduino之间的通信、Arduino与无线传感器节点的通信等。
下面是一个详细的NRF24L01教程。
1.NRF24L01的基本介绍NRF24L01是一款由Nordic Semiconductor公司生产的低功耗无线收发模块,采用2.4GHz频段,具有快速的通信速率、低功耗、高阻塞容限等特点。
它可以与各种微控制器(如Arduino)进行通信,是一种理想的无线通信解决方案。
2.NRF24L01的物理连接在开始使用NRF24L01之前,需要将其与微控制器进行物理连接。
NRF24L01模块有8个引脚,分别是:VCC、GND、CE、CSN、SCK、MOSI、MISO和IRQ。
其中,VCC和GND连接到供电电源,CE和CSN连接到微控制器的任意数字引脚,而SCK、MOSI和MISO连接到SPI总线。
3.NRF24L01的库文件安装在编程之前,需要安装与NRF24L01相关的库文件。
可以在Arduino IDE的库管理器中并安装"nRF24L01"库。
安装完成后,就可以在程序中引用该库文件了。
4.NRF24L01的基本设置在程序中,首先需要进行NRF24L01的基本设置。
首先,在程序开头引入"NRF24L01.h"库文件。
然后,在setup(函数中,通过调用"NRF24L01"类的对象进行初始化设置。
设置包括设置CE与CSN引脚、设置通信频率、设置收发地址等。
5.NRF24L01的通信在进行基本设置之后,可以开始进行NRF24L01的通信。
通信包括发送数据和接收数据两个方面。
对于发送数据,可以使用"NRF24L01"类的write(函数将数据发送给另外一个NRF24L01模块;对于接收数据,则可以使用available(函数判断是否有数据接收到,并使用read(函数读取数据。
nrf24l01的配置流程
TX初始化过程
初始化步骤 24L01相关寄存器
1)写 Tx 节点的地址 TX_ADDR
2)写Rx 节点的地址(主要是为了使能Auto Ack)RX_ADDR_P0
3)使能 AUTO ACK EN_AA
4)使能 PIPE 0 EN_RXADDR
5)配置自动重发次数 SETUP_RETR
6)选择通信频率 RF_CH
7)配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP
8 ) 选择通道0 有效数据宽度 Rx_Pw_P0
9)配置 24L01 的基本参数以及切换工作模式 CONFIG Rx初始化过程
RX初始化步骤 24L01相关寄存器
1)写 Rx 节点的地址 RX_ADDR_P0
2)使能 AUTO ACK EN_AA
3)使能 PIPE 0 EN_RXADDR
4)选择通信频率 RF_CH
5) 选择通道0 有效数据宽度 Rx_Pw_P0
6)配置发射参数(低噪放大器增益、发射功率、无线速率RF_SETUP
7)配置 24L01 的基本参数以及切换工作模式 CONFIG
一对一通讯还是很简单的,4个配置一定要配置对,地址,信道,通讯频率,传输速率一定要一致。
先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。
我们所写教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形式。
3、把接收到的数据传送到PC 进行查看。
4、发送端每隔大约1.5 秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY 方式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。
我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。
NRF24L01详细教程近来课程的项目需要用到NRF24L01,用来做基本的收发,虽然资料拿到不少,但是,很多资料并不是很清晰、所带的例程并不够简洁或有不少冗余的部分,再加上对应的中文数据手册部分没翻译出来,翻译出来的不够有条理,很多地方模糊,甚至关键的地方看一两次还看不出来,导致了在学NRF24L01时花费了较多时间,所以,学完NRF24L01后,萌生了写个尽量清晰的教程的想法。
教程中的例程虽然是库开发方式,但基本都是最底层的操作才用到库函数譬如发一字节数据、GPIO置位等,虽然用的STM32,但我在看其他板子的例程时,发觉内容与流程都是差不多的,只是不同板引脚不同所导致的引脚配置的不同,不管用什么方式开发,用什么芯片,了解清楚NRF24L01如何配置,了解清楚其收发流程,基本上就会开发了,所以此文档虽然写的是以STM32为例,但看完此文档用NRF24L01基本也没什么大问题了。
教程说明:这教程是基于STMF103ZET6的,是野火的板子,例程也是从野火提供修改例程得来,用的是库开发的方式。
学习NRF24L01的步骤:1.学习SPI,SPI就是NRF24L01传送数据到单片机的一种协议,类似于USB,当然USB还是比较有难度的。
2.了解NRF24L01相关寄存器,结合中文数据手册了解NRF24L01的基本配置,收发数据前后的操作(如何启动发送接收、寄存器清空、标志位重置等)。
3.分析具体代码SPI的简介:具体的SPI教程,大家可以去野火的教程进行学习,在此只是简略介绍一下,SPI是一种一对多协议:一个主机(MCU)对应对多个从机,可以分时与多个从机通讯SPI 总线包含4 条总线,分别为SS、SCK、MOSI、MISO,其含义分别为SS:Slave Select,片选信号线,主机借此信号线选择一个从机,低电平有效。
MOSI:Master Output,Slave Input,主机数据从此线输出到从机,数据方向从主机到从机。
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)。
先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。
我们所写教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形式。
3、把接收到的数据传送到PC 进行查看。
4、发送端每隔大约1.5 秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY 方式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。
我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。
为此我们的设计原理图如下:包含单片机最小系统、供电系统、下载程序接口、5V 转3.3V 电路、NRF24L01 模块接口。
并且全部引出单片机的IO 口,另外还加了5 个电源输出接口,为扩展使用。
还包括了电源指示LED 以及一个IO 口独立控制的LED,这个独立控制的LED用于NRF24L01 接收成功闪烁指示。
为了保证系统的稳定性,在设计中添加了两个滤波电容。
上面PCB 的背面有个小芯片和两个0805 的元件,他们是什么呢?他们就是AMS1117-3.3V 和两个贴片的滤波电容,为NRF24L01 提供3.3V 电源的电源转换部分。
NRF24L01 是NORDIC 公司最近生产的一款无线通信通信芯片,采用FSK 调制,内部集成NORDIC 自己的Enhanced Short Burst 协议。
可以实现点对点或是1 对 6 的无线通信。
无线通信速度可以达到2M(bps)。
NORDIC 公司提供通信模块的GERBER 文件,可以直接加工生产。
嵌入式工程师或是单片机爱好者只需要为单片机系统预留 5 个GPIO,1 个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU 系统构建无线通信功能。
功能描述:真正的GFSK 单片式收发芯片内置硬件链路层增强型ShockBurstTM 功能自动应答及自动重发功能地址及CRC 检验功能无线速率:1 或2MbpsSPI 接口速率:0~8Mbps125 个可选工作频道很短的频道切换时间,可用于跳频与nRF 24XX 系列完全兼容I/O 可接受5V 电平的输入20 脚QFN 4×4mm 封装极低成本晶振±60ppm使用低成本电感和双面PCB 板低工作电压:1.9~3.6V应用领域:无线鼠标,键盘,游戏机操纵杆无线数据通讯无线门禁安防系统遥控装置遥感勘测智能运动设备工业传感器玩具我们常见的2.4GHz 无线键盘鼠标有些就是使用此无线技术实现的呢。
NRF24L01 引脚功能说明:引脚分别为CSN、SCK、MISO、MOSI、IRQ、CE。
CSN:芯片的片选线,CSN 为低电平芯片工作。
SCK:芯片控制的时钟线(SPI 时钟)MISO:芯片控制数据线(主入从出)MOSI:芯片控制数据线(主出从入)IRQ:中断信号。
无线通信过程中MCU 主要是通过IRQ 与NRF24L01 进行通信。
CE:芯片的模式控制线。
在CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态。
NRF24L01 主要有以下几种工作状态:Power Down Mode:掉电模式Tx Mode:发射模式Rx Mode:接收模式Standby-1Mode:待机1 模式Standby-2 Mode:待机2 模式我们使用的模式主要为发射模式和接收模式。
下面来看看怎么配置这些模式吧。
我们知道NRF24L01 的通信协议为SPI(SPI 的协议请大家查阅相应资料,百度一下你就会有收获哦!),所以我们看看SPI 协议怎么写(IO 口模拟,STC89C52 没有硬件SPI,若您会了STC12C5Axxxx系列的单片机那么您可以使用硬件的SPI,将会更加的方便高效)。
以上为IO 口模拟SPI 的代码,通用于任何拥有可操作IO 的微处理器,需要做好位运算处理。
代码的解释如程序中的注释所示。
非常详细的注释哦!也采用了自己喜欢的编程风格,您也可以借鉴的呢!我们主要是来看看它的配置过程。
我想对于一种芯片它的正确配置是大家最为关心的,有时您也许会为了这些配置问题而伤脑筋。
我们先来看发射模式改怎么配置的。
发射模式的配置顺序:1. 设置TX 节点的地址,也就是发射地址,接收端需与这个地址相同,否则接收不到数据。
寄存器为:TX_ADDR2. 设置RX 节点的地址,也就是接收时的地址,如果是在发射模式下那么功能是为自动应答服务的(AUTO ACK)。
寄存器为:RX_ADDR_P03. 允许AUTO ACK 功能,意思是发送数据后都会等待接收端的应答信号,目的是保证数据正确发送。
寄存器为:EN_AA4. 设置允许的接收通道,总共有6 个通道,我们只使用通道0,其他通道的功能应用大家熟悉了NRF24L01 之后尝试吧。
寄存器为:EN_RXADDR5. 配置自动重发次数。
寄存器为:SETUP_RETR6. 选择通信的频率。
寄存器为:RF_CH7. 设置接收通道0 的接收数据有效宽度,与第四步对应。
寄存器为:RX_PW_P08. 配置发射的参数,主要为低噪放大器增益、发射的功率、无线传输的速率。
寄存器为:RF_SETUP9. 配置收发状态(这时配置为发射模式),CRC 校验模式以及收发状态响应方式。
寄存器为:CONFIGTX 发射模式的配置就是如此了。
我们从第一行看看他是什么意思。
第一步设置TX 的地址,调用了函数SPI_Write_Buf(),它的原型是:WRITE_REG 是写寄存器指令的基地址,TX_ADDR 是相对于基地址的偏移量,WRITE_REG+ TX_ADDR 就是设置发送地址的寄存器了。
若您不明白这些概念,也没关系,知道是这样使用的就行了。
这两个常量是用宏定义来定义的,原型如下:TX_ADDRESS 就是要设置的地址了,NRF24L01 的地址是5 个字节的,也就是40 位。
TX_ADR_WIDTH 就是致命这个地址的长度了。
他们的定义如下:有这些命令和数据,再结合SPI_Write_Buf()这个函数就可以实现对NRF24L01 本地发射地址的设置了。
由SPI_Write_Buf()这个函数我们可以看到,它的写入方式是:先设置将要操作的寄存器地址(这里是本地发射地址寄存器),然后再连续写入地址数据的信息,也就是TX_ADDRESS 数组中的地址数据。
注意接收端的地址与这个必须一模一样。
那么第二句也是跟第一句同理的,操作的方式一模一样,只是选择的地址和写入的数据不一样而已。
如果您想深入了解,那么就是用编译器keil 的跟踪功能查看各个寄存器的意义吧,程序和硬件我们都有配套提供。
后面的寄存器操作使用的函数都是SPI_RW_Reg(),原型如下:可以看到它的功能是选择一个寄存器然后写入这个寄存器的操作命令,是单字节进行的。
那么它是如何操作的呢?它也是SPI_Write_Buf()类似,先选择寄存器然后向这个寄存器写入命令或数据。
到这呢我想对于很多刚学习不久的朋友来说,这些寄存、寄存器的数据或命令都是一些字节数据8 位、16 位或者其他,总是搞不清楚他们到底是怎么一回事,说实话这些在当时也困扰了我很长时间,这主要是这样的概念我们还没接受导致的,原来老师也总是跟我们将教室的门牌号和教室里学生之间的关系,由于刚接触很难真正理解。
总之简单一句话,如果你想找到在教室101 房间的一个同学,那么你就得先找到101 这个教室,然后再去找你想找的同学。
程序中的寄存器和寄存器中的数据跟这个也是相同的概念,你要操一个命令位或者字节,那么你得先定位它的位置(寄存器),才能对它正确无误的操作。
言归正传,我们在操作一个芯片时,对其的控制都是以这种方式进行的:先选择寄存器然后向这个寄存器写入(或读出)命令(状态)或数据。
以上的这些需要大家慢慢体会了,不明白也不影响我们使用这个NRF24L01 的,呵呵!紧接着就是第三步到第九步了,我想大家又会有疑问了:为什么寄存器后面写入的数据要是那样的呢?这就需要知道他们各个位的意义了。
我们看下图就能明白了。
我们拿EN_AA 来举例说明:可以看到它的寄存器偏移是0x01,这里说明一下,如果想要进行写操作那么操作的寄存器地址是WRITE_REG + EN_AA,也就是EN_AA 加上写指令的基地址,若是读操作那么是READ_REG + EN_AA,也就是EN_AA 加上读指令的基地址。
我们看看EN_AA 这个寄存器的功能是什么。
它的位为8 位初始化的值为00111111 即0x3f,每个位的功能上表已经很详细了。
这个送的数据是0x01,那么表示什么意思呢?意思是允许数据通道0 自动应答,而其他的通道禁止,明白了吧。
其他的都是这个样子滴。
这是NRF24L01 设置发射模式时的初始化过程。
下面我们看看怎么用NRF24L01 进行无线数据发射传输。
我们从主函数main 开始。
主函数很简单,我们为您提供了两个模式的发射方式:手动发射(按键控制)和自动发射(每隔一段时间发送一次数据)。
这是模式1,该模式为自动发射。
可以看到主函数调用的就是模式1,对于模式0 手动方式,大家把主函数的Mode1 改为Mode0 就可以验证了。
详细请看程序源码。
在Mode1()这个函数中我们看看是怎么样的一个操作顺序。