NRF905多点通信中由于发送过数据而导致接收不到数据了,这要咋解决呢?

2019-07-18 17:17发布

本帖最后由 @追风筝的人@ 于 2015-7-15 22:56 编辑

         您好! 能相互讨论下吗?我在用的时候发现了一个奇怪的现象,A发给B或B发给A都可以实现,但是A发给B,B收到后再发给A,A就收不到了,可以确定B确实发出去了,但A没有收到数据,地址和发送接收状态都没问题file:///C:UsersAdministratorDocumentsTencent Files2994961758ImageC2C``8F5Y$B@EI3TO_~MMV9LQL.png
      下面我把A和B的主函数发一下

while(1)
{
           SetTxMode();                                // Set Tx Mode
                     TxPacket();                        // Transmit Tx buffer data        
               SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
            if(RxBuf[0]==0x01)
                 {
                         RxBuf[0] =0;
                         LED1 = 0 ;
                Delay(1000);                                        // ...light led
             LED1 = 1 ;
                      Delay(500);                                        // ...light led        

             }
}
上面这个是A的程序,下面我把B的程序发一下
while(1)
{
                SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
           if(RxBuf[0]==0xaa)
           {  
                   RxBuf[0]=0;
             LED1 = 0;
                        Delay(1000);
                 LED1 = 1;
                        Delay(500);
        
                         SetTxMode();                                // Set Tx Mode
                     TxPacket();                                // Transmit Tx buffer data
       }
}
上面这个是B的程序
我的目的是通过A发送给B一个命令,B在接收到特定的数据后返回给A数据,在这个过程中可以确定的是B确实收到了,而且B也发出来了,但是A却收不到,而且地址和模式都是对的,这点可以由上面程序看到。
现在我感觉就是由于A发送过而导致A不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
小麦地
1楼-- · 2019-07-18 19:31
楼主你这是说的啥啊?能描述清楚一点不?另外图片也看不到啊!
LYGOK
2楼-- · 2019-07-19 00:18
 精彩回答 2  元偷偷看……
@追风筝的人@
3楼-- · 2019-07-19 00:29
小麦地 发表于 2015-7-14 20:50
楼主你这是说的啥啊?能描述清楚一点不?另外图片也看不到啊!

   不好意思,那个图片当时没传上去,现在我把我的主函数程序发给你们看看
while(1)
{
           SetTxMode();                                // Set Tx Mode
                     TxPacket();                        // Transmit Tx buffer data       
               SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
            if(RxBuf[0]==0x01)
                 {
                         RxBuf[0] =0;
                         LED1 = 0 ;
                Delay(1000);                                        // ...light led
             LED1 = 1 ;
                      Delay(500);                                        // ...light led       
            
             }
}
上面这个是A的程序,下面我把B的程序发一下
while(1)
{
                SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
           if(RxBuf[0]==0xaa)
           {  
                   RxBuf[0]=0;
             LED1 = 0;
                        Delay(1000);
                 LED1 = 1;
                        Delay(500);
       
                         SetTxMode();                                // Set Tx Mode
                     TxPacket();                                // Transmit Tx buffer data
       }
}
上面这个是B的程序
我的目的是通过A发送给B一个命令,B在接收到特定的数据后返回给A数据,在这个过程中可以确定的是B确实收到了,而且B也发出来了,但是A却收不到,而且地址和模式都是对的,这点可以由上面程序看到。
现在我感觉就是由于A发送过而导致A不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用
@追风筝的人@
4楼-- · 2019-07-19 03:28
LYGOK 发表于 2015-7-15 14:03
A此时没有处于接受状态!

   不好意思,那个图片当时没传上去,现在我把我的主函数程序发给你们看看

while(1)
{
           SetTxMode();                                // Set Tx Mode
                     TxPacket();                        // Transmit Tx buffer data       
               SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
            if(RxBuf[0]==0x01)
                 {
                         RxBuf[0] =0;
                         LED1 = 0 ;
                Delay(1000);                                        // ...light led
             LED1 = 1 ;
                      Delay(500);                                        // ...light led       
            
             }
}


上面这个是A的程序,下面我把B的程序发一下


while(1)
{
                SetRxMode();
         //=====================等待NRF905接收
           if (DR)                        // If recive data ready...
           RxPacket();                        // ... recive data
           if(RxBuf[0]==0xaa)
           {  
                   RxBuf[0]=0;
             LED1 = 0;
                        Delay(1000);
                 LED1 = 1;
                        Delay(500);
       
                         SetTxMode();                                // Set Tx Mode
                     TxPacket();                                // Transmit Tx buffer data
       }
}


上面这个是B的程序


我的目的是通过A发送给B一个命令,B在接收到特定的数据后返回给A数据,在这个过程中可以确定的是B确实收到了,而且B也发出来了,但是A却收不到,而且地址和模式都是对的,这点可以由上面程序看到。
现在我感觉就是由于A发送过而导致A不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用
LYGOK
5楼-- · 2019-07-19 09:06
B收到数据LED灯亮一下,你确定B发送的数据是01H吗?是A想要的吗?
@追风筝的人@
6楼-- · 2019-07-19 14:27
LYGOK 发表于 2015-7-16 15:02
B收到数据LED灯亮一下,你确定B发送的数据是01H吗?是A想要的吗?

对,B发送的确实是0x01,而且我还特意通过C验证过确实收到了数据