完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 @追风筝的人@ 于 2015-7-15 22:56 编辑
您好! 能相互讨论下吗?我在用的时候发现了一个奇怪的现象,A发给B或B发给A都可以实现,但是A发给B,B收到后再发给A,A就收不到了,可以确定B确实发出去了,但A没有收到数据,地址和发送接收状态都没问题 下面我把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个回答
|
|
楼主你这是说的啥啊?能描述清楚一点不?另外图片也看不到啊!
|
|
|
|
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不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用 |
|
|
|
不好意思,那个图片当时没传上去,现在我把我的主函数程序发给你们看看 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不能接收到数据了,但是我不知道是不是要重新设置什么东西,我曾经试过重新初始化和重新配置寄存器但是都没用 |
|
|
|
B收到数据LED灯亮一下,你确定B发送的数据是01H吗?是A想要的吗?
|
|
|
|
对,B发送的确实是0x01,而且我还特意通过C验证过确实收到了数据 |
|
|
|
现在就是不清楚为何A会收不到数据,因为这两个程序,只要把其中任何一个的发送部分和另外一个的接收部分去掉都是可以接收到的,所以现在最可能的我感觉是由于A发送过而导致不能接受了。因为我还把A,B的发送接收顺序都调换过一次,相当于换位了一次,结果是B接收不到了和没调换过之前结果一样 |
|
|
|
A 发送完成以后,设置 REN=1,允许接收,试一试!!
|
|
|
|
②、MCU设置TRX_CE、TX_EN为高来激活nRF905 ShockBurst传输;
|
|
|
|
void SetRxMode() { TX_EN=0; TRX_CE=1; Delay(1); // delay for mode change(>=650us) } 这个是我的接收模式设置,在这里把TX—EN设置为低表示接收,REN好像没有这个引脚,你是指TX-EN吧? 但是我把它置低后还是没有收到,我甚至还尝试过把PWN引脚先变低再变高来重启电源,但是还是没有反应 |
|
|
|
刚才我突然间找到原因了,谢谢你对我的提问的支持,万分感谢 |
|
|
|
单片机设置允许接受!REN=1!!找到原因了??什么原因?
|
|
|
|
你好 楼主,我现在也是遇到你的这个问题,请问你是怎么解决的呀?能不能给我分享下你的经验?
|
|
|
|
你好楼主!我遇到和你同样的问题,你是怎么解决的啊?分享一下经验呗 |
|
|
|
你好!这个问题你解决了么? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
TIKOOL太酷信息无线内部通话系统允许多个人一起讲话,频道内会不会很吵?
489 浏览 0 评论
各位大佬好,我用vco替代rtc6705,得到的图像不稳定是怎么回事啊?
1308 浏览 2 评论
1828 浏览 0 评论
1026 浏览 1 评论
2602 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 15:22 , Processed in 1.023838 second(s), Total 72, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号