打印

nrf24l01发送接收地址的问题

[复制链接]
9109|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen3bing|  楼主 | 2011-12-28 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在搞NRF24L01,从网上下载的程序。
用两个板子,一发一收。先在收的上面测试,
先初始化,写缓存,写寄存器。然后,读缓存,
读寄存器,显示在液晶上,都没问题。
然后,一发一收,却收不到。
我有一个问题,就是接收和发送地址的问题。
例子里code uchar  TX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x01};本机地址
code uchar  RX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x01}; 接收地址
我看了一下,有一条初始化语句:
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
允许接受地址只有频道0。
于是,我改了一下,
code uchar  TX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x00};
code uchar  RX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x00};
还是不行。
改成code uchar  TX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x01};
code uchar  RX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x00};
仍然不行。
接收和发送地址究竟应该怎么设置?
发送程序和接收程序这两个地址应该设置成一样还是不一样?
请高手指教,谢谢!

相关帖子

沙发
chen3bing|  楼主 | 2011-12-28 18:41 | 只看该作者
补充一下,发送和接收程序还有一点不同,发送设为发送模式,接收设为接收模式。

使用特权

评论回复
板凳
culk_2008| | 2011-12-28 23:33 | 只看该作者
把发射和接收的初始化写成一样的,
然后再设发射和接收的寄存器就可以了

使用特权

评论回复
地板
chen3bing|  楼主 | 2011-12-29 08:08 | 只看该作者
不行,还是不行。我很郁闷!

使用特权

评论回复
5
jiebin689| | 2011-12-29 08:38 | 只看该作者
你确定是地址的问题?
数据手册完整的仔细查了吗,24L01中文手册网上有很多的。。。

额...我记得频道和地址好像没有关系的吧。...

使用特权

评论回复
6
chen3bing|  楼主 | 2011-12-29 09:06 | 只看该作者
谢谢!我也不知道哪儿的问题。
中文手册看过了。
我调用的发送方程序为:
uint  i;
init_NRF24L01();
。。。。。。。。。。。。。。
while(1)
        {
                nRF24L01_TxPacket(TxBuf);
               
                for(i=0;i<30000;i++);
        }
接收方程序为:
init_NRF24L01();
      SetRX_Mode();
。。。。。。。。。。。。。。。。。。。。。
while(1)
   {
              rec24=nRF24L01_RxPacket(RX_BUF);
           if(rec24==1)
           {
                     ClearPartColor(REYEL,0,50,48,114);
                  
                  p=number;
                  bai=RX_BUF[0]/100;
                  shi=RX_BUF[0]%100/10;
                  ge=RX_BUF[0]%10;
                  display_chinese(REYEL,BLACK,0,50,16,82,p,bai*64);
                  display_chinese(REYEL,BLACK,16,50,32,82,p,shi*64);
                  display_chinese(REYEL,BLACK,32,50,48,82,p,ge*64);
           }
          
   }

使用特权

评论回复
7
chen3bing|  楼主 | 2011-12-29 09:09 | 只看该作者
code uchar  TX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x01};        //±¾µØµØÖ·
code uchar  RX_ADDRESS[5]= {0x34,0x43,0x10,0x10,0x01};        //½ÓÊÕµØÖ·
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//****************************************************************************************
/*NRF24L01³õʼ»¯
//***************************************************************************************/
void init_NRF24L01(void)
{
    inerDelay_us(100);
        CE=0;    // chip enable
        CSN=1;   // Spi disable
        SCK=0;   // Spi clock line init high
        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // д±¾µØµØÖ·       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // д½ÓÊն˵ØÖ·
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  ÆµµÀ0×Ô¶¯        ACKÓ¦´ðÔÊÐí       
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  ÔÊÐí½ÓÊÕµØÖ·Ö»ÓÐƵµÀ0£¬Èç¹ûÐèÒª¶àƵµÀ¿ÉÒԲο¼Page21  
        SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   ÉèÖÃÐŵÀ¹¤×÷Ϊ2.4GHZ£¬ÊÕ·¢±ØÐëÒ»ÖÂ
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //ÉèÖýÓÊÕÊý¾Ý³¤¶È£¬±¾´ÎÉèÖÃΪ32×Ö½Ú
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                   //ÉèÖ÷¢ÉäËÙÂÊΪ2MHZ£¬·¢É书ÂÊΪ×î´óÖµ0dB       
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQÊÕ·¢Íê³ÉÖжÏÏìÓ¦£¬16λCRC£¬Ö÷·¢ËÍ

}
xdata uchar TxBuf[32]=
{
0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,
0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
};         //

使用特权

评论回复
8
chen3bing|  楼主 | 2011-12-29 09:12 | 只看该作者
/***********************************************************************************************************
/*º¯Êý£ºvoid nRF24L01_TxPacket(unsigned char * tx_buf)
/*¹¦ÄÜ£º·¢ËÍ tx_bufÖÐÊý¾Ý
/**********************************************************************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
        CE=0;                        //StandBy Iģʽ       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // ×°ÔؽÓÊն˵ØÖ·
        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                          // ×°ÔØÊý¾Ý       
//        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQÊÕ·¢Íê³ÉÖжÏÏìÓ¦£¬16λCRC£¬Ö÷·¢ËÍ
        CE=1;                 //ÖøßCE£¬¼¤·¢Êý¾Ý·¢ËÍ
        inerDelay_us(10);
}
/****************************************************************************************************/
/*º¯Êý£ºvoid SetRX_Mode(void)
/*¹¦ÄÜ£ºÊý¾Ý½ÓÊÕÅäÖÃ
/****************************************************************************************************/
void SetRX_Mode(void)
{
        CE=0;
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);                   // IRQÊÕ·¢Íê³ÉÖжÏÏìÓ¦£¬16λCRC        £¬Ö÷½ÓÊÕ
        CE = 1;
        inerDelay_us(130);
}
/******************************************************************************************************/
/*º¯Êý£ºunsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
/*¹¦ÄÜ£ºÊý¾Ý¶ÁÈ¡ºó·ÅÈçrx_buf½ÓÊÕ»º³åÇøÖÐ
/******************************************************************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{
    unsigned char revale=0;
        sta=SPI_Read(STATUS);        // ¶Áȡ״̬¼Ä´æÆäÀ´ÅжÏÊý¾Ý½ÓÊÕ×´¿ö
        if(RX_DR)                                // ÅжÏÊÇ·ñ½ÓÊÕµ½Êý¾Ý
        {
            CE = 0;                         //SPIʹÄÜ
                SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
                revale =1;                        //¶ÁÈ¡Êý¾ÝÍê³É±êÖ¾
        }
        SPI_RW_Reg(WRITE_REG+STATUS,sta);   //½ÓÊÕµ½Êý¾ÝºóRX_DR,TX_DS,MAX_PT¶¼ÖøßΪ1£¬Í¨¹ýд1À´Çå³þÖжϱêÖ¾
        return revale;
}
请高手帮忙,谢谢!

使用特权

评论回复
9
chen3bing|  楼主 | 2011-12-29 09:51 | 只看该作者
都说很好调,为什么我调起来这么费劲?

使用特权

评论回复
10
chen3bing|  楼主 | 2011-12-29 15:55 | 只看该作者
现在发送端接收到应答信号了,可还是没有收到数据。

使用特权

评论回复
11
Metalor| | 2011-12-29 18:26 | 只看该作者
一年多以前在学校玩过一次
也是收不到。。

使用特权

评论回复
12
chen3bing|  楼主 | 2011-12-30 08:18 | 只看该作者
我又看了一下手册,接收方式时CE=1.
是不是unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
程序里CE应该置位为1?可是置位了以后还是收不到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

438

主题

2521

帖子

2

粉丝