发 帖  
原厂入驻New
[问答] NRF24L01的接收端接收不到数据,找不到接收端怎么解决?
131 nRF24L01
分享
<p>                                         
接收和发射额初始化代码如下: <br />
<br />
//该函数初始化NRF24l01到RX模式<br />
//设置RX地址,写RX数据宽度,选择RF频道,波特率和LNA HCURR<br />
//当CE变高后,即进入RX模式,并可以接收数据了                   <br />
void RX_Mode(void)<br />
{<br />
        Clr_NRF24L01_CE;          <br />
    //写RX节点地址<br />
          NRF24L01_Write_Buf(SPI_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);<br />
<br />
    //使能通道0的自动应答    <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+EN_AA,0x01);    <br />
    //使能通道0的接收地址           <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+EN_RXADDR,0x01);<br />
    //设置RF通信频率                  <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+RF_CH,40);             <br />
    //选择通道0的有效数据宽度             <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);<br />
    //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+RF_SETUP,0x0f);<br />
    //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,PRIM_RX接收模式 <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+CONFIG, 0x0f); <br />
    //CE为高,进入接收模式 <br />
          Set_NRF24L01_CE;                                <br />
}                        <br />
<br />
//该函数初始化NRF24L01到TX模式<br />
//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,<br />
//选择RF频道,波特率和LNA HCURR PWR_UP,CRC使能<br />
//当CE变高后,即进入RX模式,并可以接收数据了                   <br />
//CE为高大于10us,则启动发送.         <br />
void TX_Mode(void)<br />
{                                                                                                                 <br />
        Clr_NRF24L01_CE;            <br />
    //写TX节点地址 <br />
          NRF24L01_Write_Buf(SPI_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);    <br />
    //设置TX节点地址,主要为了使能ACK          <br />
          NRF24L01_Write_Buf(SPI_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); <br />
<br />
    //使能通道0的自动应答    <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+EN_AA,0x01);     <br />
    //使能通道0的接收地址  <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+EN_RXADDR,0x01); <br />
    //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次<br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+SETUP_RETR,0x1a);<br />
    //设置RF通道为40<br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+RF_CH,40);       <br />
    //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   <br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+RF_SETUP,0x0f);  <br />
    //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,PRIM_RX发送模式,开启所有中断<br />
          NRF24L01_Write_Reg(SPI_WRITE_REG+CONFIG,0x0e);    <br />
    // CE为高,10us后启动发送<br />
        Set_NRF24L01_CE;                                  <br />
}         <br />
用的单片机STM32F103VC,我已经弄了好多天了,没调出来,实在找不到原因</p>
0
2020-5-6 18:09:32   评论 分享淘帖 邀请回答
35个回答
底层驱动没问题吧?
<br>SPI操作NRF的寄存器什么的,先确保这个正常。
2020-5-7 01:59:09 评论

举报

<br>没问题,就是用了你的写和读5个数来查找的
2020-5-7 02:14:01 评论

举报

那应该可以才对了,2个模块一起买的吧?
2020-5-7 02:26:53 评论

举报

<br>是的啊,我把TX_mode的寄存器写入的值都读出来在打印,
<br>nRF24L01连接成功&nbsp;
<br>
<br>TX_ADDR写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;
<br>
<br>RX_ADDR_P0写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;
<br>
<br>EN_AA写入结果为,0x01,以下是打印匹配输出0x1&nbsp;
<br>
<br>EN_RXADDR写入结果为,0x01,以下是打印匹配输出0x1&nbsp;
<br>
<br>SETUP_RETR写入结果为,0x1a,以下是打印匹配输出0x1&nbsp;
<br>
<br>RF_CH写入结果为,0x28,以下是打印匹配输出0x28&nbsp;
<br>
<br>RF_SETUP写入结果为,0x0f,以下是打印匹配输出0xf&nbsp;
<br>
<br>CONFIG写入结果为,0x0e,以下是打印匹配输出0xe&nbsp;
<br>都是匹配的,可是就是发送不了,也接受不了
2020-5-7 02:42:44 评论

举报

移植的是我们的NRF24L01实验?
2020-5-7 02:51:27 评论

举报

<br>原子哥,我是用的自己的板子。。,就一个最小系统板
2020-5-7 03:10:09 评论

举报

<br>只要能读写了,问题应该都不大才对,在检查下吧.
2020-5-7 03:21:38 评论

举报

<br>我发现原因了,其中一个片子的IRQ坏了,实际这个片子也是坏的,不过我还是学到了一点经验,有时考虑问题要多角度,调试时也要多角度,我这次用同样的发射端的程序同样的试了2个NRF24L01模块,才发现问题的,以前一直是一个用发射的程序,一个用接收程序,死也没发现问题,白忙了都,我说的比较乱,总的来说,就是要善于变通,多角度发现问题,有时可能就是硬件的问题,首先要确保硬件没问题,再去调。。。
<br>还是谢谢原子哥了,同时建议其他的人,要多角度,不要思维定势
2020-5-7 03:35:38 评论

举报

<br>不客气,调试软件的时候,最忌讳还存在硬件问题。
2020-5-7 03:48:55 评论

举报

<br>你好,我用的STM8S,俺这个能发送成功,就是接收不到数据,偶尔能接收,这是什么问题
2020-5-7 03:56:43 评论

举报

<br>这个不好说,慢慢查代码
2020-5-7 04:16:12 评论

举报

<br>这个解决了,是时序延时问题,单步运行的时候能够收发到数据
2020-5-7 04:34:01 评论

举报

&nbsp;是的啊,我把TX_mode的寄存器写入的值都读出来在打印,&nbsp;nRF24L01连接成功&nbsp;&nbsp;TX_ADDR写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;&nbsp;RX_ADDR_P0写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;&nbsp;EN_AA写入结果为,0x01,以下是打印匹配输出0x1&nbsp;&nbsp;EN_RXADDR写入结果为,0x01,以下是打印匹配输出0x1&nbsp;&nbsp;SETUP_RETR写入结果为,0x1a,以下是打印匹配输出0x1&nbsp;&nbsp;RF_CH写入结果为,0x28,以下是打印匹配输出0x28&nbsp;&nbsp;RF_SETUP写入结果为,0x0f,以下是打印匹配输出0
<br>......
<br>---------------------------------
<br>问一下
<br>TX_ADDR写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;&nbsp;
<br>
<br>RX_ADDR_P0写入结果为{0x34,0x43,0x10,0x10,0x01},以下是打印匹配输出0x34&nbsp;0x43&nbsp;0x10&nbsp;0x10&nbsp;0x1&nbsp;&nbsp;
<br>这两句是什么意思??&nbsp;&nbsp;&nbsp;那五个数是从何来???
2020-5-7 04:44:49 评论

举报

<br>5个地址值,随便定义
<br>你爱怎么写,怎么写
<br>收发一致即可。
2020-5-7 04:56:39 评论

举报

&nbsp;5个地址值,随便定义&nbsp;你爱怎么写,怎么写&nbsp;收发一致即可。
<br>---------------------------------
<br>奥,似乎明白点了。原子哥还有一个问题
<br>void&nbsp;TX_Mode(void)
<br>{                                                                                                                &nbsp;
<br>NRF24L01_CE=0;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址&nbsp;
<br>NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);&nbsp;//设置TX节点地址使&nbsp;&nbsp;
<br>NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;
<br>NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);&nbsp;//使能通道0的接收地址&nbsp;&nbsp;
<br>NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us&nbsp;+&nbsp;86us;最大自动重发次数:10次
<br>NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通道为40
<br>NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);&nbsp;&nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;
<br>NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);&nbsp;&nbsp;&nbsp;&nbsp;//配置基本工作模式的参数WR_UP,EN_CRC,
<br>}
<br>对于这段代码
<br>问题一:        NRF24L01_Write_Reg这个是通过spi向24l01里的寄存器配置命令吧?
<br>问题二:        &nbsp;NRF24L01_Write_Buf这个是干什么用的?没太看懂&nbsp;&nbsp;
<br>原子哥辛苦了
2020-5-7 05:13:27 评论

举报

<br>1,是的
<br>2,写数据。
2020-5-7 05:30:57 评论

举报

&nbsp;1,是的&nbsp;2,写数据。
<br>---------------------------------
<br>&nbsp;1,是的&nbsp;2,写数据。
<br>---------------------------------
<br>NRF24L01_Write_Reg这个是通过spi向24l01里的寄存器写命令
<br>NRF24L01_Write_Buf这个是通过spi向24l01的寄存器里写数据?
2020-5-7 05:36:33 评论

举报

<br>你其实可以对比下这两个函数。
<br>唯一的不同就是:NRF24L01_Write_Reg,只带一个参数。
<br>而NRF24L01_Write_Buf,是可以带一堆参数的。
<br>你可以把:NRF24L01_Write_Reg看成是NRF24L01_Write_Buf的一个子集。
2020-5-7 05:46:29 评论

举报

LZ有没有一些关于2.4g的学习资料啊~~
2020-5-7 05:58:04 评论

举报

只有小组成员才能发言,加入小组>>

12下一页

103个成员聚集在这个小组

加入小组

热门话题

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表