两个嘴巴笑110 发表于 2014-7-9 17:44:11

NRF24L01问题!数据发不出去。求解答。

NRF24L01检测是否存在,成功了。但是发不出数据。。


测试是IRQ引脚没有反应。


代码如下:
mian.c代码:
        SysInit();//ϵͳ³õʼ»¯º¯Êý
        UsartInit();//´®¿Ú³õʼ»¯º¯Êý
        LCD_init(); //LCD5110³õʼ»¯º¯Êý
        SPI_init(); //SPI×ÜÏߵijõʼ»¯
        LCD_clear();
       
        //³õʼ½çÃæ
        LCD_write_string(0,0,"Please Wait...");//5110½çÃæ
       
        SendString("Hello!"); //´®¿Ú´òÓ¡Êý¾Ý
        SendString("\r\n");
        SendString("This is NRF24L01 Test..");
        SendString("\r\n");
        SendString("xiaoxiao110");
        SendString("\r\n");
        SendString("2014-07-09");
        SendString("\r\n");
        SendString("\r\n");
        SendString("\r\n");
        Delay50ms(20);
       
        while(1)//¼ì²âNRF24L01ÊÇ·ñÔÚÏß
        {               
                if(NRF24L01_Check())//ûÓмì²âµ½NRF24L01 É豸
                {
                        LCD_write_string(0,0,"NRF24L01 Check Failed!");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
                               
                        SendString("NRF24L01 Check Failed...");//´®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                        SendString("\r\n");
                        SendString("\r\n");
                        Delay50ms(50);
                }
                else//ÕÒµ½NRF24L01 É豸
                {
                        LCD_clear();
                        LCD_write_string(0,0,"NRF24L01 Check Success...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
                        LCD_write_string(0,27,"NRF24L01 is OK!");       
                       
                        SendString("NRF24L01 Check Success...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                        SendString("\r\n");
                        SendString("\r\n");
                        Delay50ms(50);
                        break;
                }
        }
       
       
       
        TX_Mode();//ÉèÖÃNRF24L01Ϊ·¢ËÍģʽ
       
        LCD_clear();
        LCD_write_string(0,0,"Please Wait...");
        LCD_write_string(0,18,"NRF24L01 in Sending Data...");
       
        SendString("Please Wait...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
        SendString("\r\n");
        SendString("NRF24L01 in Sending Data...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
        SendString("\r\n");
        SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
        SendString("\r\n");
        SendString("\r\n");
       
       
        Delay50ms(50);
        Delay50ms(50);
       
        TX_Mode();
       
        while(1)
        {
                TX_Mode();

                if(NRF24L01_TxPacket(NRF_SendBuf) == TX_OK)
                {
                        LCD_clear();
                        LCD_write_string(0,0,"NRF24L01 Send Success...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
                       
                        SendString("NRF24L01 Send Success...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                       
                        SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                        SendString("\r\n");
                       
                        Delay50ms(20);
                        Delay50ms(20);
                }

                else
                {
                        LCD_clear();
                        LCD_write_string(0,0,"NRF24L01 Send Failed...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
                       
                        SendString("NRF24L01 Send Failed...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                       
                        SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
                        SendString("\r\n");
                        SendString("\r\n");
                       
                        Delay50ms(20);
                        Delay50ms(20);
                }



子函数代码:
void TX_Mode(void)
{
//        unsigned char temp;
        CE=0;
       
        SPI_Write_Buf(SPI_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
        SPI_Write_Buf(SPI_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
        SPI_Write_Buf(WR_TX_PLOAD, NRF_SendBuf, TX_PLOAD_WIDTH); // Writes data to TX payload

        SPI_RW_Reg(SPI_WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
        SPI_RW_Reg(SPI_WRITE_REG + EN_RXADDR, 0x01);// Enable Pipe0
        SPI_RW_Reg(SPI_WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
        SPI_RW_Reg(SPI_WRITE_REG + RF_CH, 40);      // Select RF channel 40
        SPI_RW_Reg(SPI_WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
       
        SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e);
//        temp = SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e);   // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
//        SendChar(temp);
//        SendString("\r\n"); //²âÊÔʹÓÃ
        CE=1;

}


unsigned char NRF24L01_TxPacket(unsigned char *txbuf)
{
        unsigned char state;   
    unsigned int timeout = 0;
   
        CE=0;
        SPI_Write_Buf(SPI_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
        SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//дÊý¾Ýµ½TX BUF32¸ö×Ö½Ú
//         SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e);
       
        CE=1;                                     //Æô¶¯·¢ËÍ          
        while(IRQ != 0) //µÈ´ý·¢ËÍÍê³É
        {
                ;
//                timeout++;
//                if(timeout >9000)
//                        break;
        }
        state = SPI_Read(STATUS);                     //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ
       
        SendChar(state);
        SendString("\r\n");
       
        SPI_RW_Reg(SPI_WRITE_REG+STATUS,state);      //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾
        if(state&MAX_TX)                                     //´ïµ½×î´óÖØ·¢´ÎÊý
        {
                SPI_RW_Reg(FLUSH_TX,0xff);               //Çå³ýTX FIFO¼Ä´æÆ÷
                return MAX_TX;
        }
        if(state&TX_OK)                                    //·¢ËÍÍê³É
        {
                return TX_OK;
        }
        return 0xff;                                       //ÆäËûÔ­Òò·¢ËÍʧ°Ü
}




两个嘴巴笑110 发表于 2014-7-9 17:47:16

发现复制代码有点累。我直接把文件上传,希望懂的大神给我看一下,顺便给我指正。

我用的单片机为STC11L04E

用5110和串口来调试。

两个嘴巴笑110 发表于 2014-7-9 17:48:05

我不知道是什么地方出现问题了。但是网上大多数的代码都是这样。。

登云钓月 发表于 2014-7-9 17:55:33

开启了自动应答了吧!?把自动应答关了试试?

两个嘴巴笑110 发表于 2014-7-9 17:59:51

登云钓月 发表于 2014-7-9 17:55
开启了自动应答了吧!?把自动应答关了试试?

是直接屏蔽那条自动应答的不?
我试过了,还是没有效果啊;。

404710520 发表于 2014-7-9 18:44:22

两个嘴巴笑110 发表于 2014-7-9 17:59
是直接屏蔽那条自动应答的不?
我试过了,还是没有效果啊;。

楼主用51的话切换到发送模式后稍微延时下,在发送数据

天行者 发表于 2014-7-9 19:27:20

当初我调这个也不容易,多看。你可以先找一个可用的进行移植。

两个嘴巴笑110 发表于 2014-7-9 20:29:12

天行者 发表于 2014-7-9 19:27
当初我调这个也不容易,多看。你可以先找一个可用的进行移植。

主要是没有可以直接用的啊?你这边有你以前自己测试有用的不?有的话,可以给我一下不,小弟在此感谢你哈。
邮箱:xiaomf2012@qq.com

天行者 发表于 2014-7-9 20:42:54

当是我是用51的一个小板子调的。你没有这个板子,可能要在陶宝上买一下。

两个嘴巴笑110 发表于 2014-7-10 10:16:38

天行者 发表于 2014-7-9 20:42
当是我是用51的一个小板子调的。你没有这个板子,可能要在陶宝上买一下。
...

我用的就是51的板子,但是是我自己做的,所以没有现成的测试代码、。。搞的我很头疼啊

天行者 发表于 2014-7-10 10:23:56

我发给你了,你看一下吧。

两个嘴巴笑110 发表于 2014-7-10 11:04:44

天行者 发表于 2014-7-10 10:23
我发给你了,你看一下吧。

没有啊。你是用邮箱发的么?

天行者 发表于 2014-7-10 11:09:22

没成功,我再发一下吧。

煮酒fu 发表于 2014-7-10 11:10:18

登云钓月 发表于 2014-7-9 17:55
开启了自动应答了吧!?把自动应答关了试试?

自动应答开启没有问题的,我的就开着呢。

煮酒fu 发表于 2014-7-10 11:11:07

代码看起来一团乱,没法看。

天行者 发表于 2014-7-10 11:18:43

发了,你查一下。

两个嘴巴笑110 发表于 2014-7-10 11:18:47

煮酒fu 发表于 2014-7-10 11:11
代码看起来一团乱,没法看。

不是很乱吧。。你可以直接下载来看看吧。直接看程序应该会好一点哈。。。麻烦你帮我看一下哈

煮酒fu 发表于 2014-7-10 11:26:17

两个嘴巴笑110 发表于 2014-7-10 11:18
不是很乱吧。。你可以直接下载来看看吧。直接看程序应该会好一点哈。。。麻烦你帮我看一下哈 ...

no,我现在调试代码都调试的头疼,就不帮你看了。哈,别生气哟。

两个嘴巴笑110 发表于 2014-7-10 11:42:40

煮酒fu 发表于 2014-7-10 11:26
no,我现在调试代码都调试的头疼,就不帮你看了。哈,别生气哟。

好吧。。

煮酒fu 发表于 2014-7-10 11:44:56

两个嘴巴笑110 发表于 2014-7-10 11:42
好吧。。

你看我发表的帖子吧。里面有我调通的代码。

两个嘴巴笑110 发表于 2014-7-10 13:54:14

煮酒fu 发表于 2014-7-10 11:44
你看我发表的帖子吧。里面有我调通的代码。

好的,谢谢哈。兄弟。

煮酒fu 发表于 2014-7-10 16:11:25

两个嘴巴笑110 发表于 2014-7-10 13:54
好的,谢谢哈。兄弟。

你是妹子不?

x007qinyu 发表于 2014-7-11 09:01:36

我不记得是哪一年前调过51版本和AVR版本的2401,应该还能找到代码,是一主多从的。

steaven2000 发表于 2014-7-11 09:37:32

确认你这个nRF2401在发送时,有对应好的nRF2401准备好接收了。

没有准备接收的nRF2401,你这个是发不出去的。

00superman00 发表于 2014-7-11 11:23:30

第不要同一个

hengyong1314 发表于 2014-8-12 17:06:39

两个嘴巴笑110 发表于 2014-7-10 10:16
我用的就是51的板子,但是是我自己做的,所以没有现成的测试代码、。。搞的我很头疼啊 ...

现成的程序要理解才是属于你的东西,下载的最简单的需要修改配置初始化之类的才能用
页: [1]
查看完整版本: NRF24L01问题!数据发不出去。求解答。