NRFL详细教程.doc

上传人:wj 文档编号:1226692 上传时间:2023-04-30 格式:DOC 页数:17 大小:4.74MB
下载 相关 举报
NRFL详细教程.doc_第1页
第1页 / 共17页
NRFL详细教程.doc_第2页
第2页 / 共17页
NRFL详细教程.doc_第3页
第3页 / 共17页
NRFL详细教程.doc_第4页
第4页 / 共17页
NRFL详细教程.doc_第5页
第5页 / 共17页
NRFL详细教程.doc_第6页
第6页 / 共17页
NRFL详细教程.doc_第7页
第7页 / 共17页
NRFL详细教程.doc_第8页
第8页 / 共17页
NRFL详细教程.doc_第9页
第9页 / 共17页
NRFL详细教程.doc_第10页
第10页 / 共17页
NRFL详细教程.doc_第11页
第11页 / 共17页
NRFL详细教程.doc_第12页
第12页 / 共17页
NRFL详细教程.doc_第13页
第13页 / 共17页
NRFL详细教程.doc_第14页
第14页 / 共17页
NRFL详细教程.doc_第15页
第15页 / 共17页
NRFL详细教程.doc_第16页
第16页 / 共17页
NRFL详细教程.doc_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

NRFL详细教程.doc

《NRFL详细教程.doc》由会员分享,可在线阅读,更多相关《NRFL详细教程.doc(17页珍藏版)》请在冰点文库上搜索。

NRFL详细教程.doc

先来看接口电路,使用的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自己的EnhancedShortBurst协议。

可以实现点对点或是1对6的无线通信。

无线通信速度可以达到2M(bps)。

NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。

嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。

功能描述:

真正的GFSK单片式收发芯片

内置硬件链路层

增强型ShockBurstTM功能

自动应答及自动重发功能

地址及CRC检验功能

无线速率:

1或2Mbps

SPI接口速率:

0~8Mbps

125个可选工作频道

很短的频道切换时间,可用于跳频

与nRF24XX系列完全兼容

I/O可接受5V电平的输入

20脚QFN4×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主要有以下几种工作状态:

PowerDownMode:

掉电模式

TxMode:

发射模式

RxMode:

接收模式

Standby-1Mode:

待机1模式

Standby-2Mode:

待机2模式

我们使用的模式主要为发射模式和接收模式。

下面来看看怎么配置这些模式吧。

我们知

道NRF24L01的通信协议为SPI(SPI的协议请大家查阅相应资料,百度一下你就会有收获哦!

),所以我们看看SPI协议怎么写(IO口模拟,STC89C52没有硬件SPI,若您会了STC12C5Axxxx系列的单片机那么您可以使用硬件的SPI,将会更加的方便高效)。

以上为IO口模拟SPI的代码,通用于任何拥有可操作IO的微处理器,需要做好位运算处理。

代码的解释如程序中的注释所示。

非常详细的注释哦!

也采用了自己喜欢的编程风格,您也可以借鉴的呢!

我们主要是来看看它的配置过程。

我想对于一种芯片它的正确配置是大家最为关心的,

有时您也许会为了这些配置问题而伤脑筋。

我们先来看发射模式改怎么配置的。

发射模式的配置顺序:

1.设置TX节点的地址,也就是发射地址,接收端需与这个地址相同,否则接收不

到数据。

寄存器为:

TX_ADDR

2.设置RX节点的地址,也就是接收时的地址,如果是在发射模式下那么功能是为

自动应答服务的(AUTOACK)。

寄存器为:

RX_ADDR_P0

3.允许AUTOACK功能,意思是发送数据后都会等待接收端的应答信号,目的是保

证数据正确发送。

寄存器为:

EN_AA

4.设置允许的接收通道,总共有6个通道,我们只使用通道0,其他通道的功能应

用大家熟悉了NRF24L01之后尝试吧。

寄存器为:

EN_RXADDR

5.配置自动重发次数。

寄存器为:

SETUP_RETR

6.选择通信的频率。

寄存器为:

RF_CH

7.设置接收通道0的接收数据有效宽度,与第四步对应。

寄存器为:

RX_PW_P0

8.配置发射的参数,主要为低噪放大器增益、发射的功率、无线传输的速率。

寄存

器为:

RF_SETUP

9.配置收发状态(这时配置为发射模式),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()这个函数中我们看看是怎么样的一个操作顺序。

先延时1500ms左右,然后装载数据到NRF24L01,LED的操作就很简单了只是一个提示的作用,最后再清除NRF24L01的状态标志位,为下一次发送数据准备。

大家要了解数据的发送是这个样子的。

SPI_RW_Reg()这个函数就不多说了,目的与前面所说的是一样的。

我们来看看NRF24L01_TxPacket这个函数。

注释的部分是装载接收端的地址,也就是为应答信号服务的,由于在初始化的时候已经初始化过了,所以这里可以不需要,但是当您使用NRF24L01跟多的功能时,如使用了多通道通信,需要应答时,这句就有用了,需要设置为对应接收通道的地址才能收到应答信号。

这些功能大家知道就可以了,本教程也是让大家会用NRF24L01,后续还是靠大家自行努力了。

接着是装载数据了,WR_TX_PLOAD是装载数据的命令地址,tx_buf是接收的数据指针,

TX_PLOAD_WIDTH是指要发送的数据字节数。

定义如下:

注意TX_PLOAD_WIDTH最大为32字节,不得操作此数。

数据装载完成后需要的是发送命令了。

这句就是设置了为发送的状态,在CE被拉高的时间里自动启动发送。

那么紧接着CE=1就是此目的了。

CONFIG为什么设置数据为0x0e就是发送呢,那么看下这个寄存器各个位的功能就明白

了。

看看最低位的功能:

1接收模式0发射模式,这明白了吧。

其他位大家自己看看是什

么功能吧。

这样一个完整的发射过程就完成了,刚才说了Mode1()是循环发射模式,一次完成后就

会进入下一次发射了。

那么到这里我们的项目任务算是完成了一半了,还剩下另一半了。

看了发射模式之后,我们再来看接收模式就不会很困难了。

接收模式的配置初始化为:

1.设置RX节点的地址,也就是接收时的地址,如果是在发射模式下那么功能是为

自动应答服务的(AUTOACK)。

寄存器为:

RX_ADDR_P0

2.允许AUTOACK功能,意思是发送数据后都会等待接收端的应答信号,目的是保

证数据正确发送。

寄存器为:

EN_AA

3.设置允许的接收通道,总共有6个通道,我们只使用通道0,其他通道的功能应

用大家熟悉了NRF24L01之后尝试吧。

寄存器为:

EN_RXADDR

4.选择通信的频率。

寄存器为:

RF_CH

5.设置接收通道0的接收数据有效宽度。

寄存器为:

RX_PW_P0

6.配置发射的参数,主要为低噪放大器增益、发射的功率、无线传输的速率。

存器为:

RF_SETUP

7.配置收发状态(这时配置为接收模式),CRC校验模式以及收发状态响应方式。

寄存器为:

CONFIG

注意接收模式的一些设置如第1、2、3、4、5、6中的数据参数要与发射模式的一致。

为此操作起来就更加简单了。

从上面的初始化方式我们可以看到接收与发射的设置基本

一致,只是接收模式中少了2个操作,设置TX地址和设置重发次数,对于接收这两个设置时无关紧要的,所以设置不设置我们都不会用,那么我们在接收模式中仍然可以使用发射模式下的初始化函数Init_NRF24L01(),我们的例程就是如此。

发射与接收模式的不同就在于CONFIG这个寄存器的设置不同,发射模式这个寄存器的

最后一位需要置0,那么接收就得置1,所以在判断接收前把这个位设置一下不就可以了。

我们写一个函数来实现这个功能:

在接收模式中我们最需要注意的就是这个接收模式的设置了。

向CONFIG些0x0f就可以把最后一位设置为1了,就成了接收模式了。

我们也从主函数出发,看看是怎么操作的。

前面的初始化我们需要了解的是InitUSART()这个函数,我们项目最开始的要求有一项是

接收端接收到的数据需要发送到PC进行查看,InitUSART()这个函数就是初始化串口通信的。

看它的原型:

这个初始化就不多说了,对于不同的波特率使用注释中给的公式即可算出定时器的初值

了。

注意使用的是定时器1而不是定时器0。

串口发送数据的函数是Rx_Byte()源码如下:

只要按照Rx_Byte(Dat)这样调用就能把Dat这个数据发送到PC了,PC需要用串口助手来查看数据。

我们接着看主函数的代码,LED=1是熄灭LED的,如果接收不到数据那么是长灭的状态,

接收到数据且数据完全正确后才被点亮一段时间(闪烁一下的效果)用于提示。

紧接着是

这个if条件语句,它就是查询判断NRF24L01的接收状态的。

我们来看着这个被调用的函数:

是读取NRF24L01的状态,目的是判断是否有数据接收。

是STATUS的宏定义,是状态寄存器的地址。

SPI_Read()的源码为:

前面说了所有的寄存器操作都是先设置寄存器地址,然后在写(或读)数据或命令()状态。

那么这里呢SPI_Read()这个函数就不说了。

这里值得一提的是

这个调用,传入的实参是有很多人不明白这个。

这里呢简单说一下,可以看到对于读来说这个数据是没有用的,所以可以是任何的数据。

然而习惯上都爱使用0xff,希望大家慢慢能够明白。

在NRF24L01_RxPacket()这个函数中还有个特别的变量sta,它的声明为:

可以看到这个使用了位操作,目的是什么呢?

这样可以使位操作变得非常简单,对于判断状态是很有用的。

我们来看STATUS这个寄存器的意义:

可以看到对于接收我们需要判断RX_DR这个位是否为1,为1就表示有数据了。

那么用

这个定义就可以直接访问sta这个变量的第七位了,很方便,也不用使用位运算来实现了。

当查询到有数据了就会调用

读出数据放到rx_buf中也就是主函数的RxBuf[]中了(rx_buf指向的地址为RxBuf[])。

这样就完成了数据的读出操作,下面是置位这个接收完成且成功标志位。

完成接收后不要忘记状态的清除操作,为下次接收准备。

在NRF24L01_RxPacket()这个函数中的最后就是返回ReceiveComplete_Flag这个变量了。

在主函数中用于判断是否有数据接收成功。

若接收数据成功了,那么我们接着看主函数。

在项目的开始我们要求发送到PC端进行接收数据的查看,为此我们用下面的代码实现:

32次循环依次把接收到的数据通过Rx_Byte()这个函数由串口发送到PC。

要求中还有一个是要求是检验接收的数据是否与发送端完全一样,这个怎么完成呢?

思路是这样的:

我们也定义一个数组CheckBuf[],这个数组中的数据与发送端发送的数组数据完全一样,然后把接收数组RxBuf[]中的数据与CheckBuf[]一一对比即可达到检验的目的了。

接收和发送端的数组数据如下图:

发送端数据:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2