关于NRF24L01与NRF24L01+的个人最佳资产配置方案问题

大哥些,求助啊。关于NRF24L01+ 的问题,能发送,不能接收
[问题点数:20分]
本版专家分:0
CSDN今日推荐
本版专家分:37608
2013年6月 硬件/嵌入开发大版内专家分月排行榜第一2007年10月 硬件/嵌入开发大版内专家分月排行榜第一2007年6月 硬件/嵌入开发大版内专家分月排行榜第一2007年5月 硬件/嵌入开发大版内专家分月排行榜第一2007年4月 硬件/嵌入开发大版内专家分月排行榜第一2007年3月 硬件/嵌入开发大版内专家分月排行榜第一
2013年4月 硬件/嵌入开发大版内专家分月排行榜第二2007年9月 硬件/嵌入开发大版内专家分月排行榜第二
2013年5月 硬件/嵌入开发大版内专家分月排行榜第三2012年9月 硬件/嵌入开发大版内专家分月排行榜第三2007年11月 硬件/嵌入开发大版内专家分月排行榜第三
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:679
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐初接触nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集分享
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
初接触nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集分享
& & & 俗话说:每个人一生下来什么都会的,都是通过自己努力和探索出来的,NRF系列芯片,刚开始都好奇心加兴趣才来捣鼓它的,刚开始做硬件和软件,没有收发数据弄得整个人头都快炸开了,所以在此和大家分享一下前辈的经验,希望大家会少走弯路。
Q:最近在选型的时候发现基本常见的无线模块都是3V供电,而我使用的单片机是5V的,它们之间要怎么连接呢?直接连接会不会损坏模块?
& & & 回答: 如果你使用的51单片机的P0口是高阻引脚,可以直接将无线模块的IO脚连接到P0端口,并在对应的连线与3V电源间放置1K~10K左右的偏置电阻即可。
如果单片机没有高阻脚(AVR单片机和一些型号的STC单片机等),不适用于上述的方法。
nRF24L01+可以承受5V的输入电压,直接连接单片机的IO脚不会烧坏模块,但是无线模块的输出端最高只能输出3V左右的电压,请注意该电压值是否能被单片机正确识别。
Q:无线模块可以直接和串口连接并进行通讯吗?我想直接把nRF24L01+模块连接到串口电路中,请问这样可以吗?
& & & 回答: 不可以,无线模块不提供串行接口。如果需要与计算机等设备通过串口连接和通讯,请使用单片机作为通讯控制核心,接收计算机串口发送的数据并将其传送至无线模块中,并进行发送工作。另一端的无线模块接收数据后,由单片机读出数据并发送给计算机串口。
Q:影响无线模块传输距离的因素有哪些?
为什么nRF2401无线模块的传输距离总是拉不开?现在只有2米左右,输出功率已经是最高的0dBm了。
& & & & 回答: 呵呵,应该是初学无线模块的最常见问题了。传输距离应该是大家最关心的事情,虽然这是一个直观的数值,但是影响通讯距离的因素却有很多。天线的性能(方向性、增益、驻波比)、无线模块的性能指标(发射功率、接收灵敏度、网络匹配、频率频率的参数的一致性)、无线模块的工作方式(数据传输速率)和使用环境因素等等。所以通讯距离应该是考验一款无线产品综合性能的指标。要想达到理想的距离,应该选择高增益、低驻波比的天线,必要时可以使用定向天线(一些模块是 PCB天线,这种天线应该是性能较差的方式,不过在近距离和小型化方面有优势);选择优质的无线模块,好的无线模块应该具有优秀的匹配网络,将发射与接收信号的损失降到最小,同时也应该具有工作频率准确、一致性好等指标;最后在传输速率的选择上,在能够满足通讯需求的前提下,优先选用低的传输速率也可以有效提高传输距离。
Q:nRF2401A的支持双通道通讯是什么意思?
我看到资料上写着NRF2401具备两个数据通道,这是什么意思呢?只是2401 可以同时在两个通道上完成发送与接收,还是是指2401只能完成两个模块之间的通讯吗?
& & & &回答: 这样理解是错误的,nRF2401A的两个数据通道是指它可以同时接收两个通道上的数据,但是发送的时候只能使用一个通道。所以是不能同时在两个通道上完成接收与发送的。同时nRF2401A无线模块属于半双工个工作方式,同一时刻只能工作在发送或接收一种模式。
另外nRF2401A模块并不是只能在两个模块之间进行通讯,只要无线模块的工作模式配置一致(相同的地址码、信道号、传输速率、数据包长度、CRC模式等)即可完成一对一、一对多、多对多的通讯模式。
Q:nRF24L01、nRF24L01+无线模块的6通道是什么含义?
一直在研究nRF24L01的通道关系可是没什么收获,想问一下6通道是指什么,它们之间的关系是什么?
& & & &回答: nRF24L01+模块内部带有6个数据通道,使用不同的数据通道进行数据发送时,它们都工作在相同的频率下。它们之间是使用地址码来作为区分的。所以你可以理解为一个nRF24L01可以同时拥有6个地址码,在接收的时候,模块会自动识别地址码,并在对应的寄存器中置位,通知用户是哪个通道接收到数据。
使用nRF24L01+的数据通道可以在少于等于6个节点的网络中大幅增加使用和操作的灵活性。在多于6个节点的网络中,用户可以自行在通讯数据中添加额外的标识数据,对不同节点进行区分工作。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网 51hei.com , All Rights ReservedNRF24L01 使用小结—1
nrf24L01被设置为接收模式后,可通过6个不同的数据通道(data pipe)接收数据。
每个数据通道都有一个唯一的地址但是各数据通道的频率是相同的。这意味着可以有6个被配置成发送状态的nRF24L01可以和一个配置成接收状态的nRF24L01通信,并且接收方可以区分(通过判断状态寄存器的1-3位即可达到区分的目的)。
数据通道0有一个唯一的40bit的可设置的地址。其余的通道1到通道5则地址前32位相同,而后8位不同。所有的数据通道都可以实现Enhanced ShockBurst模式。
在发送端,数据通道0被用来接收确认信息,因此发送端的数据通道0的地址必须等于发送地址,这样才能收到应答信息。
当一个24L01发送结束后,它会打开接收器并等待确认。如果没有收到确认,则重发,直到收到确认。当重发超过一定次数则发出中断并改变状态寄存器。重发次数的限制在SETUP_RETR_ARC寄存器中设置。
无论何时收到确认,都会认为上一个数据包发送成功,这个数据包将被从发送缓冲区清除,并且把TX_DS IRQ置为高。
每次开始spi写,读回来的都是状态字。
增强型ShockBurst包格式
前置域1byte
地址域3-5byte
包控制域9bit
载荷0-32字节
CRC1-2字节
地址域是接收机地址
载荷长度6bit
NO_ACK1bit
载荷长度:6bit说明最多32字节
Pid:用于包编号,用于确定是重发包还是新包
NO_ACK:用于表示是否自动应答,如为1则表示无需自动应答
自动应答的延时和重发次数是可编程的。
24L01的工作模式和寄存器及IO口的关系如下
CE引脚的作用
一个ESB(Enhanced ShockBurst)周期,发送一个字节连带收到ACK大约339us
从powerdown状态需要先进入standyby状态,该状态转换需要1.5ms延迟,从standyby状态进入rx/tx状态,需要130us
置高CE维持最少10us,启动Enhanced ShockBurst发送。
Enhanced ShockBurst(TM)模式下发送数据流程
1.配置config寄存器,将PRIM_RX置为0,表示发送模式
2. 当需要发送数据时,首先需要配置地址TX_ADDR,这个地址应该是接收端地址(即应该是接收端6个data pipe地址中的一个即可保证对方收到)。如果要使用自动应答,因为应答消息由发送端的datapipe0接收,所以发送的datapipe0的地址应等于TX_ADDR(若是和上一次发送是相同地址,则可不用重写地址)。
3.配置数据负载长度TX_PLD,将需要发送的数据送入nrf24L01,通过SPI连续写入数据载荷时,nrf24L01将自动对字节数计数。(数据载荷必须在cs为低的时候连续写入)
4.将CE置高并维持最少10us,这个脉冲将启动ShockBurst发送
5.NRF24L01:
a)打开射频
b)启动晶振
c)数据打包
d)发送数据
6.如果启动了自动应答(且重传次数未达到最大值),NRF24L01将自动转入接收状态。
1:若在规定时间内收到了应答包,则这是一次成功的发送,TX FIFO中的数据被清除,同时置高status寄存器中的TX_DS位。
2:如果在规定时间内未收到应答包则自动重传(当启用自动重传时,由SETUP_RETR寄存器中的ARC位指定重传次数)。
3:当重传次数到达最大值依然没有收到应答,则status寄存器中的MAX_RT被置高,TX FIFO缓冲区中的数据并不被移除。
MAX_RT或TX_DS被置高都会在IRQ引脚上引起中断(低电平有效,重写status寄存器中的对应位可清除)。在到达最大重传次数并引发中断后,在没有清除MAX_RT之前,任何数据都不能发送。每次发生MAX_RT中断,PLOS_CNT计数器都会加1,用于统计丢包数。
7.CE置低以后,设备进入STANDBY_I状态。否则TX FIFO缓冲区中的下一个数据载荷将被发送。如果数据缓冲区空,而CE仍然为高,设备将进入STANDBY-II模式。
8.如果设备处于STANDBY-II模式,当CE置低后,设备将进入STANDBY-I模式。
(STANDBY模式可减少电流的消耗,在该模式下,SPI通信仍然可以完成)
Enhanced ShockBurst(TM)模式下接收数据流程
1.设置config寄存器中的PRIM_RX为1,且置CE为高
2.130us之后,NRF24L01开始监视射频信号
3. 当合法的包被接收到(地址匹配),数据被存储到RX-FIFO缓冲区中,status寄存器中的RX_DR被置高,IRQ引脚同时发出中断信号(如果未屏蔽该信号)。Status寄存器中的RX_P_NO指示这个应该接收该数据的DATA PIPE号。
4.如果自动应答启用的话,一个应答信号将被发出
5.MCU将CE置为低将进入STANDBY-I模式
6.MCU可通过SPI读出接收到的数据
另外:关于24L01组网想说明几点应注意的地方:
(1)注意地址的分配
文档中明确说明只有通道0具有5个字节的可配置地址,其他的5个节点都只有1字节可自由配置地址,
比如可以在接收节点这样配置:uint const RXADR0[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};
//接收地址
uint const RXADR1[RX_ADR_WIDTH]= {0xc2,0xc2,0xc2,0xc2,0xc1};
//通道1地址
uint const RXADR2[1]= {0xc2};
//通道2地址
uint const RXADR3[1]= {0xc3};
//通道3地址
uint const RXADR4[1]= {0xc4};
//通道4地址
uint const RXADR5[1]= {0xc5};
//通道5地址
然后将各发送节点地址与接收端相应通道地址设置相同即可
(2)接收节点对各发送节点进行区分
这个就是判断状态寄存器的1-3位即可达到区分的目的
//--------------------------------------------------------------------------------------------------------------------------------------------------------
1、一个发送通道,6个接收通道。发送端发送通道地址寄存器中的地址指向的就是接收端哪个接收通道接收发送端的数据,所以发送端地址寄存器的值要与接收端需要接受数据的通道地址相同。
看一下无线数据传输的数据帧格式
第二部分的地址,就是接收端接收数据的通道地址,这个地址由发送端TX_ADDR寄存器搞定。
2、必须要搞清楚发送地址和接收地址的意义。下面两端描述的是一个意思。我的两次理解。
要先搞清楚TX_ADD和RRX_ADDR_PX。TX_ADD就一个,是发送数据帧格式中发送的地址信息,如上1所示,这个地址指定了向接收端接收数据通道的地址。
发送端的职责:1、发送:发送数据给接收端。2接收:接收某接收端的应答信号。
接收端的职责:1、接收:接收发送端发送的数据。2发送:发送应答信号给发送端。
所以整个过程发送端接收端都有发送和接收的功能。只是发送和接收的东西不一样。
NRF24L01发送端把数据发送给接收端,接收端在确认收到数据后记录发送端的地址,并以此地址为目标地址发送应答信号(这个是自动的,不是程序设置的,应属于硬件实现),(就是说接收端的发送地址寄存器TX_ADDR中存的地址就是发送端TX_ADDR中的地址,而发送端要以又要用通道0来接收应答,所以需要将通道0的地址设置为该地址,即发送端TX_ADDR中的值)。在发送端,数据通道0被用作接收应答信号,因此发送端通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号。
注意每个NRF24L01只有一个发送通道,用来指示向接收端NRF24l01的哪个接收通道发送数据,即TX_ADDR(即只有一个发送目标地址寄存器)不要被TX5迷惑,这里5是指第五个NRF24l01.但一个NRF24L01是有6个接收通道的,每个通道有自己的地址。所以一个2401可以接收6个2401发送来的数据。在发送模式下,发送端的2401会用自己接收通道0来接受 接收端的2401发送来的相应信号。但是接收端的2401发送应答信号的时候,也发送的地址就是接收端的某个接受通道的地址。所以发送端的接收通道0的地址要设置成这个地址。
TX5:TX_ADDR=0xB3B4B5B605
TX5:RX_ADDR_P0=0xB3B4B5B605
RX:RX_ADDR_P5=0xB3B4B5B605
两种数据双方向的通讯方式:
如果想要数据在双方向上通讯,PRIM_RX 寄存器必须紧随芯片工作模式的变化而变化。处理器必须保证PTX和PRX端的同步性。在RX_FIFO和TX_FIFO寄存器中可能同时存有数据。
另外还有自己的查阅的一些资料:
这是使用手册上的关于地址的图。
对于发送方他的Rx通道0要和他的发送地址配成一样的。对于接收方0~6必有的哥通道的地址配置为发送发的地址。就是其实所有的地址都是自己设置的,但是要配对的进行设置。
也有人这样理解:
发送方发送了一段代码,代码中携带地址(看做代码的身份证),接收方接收代码,但接受方设置成了只接收特定身份代码的数据,也就是主机TX_ADDR和从机RX_ADDR要求设置成相同的原因吧。从机接受完数据之后,将应答信号还发送给刚才设置的那个地址,主机还是只识别与发送数据时携带的地址相同的数据。其实,这么理解之后,发现主机和从机根本就没有地址,只是数据携带的地址(数据的身份证)将主机和从机联系起来的。
nRF24L01发送接收调试应用笔记
NRF24L01收发测试程序
NRF24L01使用注意
NRF24L01——工作原理解读
NRF24L01 无线通信模块使用方法
STM32驱动NRF24L01一对多的通信---可变数据包宽度
nRF24L01单片机通信的总结--看了就会用了
nrf24l01+无线发送
没有更多推荐了,关于无线传输模块NRF24L01时好时不好的问题【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:150,638贴子:
关于无线传输模块NRF24L01时好时不好的问题收藏
NRF24L01芯片在一段时间可以正确的接收湿度和温度数据的值,但是过了一会儿,NRF24L01不再接收和发送数据,为什么???程序没问题,IRQ值始终为高电平,说明没有数据接收,读取数据的方式采用的是查询法
这个我精通的
感觉这种发送和接收还是用中断比较好控制,还有不要轻易怀疑设备问题,可以说百分之九十几的情况下,是你自己问题,很大程度上是你程序问题
登录百度帐号豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
毕业论文-基于51单片机和NRF24L01的无线温度监控
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 标准普尔家庭资产配置 的文章

 

随机推荐