EDA365电子论坛网

标题: NRF905多点通信中由于发送过数据而导致接收不到数据了,这要咋解决呢? [打印本页]

作者: BGo    时间: 2022-10-31 11:24
标题: NRF905多点通信中由于发送过数据而导致接收不到数据了,这要咋解决呢?
A发给B或B发给A都可以实现,但是A发给B,B收到后再发给A,A就收不到了,可以确定B确实发出去了,但A没有收到数据,地址和发送接收状态都没问题
! H$ g  \; N; b" \) y      下面我把A和B的主函数发一下
8 @0 N" E4 H0 I- {8 ^7 D" Y7 b- a. l! w! U2 ?
while(1)
/ g  q+ V( }5 O, L{
. c) A! q, s  C- j# `$ B: t  n           SetTxMode();                                // Set Tx Mode2 P  t' o) n$ p* `% [; j3 [
                     TxPacket();                        // Transmit Tx buffer data        8 i: a9 W: P/ ^- V% N
               SetRxMode();
6 j$ ?7 k7 N& \$ E& g2 N& y         //=====================等待NRF905接收3 }  h! I  |) _+ T' h9 g+ w
           if (DR)                        // If recive data ready...& i& I1 g- }# ?6 l
           RxPacket();                        // ... recive data0 m7 O, Z/ o3 e# b" Y5 N1 A
            if(RxBuf[0]==0x01)
  T  p1 }) V% Q" r$ g$ U                 {3 f2 y0 d- a# X. O. _/ z
                         RxBuf[0] =0;* p( _4 X. r; e0 R
                         LED1 = 0 ;
, o) m% t0 V0 Z3 }: p                Delay(1000);                                        // ...light led
: _' ^; i; ~! P+ A( T5 Y+ _3 `2 L             LED1 = 1 ;
; a* I% E3 c" e& U* t                      Delay(500);                                        // ...light led        / g% E& v* W" f+ p' _

2 W6 k! W; _. x7 z) B: {             }- Y2 E( J3 ]# @( }
}
+ A, y2 Q, i, @6 c上面这个是A的程序,下面我把B的程序发一下
  V- b5 q3 h# g. v+ Cwhile(1)( X4 v7 g* O% S
{: g# R5 V, U3 ~4 Y, ~
                SetRxMode();
& ~, K* X# G3 Y6 K         //=====================等待NRF905接收! ?7 N/ j  E0 V* R8 B+ T2 f% I$ y8 \
           if (DR)                        // If recive data ready...9 e5 E4 k7 n& v# }9 a
           RxPacket();                        // ... recive data( C9 }8 W5 \! u3 W8 p8 w
           if(RxBuf[0]==0xaa)3 M+ v. ^- o! ^. P1 p
           {  
, w% t$ J0 |8 C5 r4 T9 u! S: r                   RxBuf[0]=0;9 ]$ W" l9 z/ M* {9 Z" c
             LED1 = 0;5 p  U0 D- E$ s; y- l5 Z
                        Delay(1000);) I5 C) o2 [4 \
                 LED1 = 1;- U; \$ r, T+ L9 D" l) @
                        Delay(500);' Z9 X" s4 T; J3 e) t
        
" W  m. ]4 i; N3 s                         SetTxMode();                                // Set Tx Mode
! u) ^/ A; z+ K# @& ?                     TxPacket();                                // Transmit Tx buffer data3 R& f2 H/ w! `% |; ]4 r4 G1 L
       }
' T' g: @6 C% q8 x% i* s5 d& T}
% ^+ b; d6 E- t' N0 r+ j) T上面这个是B的程序5 a$ V/ Q1 I" }! [
我的目的是通过A发送给B一个命令,B在接收到特定的数据后返回给A数据,在这个过程中可以确定的是B确实收到了,而且B也发出来了,但是A却收不到,而且地址和模式都是对的,这点可以由上面程序看到。. v5 U6 @  F5 p1 s/ O$ p5 {
现在我感觉就是由于A发送过而导致A不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用
; G( z7 v0 S8 G  K1 k
作者: opipo    时间: 2022-10-31 13:07
A此时没有处于接受状态!
( w4 b, |+ W/ ]" _
作者: three    时间: 2022-10-31 14:47
B收到数据LED灯亮一下,你确定B发送的数据是01H吗?是A想要的吗?
1 \, C! i1 E- n+ Y% o
作者: dsgh    时间: 2022-10-31 14:57
A 发送完成以后,设置 REN=1,允许接收,试一试" t+ c  y3 s  q, N3 Q# m& e& z





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2