标题: [原创]NRF24L01+的5个通道调试经验,总调不通的可以来看看…… [打印本页]

作者: 王朗的诱惑    时间: 2015-7-26 23:10
标题: [原创]NRF24L01+的5个通道调试经验,总调不通的可以来看看……
历尽千辛万苦,失败了无数回……终于把NRF24L01+所有通道全调通了。在调试过程中,总结了一些经验。(下载成功计数又刷了几百~~~~(T o T)~~~~)
总体来看,NRF24L01+模块最麻烦的就是寄存器配置问题了,搞定了各个寄存器的配置,模块就通了。而通道设置也到处是寄存器的身影,一不小心就会通信失败,所以在准备调试NRF24L01+前一定要准备好资料。如果失败了,不要着急,一点一点来,排除所有可能的故障,如果人品不错的话,一会就搞定了……(╮(╯▽╰)╭我是没这个运气了……)
我的程序原版是从——NRF24L01无线模块多机通信单片机程序 上位机+下位机(出处: 单片机论坛)——这里搞的,在此感谢huyun的无私奉献……然后我也来回报一下社会吧……
很多人卡在通道调试这里,那就说说NRF24L01+通道的事情吧,一共有6个通道(数据手册里的pipe),其中通道0最容易了,去网上随便找个程序就搞定,比如我找的这个,连通道1也稍带上了。关键是剩下的那几个,尤其是通道2(2~5是极其相似的),在网上看到了很多人调不通,可是又没有专门的解决办法,只有多对一的通信范例,最后还是不知道问题出在哪。今天我试了一下,确实不易……但是经过大量实验,发现了很多不容易想到问题,都是不能调通的原因。

通道1调试:
发送部分:
通道1其实不只是把通道0程序里有关通道0的部分直接改成通道1的那么简单,别的通道更麻烦一点,这就是很多人调不通的原因。我刚开始也是直接改的,果然失败了……(⊙﹏⊙)b……然后又去看原来的程序,看到发送的数据不论是哪个通道,都装给了通道0的地址,不知道为什么,但是实验证明,确实必须这样……其中TX_ADDR地址要和发送的地址一样。
1.    /*装载数据*/
2.   SPI_Write_Buf(WRITE_REG + TX_ADDR, (uint8_t*)ADDRn, TX_ADR_WIDTH);//写TX节点地址     
3.  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uint8_t*)ADDRn, RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK            

不论通道是几,其中要改动的只有(uint8_t*)ADDRn这个东西,其实就是对应的通道地址。不要动RX_ADDR_P0
然后是寄存器配置,原贴里的注释有这么一行:“要配置第N个​的通道,前N个通道也必须被配置,要不然配置不成功。”瞬间恍然大悟( ⊙ o ⊙ )!,上回太心急,拿了程序就走了……正如原帖代码所示:
1.           SPI_Write_Reg(WRITE_REG + EN_AA, 0x3f); //使能通道所有的自动应答   
2.           SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x3f);//使能通道所有的接收地址

这个是发送函数void NRF24L01_Init_TX(uint8_t*ADDRn)里的一段,作者把所有通道都打开了。其实经过试验,这里的通道必须把当前配置的通道和它前面的都配置。比如现在是通道1,就要至少使能为0x03,而不能是只打开通道1的0x02。
下面的选择通道n有效数据宽度,实验证明没有用,我一次只发1个字节,宽度设置成32,发过来还是1个字节……所以可以去掉。不过留着也不会出错。

接收部分:
首先经过试验,不设置TX_ADDR和RX_ADDR_P0没出错,所以可以去掉。
但是然后发生了奇怪的问题,经过大量试验,我这里通道1地址设置完了以后还要重新设置低位地址,不然没法调通,不知道为什么。如代码所示:
SPI_Write_Buf(WRITE_REG +RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK            
SPI_Write_Buf(WRITE_REG +RX_ADDR_P1, RX_ADDRESS1, 1);  //设置RX节点地址,主要为了使能ACK   
(奇怪的NRF24L01+(O__O"…),然后我想……我删掉的部分可能在别人那里就不一样了……可能。如果最后调不通就把我删掉的加上试试。)
后面的就是很正常的设置了,可以只开对应通道,比如通道1:0x02,对应数据宽度什么的……不用管别的通道怎么样。

通道2~5调试:
发送部分:
和通道1的调试方法一样,注意:
1.不要动RX_ADDR_P0
2.配置第N个​的通道,前N个通道也必须被配置。

接收部分:
也和通道1一样……但是需要注意的是数据地址的写入,在定义数据地址的时候,根据数据手册,通道2~5与通道1共用32位地址,只有低8位可以改变且不能一样。如图:
所以改通道2~5地址的话只能通过改通道1的,然后写入对应通道低8位地址。数据手册里的RX_ADDR_P1表格里还有一句话:LSByteis written first。(先写最低位。)这很重要。所以根据写入字节的程序,地址要定义为:

这样,看懂没?除了通道0,只有地址数组的第0个元素在变化。网上很多程序是最后一个元素在变,好像数据手册的表里似的,这样就会导致只有通道0和1能调通,别的不能用。因为通道0和1是40位地址写入的,随便改,但是后面的地址必须只能改低位,如果高低位弄混了,改错了当然就不能调通了。当然我(Copy)的程序是先写第0个元素,如果别人的程序不一样那要另当别论。
知道了顺序以后就好办了,但是要注意写入的时候先写通道1的40位地址,再写所用通道的低8位地址,但是经过多次试验,那32位不要重复写入,数值一样也不行。这样就OK,程序如下:
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK               
SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, RX_ADDRESS2, 1);  //设置RX节点地址,主要为了使能ACK(地址长度只能是1,不能多写,写一样的值也不行)
然后剩下的就简单了,数据通道和数据宽度该是几就设置几,不用管别的通道。

对,结束了,其实并不难,只是可能有的问题没想到而已……我把原程序重新改了一下,进行了通道变换的封装,输入对应通道就可以在对应通道上点对点通信了,像这样:
  1. /***************************************************************************
  2. 函数名称:void NRF24L01_Init_TX(uchar pipe)
  3. 函数功能:初始化NRF24L01
  4. 函数备注:在调用NRF24L01作为发射时,都要先调用该函数对NRF24L01进行初始化
  5. ***************************************************************************/
  6. void NRF24L01_Init_TX(uchar pipe)//输入通道值
  7. {   
  8.         /*待机模式*/
  9.         CE=0;
  10.         CSN=1;
  11.         SCK=0;
  12.         /*装载数据*/
  13.         SPI_Write_Buf(WRITE_REG + TX_ADDR, pipe_add[pipe], TX_ADR_WIDTH);//写TX节点地址
  14.         SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, pipe_add[pipe], RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK  
  15.         /*配置寄存器*/
  16.         SPI_Write_Reg(WRITE_REG + EN_AA, 0x3F); //使能所有通道自动应答   
  17.         SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x3F);//使能所有通道的接收地址(这两项定义的通道数不得小于当前使用的通道数,奇怪的NRF24L01+(O__O "…))
  18.         SPI_Write_Reg(WRITE_REG + RF_CH, 40);//设置RF通道为40   收发必须一致!
  19.         SPI_Write_Reg(WRITE_REG + SETUP_RETR, 0xFF);//自动重发  4000+86us    重发15次
  20.         SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启  收发必须一致!                  
  21.         SPI_Write_Reg(WRITE_REG + CONFIG, 0x0E);  //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,发送模式,开启所有中断                          
  22. }


  23. /***************************************************************************
  24. 函数名称:void NRF24L01_Init_RX(uchar pipe)
  25. 函数功能:初始化NRF24L01
  26. 函数备注:在调用NRF24L01作为接收时,都要先调用该函数对NRF24L01进行初始化
  27. ***************************************************************************/
  28. void NRF24L01_Init_RX(uchar pipe)//输入通道值
  29. {   
  30.         /*待机模式*/
  31.         CE=0;   
  32.         CSN=1;   
  33.         SCK=0;   
  34.         /*装载数据*/
  35.         if(pipe == 0)                //通道,对应设置40位地址
  36.         {                             
  37.                 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS0, RX_ADR_WIDTH);  //设置RX节点地址,主要为了使能ACK
  38.                 SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), RX_ADDRESS0+pipe, RX_ADR_WIDTH);  //设置RX节点地址,主要为了使能ACK
  39.         }
  40.         else                                //其他通道,对应设置通道1公共地址和相应8位地址
  41.         {
  42.             SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK                  
  43.             SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), pipe_add[pipe], 1);  //设置RX节点地址,主要为了使能ACK(地址长度只能是1,不能多写,写一样的值也不行)                        
  44.         }
  45.         /*配置寄存器*/
  46.         SPI_Write_Reg(WRITE_REG + EN_AA, 1<<pipe);//使能通道的自动应答
  47.         SPI_Write_Reg(WRITE_REG + EN_RXADDR, 1<<pipe); //使能通道的接收地址   
  48.         SPI_Write_Reg(WRITE_REG + RF_CH, 40); //设置RF通道为40   收发必须一致!
  49.         SPI_Write_Reg(WRITE_REG + (RX_PW_P0+pipe), RX_PLOAD_WIDTH); //选择通道的有效数据宽度
  50.         SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启  收发必须一致!
  51.         SPI_Write_Reg(WRITE_REG + CONFIG, 0x0F); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
  52. }
复制代码

亲测通道0~5均可用。如果想多对一通信,只需增加相应通道即可,反正配置方法已经告诉你了,这下没问题了吧。O(∩_∩)O哈哈~。当然,这样做了没问题却还是调不通的朋友可以在论坛里搜索,搜不到就去百度,百度不到可以用雅虎,不行再用谷歌,不行再用搜狗,不行再用360搜索,不行再用好搜,不行再用搜搜,不行再用Bing……要是还不行,可以选择联系我……w(゚Д゚)w。

       附上我稍作修改后的代码,太长,而且有3段,就打包了。
NRF24L01 .zip (36.7 KB, 下载次数: 780)

NRF24L01 资料.rar (10.58 MB, 下载次数: 451)



作者: eclidtf    时间: 2015-7-28 21:20
最近也想学习一下无线,准备入手NR905的模块

作者: 腾飞的龙    时间: 2015-8-3 20:05
好东西谢谢分享值得尊敬!
作者: 286458071    时间: 2015-8-8 10:37
谢谢分享
作者: zylugl    时间: 2016-2-17 23:41
前辈,我用STM8L101 还没入门,谢谢你的分享
作者: cqr01    时间: 2016-2-19 15:56
在调试,学习了!
作者: zylugl    时间: 2016-3-3 14:13
调了N久还没有通,很想下载你的资料
作者: erhuazi    时间: 2016-3-18 10:18
正需要!
作者: 去127    时间: 2016-4-3 15:58
下载了很是需要啊
作者: zzxzzxzzx    时间: 2016-4-11 10:15
想调通2个通道
作者: 799224707    时间: 2016-4-11 11:12
依然不好使,求教啊
作者: zzxzzxzzx    时间: 2016-4-11 15:28
亲,我2个发送,1个收,通道0和1都调通了,两个一起发的话中间有一个会插不进去,把另外一个关了,它发的就收到了
作者: 王朗的诱惑    时间: 2016-4-11 18:15
试试接收完了以后手动清一下RX FIFO寄存器。可能会影响到自动应答。
作者: cngeek    时间: 2016-4-27 00:31
围观一下大神 好贴  最近也在弄这个
作者: cngeek    时间: 2016-5-2 20:31
请问大神 晶振是多少mhz的
作者: 王朗的诱惑    时间: 2016-5-2 21:59
cngeek 发表于 2016-5-2 20:31
请问大神 晶振是多少mhz的

嗯?NRF24L01上面写的是16MHz,单片机随意啦。
作者: z53523390    时间: 2016-6-15 08:46
正是我所需要的东西,谢谢楼主
作者: chenduojiao    时间: 2016-6-21 14:19
您好,请教一下,我的NRF24L01让数据一直发送接受,测试10天左右,发现接收模块收不到数据了,但是发射模块一直在发射数据,我没有设置自动应答,请问你有没有遇到这种情况啊?
作者: 王朗的诱惑    时间: 2016-6-21 16:21
chenduojiao 发表于 2016-6-21 14:19
您好,请教一下,我的NRF24L01让数据一直发送接受,测试10天左右,发现接收模块收不到数据了,但是发射模块 ...

有的有的,开始的时候一切正常,不知道什么时候就卡了,一直不知道是什么原因。
作者: xinshou123456    时间: 2016-6-28 11:41
好东西,顶起来!!!!
作者: xinshou123456    时间: 2016-6-28 11:42
楼主,能加下好友吗,有些问题请教!,qq 2412907044
作者: nczywq    时间: 2016-10-21 00:04
我想问下楼主,比如我把数据发送到通道2,我该怎么把通道里的数据读出来,发送什么指令,手册已经把我呓蒙蔽了
作者: 王朗的诱惑    时间: 2016-10-22 12:58
nczywq 发表于 2016-10-21 00:04
我想问下楼主,比如我把数据发送到通道2,我该怎么把通道里的数据读出来,发送什么指令,手册已经把我呓蒙 ...

NRF24L01_Init_RX(2);
nRF24L01_RxPacket(Rx_Buf);
这就行了吧。
作者: whsbk    时间: 2016-10-22 14:14
手里也有这个模块还没开始调,感谢分享资料
作者: nczywq    时间: 2016-10-23 22:46
楼主啊。我在TB买的NRF24L01模块,怎么也读不到数据,读回来的全是1。好纠结
作者: 王朗的诱惑    时间: 2016-10-24 20:54
nczywq 发表于 2016-10-23 22:46
楼主啊。我在TB买的NRF24L01模块,怎么也读不到数据,读回来的全是1。好纠结

这东西就是不好调。一步一步来吧。先随便读寄存器看SPI有没有问题,然后先调通道0。一定要有耐心,坚持下去总会有美好的事情发生。
作者: nczywq    时间: 2016-10-24 21:12
王朗的诱惑 发表于 2016-10-24 20:54
这东西就是不好调。一步一步来吧。先随便读寄存器看SPI有没有问题,然后先调通道0。一定要有耐心,坚持下 ...

就是没有任何数据读出来,我在和模块厂家联系
作者: nczywq    时间: 2016-10-25 20:39
用模拟SPI可以,但我用STC15自带的SPI寄存器读,数据一直不对,总是差一位数,不知道为什么,
作者: 王朗的诱惑    时间: 2016-10-26 18:58
nczywq 发表于 2016-10-25 20:39
用模拟SPI可以,但我用STC15自带的SPI寄存器读,数据一直不对,总是差一位数,不知道为什么,

是官方的例程么?我也试过硬件SPI,没什么问题。
作者: nczywq    时间: 2016-10-27 22:39
王朗的诱惑 发表于 2016-10-26 18:58
是官方的例程么?我也试过硬件SPI,没什么问题。

擦,第二天同样的代码又成功了
作者: nczywq    时间: 2016-11-3 22:41
本帖最后由 nczywq 于 2016-11-3 22:42 编辑
楼主请教,我能发送,可是发送不成功,具体表现为达到最大重发。代码如下
  1. void NRF_Init(void)
  2. {
  3.         NRF_CE=0;
  4.         NRF_Write_Com(W_REGISTER+CONFIG,0x18);                                //进入待机模式开通CRC校验
  5.         NRF_Write_Com(W_REGISTER+EN_AA,ENAA_P0);                        //允许通道0自动应答
  6.         NRF_Write_Com(W_REGISTER+EN_RXADDR,ERX_P0);                        //允许通道0接收数据
  7.         NRF_Write_Com(W_REGISTER+SETUP_AW,AW);                                //发送接收数据宽度为5个字节
  8.         NRF_Write_Com(W_REGISTER+SETUP_RETR,0xff);                        //打开自动重发
  9.         NRF_Write_Com(W_REGISTER+RF_CH,RF_CH_ADD);                        //射频通道
  10.         NRF_Write_Com(W_REGISTER+RF_SETUP,(RF_DR|RF_PWR));        //速率2Mbps,发射功率0dBm                                          
  11.         NRF_Write_Dat(W_REGISTER+RX_ADDR_P0,RX_ADDr0,5);        //写入接收地址
  12.         NRF_Write_Dat(W_REGISTER+TX_ADDR,TX_ADDr,5);                //写入发送地址
  13.         NRF_Write_Com(W_REGISTER+RX_PW_P0,RX_PW_P0_Width);        //接收数据宽度为5个字节
  14.         NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS);                //清除状态寄存器
  15. }
  16. void NRF_TX_Mode(void)
  17. {
  18.         NRF_Delay();
  19.         NRF_CE=0;                                                
  20.         NRF_Delay();                                        //进入待机模式
  21.         NRF_Com(FLUSH_TX);                                                                        //清除发送寄存器
  22.         NRF_Write_Dat(W_TX_PAYLOAD,RX_Dat,26);                                //写入待发送数据
  23.         NRF_Write_Com(W_REGISTER+CONFIG,0x0a);                                //配置发送模式
  24.         NRF_CE=1;                                                                                        //发送数据
  25. //        Delay500ms();
  26.         EX0=1;
  27. }
  28. void INT0_Routine(void) interrupt 0 using 0
  29. {
  30.         uint temp[5];
  31.         EX0=0;
  32.         sta=NRF_Read_Com(STATUS);                //返回状态寄存器
  33.         printf("状态寄存器的值为:%x\n",sta);
  34.         part();
  35.         if(TX_DS)
  36.         {
  37.                 printf("对方接收成功\n");
  38.                 NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS);                //清除状态寄存器
  39.                 NRF_RX_Mode();
  40.         }
  41.          else if(RX_DR)
  42.         {
  43.                 NRF_Read_Dat(R_RX_PAYLOAD,temp,5);
  44.                 printf("接收到的数据为:%c%c%c%c%c\n",temp[0],temp[1],temp[2],temp[3],temp[4]);
  45.                 NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS);                //清除状态寄存器
  46.         }        
  47.         else if(MAX_RT)
  48.         {
  49.                 printf("发送失败%x\n",MAX_RT);        
  50.         }
  51. }
  52. void SPI_Routine(void) interrupt 9  using 0
  53. {
  54.         SPSTAT = SPIF | WCOL;       //清除SPI状态位
  55.         SPI_OK=1;
  56. }
复制代码


作者: A007320806    时间: 2016-11-9 09:16
实测可用,非常感谢!
作者: 王朗的诱惑    时间: 2016-11-9 15:44
nczywq 发表于 2016-11-3 22:41

看不出来……注意寄存器该清的清了,不能同时发送。这问题是第一次发送就有的还是一会才有的?还有这2个中断怎么都是using 0
作者: 小z是我    时间: 2016-12-14 21:06
学习学习。最近一直在学这个,真想联系你,为嘛下载要币
作者: 小z是我    时间: 2016-12-14 21:14
不够积分下载啊,努力才刷了13积分,能发到我邮箱吗,278698535@qq.com,感激不尽,好人永远平安
作者: zggxgl    时间: 2017-1-4 10:42
楼主,你好,刚接触NRF24L01,找了很多相关资料,还是没弄明白,向你请教,
如果接收端6个通道都接收数据,怎么把指定通道或所有通道的数据读取出来,并且如果某个时刻其中一个通道接收到了数据,怎么知道是哪个通道接收到了数据呢?谢谢。
作者: 王朗的诱惑    时间: 2017-1-6 16:08
zggxgl 发表于 2017-1-4 10:42
楼主,你好,刚接触NRF24L01,找了很多相关资料,还是没弄明白,向你请教,
如果接收端6个通道都接收数据 ...

是用这个寄存器看通道号吧?
作者: 头上长包了    时间: 2017-1-30 21:23
卡好久了。。。发送正常就是接收不到。。。。。先下载看看
作者: 头上长包了    时间: 2017-1-30 22:06
直接用了你的程序,我用的stc的89c52做的,只是改了引脚头文件之类的,其他都没有改,然后分别下载进发射和接收(接收的把#define RX取消屏蔽了编译的),结果接收部分通过串口看始终接收不到信号,STATUS始终是0e,数据为初始化的00,寄存器能正常读取的话,应该说明硬件没问题吧?求教~~
作者: 王朗的诱惑    时间: 2017-1-31 09:27
头上长包了 发表于 2017-1-30 22:06
直接用了你的程序,我用的stc的89c52做的,只是改了引脚头文件之类的,其他都没有改,然后分别下载进发射和 ...

确实……寄存器对了硬件应该就没问题……发送端寄存器也正常么?这就不知道了……交换下发送接收看看什么的……
作者: 头上长包了    时间: 2017-2-1 09:17
王朗的诱惑 发表于 2017-1-31 09:27
确实……寄存器对了硬件应该就没问题……发送端寄存器也正常么?这就不知道了……交换下发送接收看看什么 ...

。。。发送接收寄存器都正常,不过发送地址读出来的好像有点问题,今天继续调试。顺便问一下,寄存器CD是什么意思?我读出来都是00.是不是说我两个天线不再一个频段?
作者: 头上长包了    时间: 2017-2-1 16:45
王朗的诱惑 发表于 2017-1-31 09:27
确实……寄存器对了硬件应该就没问题……发送端寄存器也正常么?这就不知道了……交换下发送接收看看什么 ...

陷入瓶颈了。。发送取消应答,只使用通道0,状态寄存器STATUS收到0X2E,说明发送成功,接收部分状态寄存器却始终为0x0e。。。。其他设置都是一样的,就是接收不到数据。。。求教
作者: 头上长包了    时间: 2017-2-2 20:54
终于弄出来了,来通报一下原因。程序没有错误。是硬件电源问题,加了电容滤波就好了。
作者: x小白x    时间: 2017-2-2 23:23
正在玩试试看怎么样
作者: 王朗的诱惑    时间: 2017-2-3 14:48
头上长包了 发表于 2017-2-2 20:54
终于弄出来了,来通报一下原因。程序没有错误。是硬件电源问题,加了电容滤波就好了。

是不是用的线性稳压没加输出电容?
作者: zy1186    时间: 2017-4-7 11:17
不够积分下载
作者: trith    时间: 2017-5-12 11:42
感谢分享
作者: trith    时间: 2017-5-12 12:43
/***************************************************************************
函数名称:uchar SPI_RW(uchar dat)
函数功能:NRF24L01的SPI时序
函数备注:Writes one byte to nRF24L01, and return the byte read from nRF24L01 during write
***************************************************************************/
uchar SPI_RW(uchar dat)
{
    uchar i;
    for(i=8;i>0;i--)
    {
         dat <<= 1;           
         MOSI = CY;         
         SCK = 1;                     
         dat |= MISO;                        
         SCK = 0;                              
    }
    return(dat);                             
}

那个CY是什么?为什么不是 dat|0x80 呢?
作者: trith    时间: 2017-5-12 15:32
那个CY应该是进位标记?我用的51 mcu,没这个CY,
我给他改成在dat左移之前的MOSI = dat & 0x80;

哈哈,这个真的能用啊,谢谢楼主。
网上分享的24L01P的各种代码满天飞,各个号称调通能用。结果没有一个好用。
作者: 李志岗    时间: 2017-5-17 11:53
很精心 很实用 楼主大好人
作者: lingem    时间: 2017-5-22 13:56
手里也有这个模块还没开始调,感谢分享资料
作者: whh123whh    时间: 2017-6-4 10:23
谢谢你的分享!
作者: SLAM258    时间: 2017-6-17 15:15
没积分,好想下载
作者: 你不是啦啦啦    时间: 2017-7-15 20:14
楼主求教,一直调不通。
作者: clogord    时间: 2017-8-18 23:02
多谢
作者: 王朗的诱惑    时间: 2017-8-21 14:54
你不是啦啦啦 发表于 2017-7-15 20:14
楼主求教,一直调不通。

是模块和单片机之间通信不上还是模块和模块之间通信不上?一步一步来,这个模块就是不好调。
作者: jxdianqi    时间: 2017-8-21 17:44
好东西谢谢分享值得尊敬!刚买了材料,正好借鉴一下
作者: 铭日    时间: 2017-9-13 18:59
端个小板凳来学习学习
作者: 铭日    时间: 2017-9-13 19:01
卤煮的模块能传多远,实际的速率最快能有多快呢?
作者: 王朗的诱惑    时间: 2017-10-1 12:31
铭日 发表于 2017-9-13 19:01
卤煮的模块能传多远,实际的速率最快能有多快呢?

这个还没试过……
作者: xingzhiying    时间: 2017-10-17 21:59
很不错的资料
作者: xiong731    时间: 2017-11-28 21:05
谢谢你的分享
作者: nncrazy    时间: 2018-1-12 10:45
多谢楼主,正需要。
作者: zhangdi    时间: 2018-2-11 17:38
头上长包了 发表于 2017-2-2 20:54
终于弄出来了,来通报一下原因。程序没有错误。是硬件电源问题,加了电容滤波就好了。

哪个部分加了滤波呢?
作者: zhangdi    时间: 2018-2-11 17:40
请问楼主,这个收发调好以后,如果批量做的话,需要细调吗?我们批量后给小学生做,他们能做吗?
作者: 右走    时间: 2018-2-11 22:27
24L01 距离不能太远呀
作者: 王朗的诱惑    时间: 2018-2-14 14:32
zhangdi 发表于 2018-2-11 17:40
请问楼主,这个收发调好以后,如果批量做的话,需要细调吗?我们批量后给小学生做,他们能做吗?

批量的话要看是不是一起用,一起用的话把参数稍微改下吧,不然会互相干扰……不过我没试过,只是这么想……给小学生做?是焊接电路吗?其实就算是搭接模块我觉得也好难,还是得让家长或者老师陪同吧。
作者: 王朗的诱惑    时间: 2018-2-14 14:32
右走 发表于 2018-2-11 22:27
24L01 距离不能太远呀

买那种带功放的就远了。
作者: qjzyx    时间: 2018-2-14 15:56
学习,
作者: 少年0508    时间: 2018-3-7 20:18
好东西,正需要呢,谢谢楼主
作者: Yinfeng_Wang    时间: 2018-3-15 09:37
感谢分享,刚好正在调试多通道的部分
作者: yanheile    时间: 2018-4-10 09:10
好东西谢谢分享值得尊敬!
作者: KKD326    时间: 2018-4-11 19:32
感谢楼主分享
作者: Howking    时间: 2018-4-12 15:43
头上长包了 发表于 2017-1-30 22:06
直接用了你的程序,我用的stc的89c52做的,只是改了引脚头文件之类的,其他都没有改,然后分别下载进发射和 ...

你好,请问你的问题最后解决了吗,我也遇到了和你一模一样的问题
作者: 老胖熊    时间: 2018-4-12 15:49
不错的资料,为什么两个附件都报不安全的下载?有病毒吗?
作者: Howking    时间: 2018-4-12 15:51
头上长包了 发表于 2017-2-2 20:54
终于弄出来了,来通报一下原因。程序没有错误。是硬件电源问题,加了电容滤波就好了。

请问你说的硬件电源问题是谁的电源呀?nrf24l01的还是单片机的呀?
作者: Howking    时间: 2018-4-12 15:52
头上长包了 发表于 2017-2-2 20:54
终于弄出来了,来通报一下原因。程序没有错误。是硬件电源问题,加了电容滤波就好了。

请问你说的硬件电源问题是谁的电源呀?nrf24l01的还是单片机的呀?求解答
作者: tikelu    时间: 2018-5-19 13:01
超给力,跟百度上找的东西完全不一样
作者: bagel    时间: 2018-5-20 07:54
谢谢分享
作者: 王朗的诱惑    时间: 2018-5-27 13:28
诶呀呀,还有那么多人在看呀……其实通道应该用单词channel,不是pipe……英语水平太渣,希望大家不要介意……
作者: J.K.Who    时间: 2018-5-27 18:09
多谢分享,希望能解决我的问题
作者: 582080360    时间: 2018-5-27 19:54
王朗的诱惑 发表于 2018-5-27 13:28
诶呀呀,还有那么多人在看呀……其实通道应该用单词channel,不是pipe……英语水平太渣,希望大家不要介意 ...

今天看的
作者: 582080360    时间: 2018-5-27 20:01
1475779659@qq.com,能不能发我邮箱啊,感谢
作者: ZYP999    时间: 2018-5-30 18:18
楼主你好,我需要做两个从机,一个主机。我的思路是修改从机的射频通道。主机通过不停切换两个射频通道,这样可行吗
作者: 王朗的诱惑    时间: 2018-6-1 08:04
582080360 发表于 2018-5-27 20:01
1475779659@qq.com,能不能发我邮箱啊,感谢

已发。
作者: 王朗的诱惑    时间: 2018-6-1 08:04
ZYP999 发表于 2018-5-30 18:18
楼主你好,我需要做两个从机,一个主机。我的思路是修改从机的射频通道。主机通过不停切换两个射频通道,这 ...

行吧。试试看。
作者: ffansgor    时间: 2018-6-29 17:44
多对一通信,并发量太大,RX FIFO老是FULL,难搞
作者: ffansgor    时间: 2018-6-29 17:46
多对一通信,并发量太大,RX FIFO 很容易就FULL,难搞啊
作者: FrozenForest    时间: 2018-8-9 17:04
非常好,谢谢楼主,我对照着研究研究
作者: lumingfei    时间: 2018-8-10 15:53
谢谢,真的很好,比百度找的好太多了
作者: lumingfei    时间: 2018-8-10 15:53
谢谢,这个真的太好了!
作者: 落叶飘飘    时间: 2018-8-24 11:49
楼主,我的发送端状态一直是0x2e,应该表示发送成功,接收端偶尔能接收到一包数据,不知道怎么排查原因呢
作者: 王朗的诱惑    时间: 2018-8-28 12:09
落叶飘飘 发表于 2018-8-24 11:49
楼主,我的发送端状态一直是0x2e,应该表示发送成功,接收端偶尔能接收到一包数据,不知道怎么排查原因呢

确认能收到,而且是偶尔能收到的话,会不会是有干扰?干扰严重的话丢包率会很高。周围有没有运转的直流电机什么的?
作者: prettytank    时间: 2018-9-25 16:30
这个必须顶啊,太好了,找的好辛苦
作者: f10ng    时间: 2018-9-25 19:07
好东西谢谢分享
作者: 浅浅淡淡ckl    时间: 2018-10-3 10:33
哇,没黑币了,肥肉眼前飘。。。谢谢楼主
作者: salasala..    时间: 2018-12-18 10:23
谢谢楼主
作者: _晨昏线    时间: 2019-3-17 20:29
楼主,一直搞不懂资料说的多对一通信?这个模块能实习多对一的同时通信吗?如果能又要如何实现
作者: ben0147    时间: 2019-3-17 21:38
谢谢楼主,谢谢分享

作者: 王朗的诱惑    时间: 2019-3-18 13:32
_晨昏线 发表于 2019-3-17 20:29
楼主,一直搞不懂资料说的多对一通信?这个模块能实习多对一的同时通信吗?如果能又要如何实现

不能简单的一起发,会卡住,得自己搞个通信协议,协调好所有模块,一个一个排队才行。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1