求助:STM32下NRF24L01实现双向传输问题
本帖最后由 wenzhouyxc 于 2014-2-24 15:40 编辑选用ACK加载一个数据包进行伪双工双向通讯时,其配置如下:
NRF_Write_Reg(NRF_WRITE_REG+CONFIG, 0x7E);
NRF_Write_Reg(FLUSH_TX,0xFF);
NRF_Write_Reg(FLUSH_RX,0xFF);
SPI_RW(0x50);
SPI_RW(0x73);
NRF_Write_Reg(NRF_WRITE_REG+0x1C,0x01);
NRF_Write_Reg(NRF_WRITE_REG+0x1D,0x06);
发送函数为:
void NRF_TxPacket_AP(uint8_t * tx_buf, uint8_t len)
{
SPI_CE_L(); //StandBy Iģʽ
NRF_Write_Buf(0xa8, tx_buf, len); // ×°ÔØÊý¾Ý
SPI_CE_H(); //ÖøßCE
}
但执行完这条语句后就停在irq!=0,等待发送完成的循环语句里。。。
用万用表测发现IRQ管脚一直为高电平。。
请问将半双工模式改成这种双方通讯,除了发送的函数和上述配置不同,还要改动哪里么?
本帖最后由 wangjt1988 于 2014-2-24 16:31 编辑
这是伪双工 发送方主发送 接收方接受到数据 会返回一个ack 利用这个ack 接收方也能向发送方发送数据 但是 通信发起者 都是发送方 接收方想主动发数据是不行的 加入心跳可以解决这个问题 你的代码应该是我们匿名的 我没开中断 用的查询式 wangjt1988 发表于 2014-2-24 16:30
这是伪双工 发送方主发送 接收方接受到数据 会返回一个ack 利用这个ack 接收方也能向发送方发 ...
是用的你们匿名的。我想在自己画的板子上街上NRF24L01调通伪双工的传输功能。但这方面的具体传输过程不是很了解,请问哪里可以找到相关的资料。
还有就是寄存器1c,1d两个的配置,在手册里找不到这两个寄存器。
如果用模式3和4的话,要验证它是否能双向传输,请问要怎么验证?完全的新手,刚调完模式1和2 wangjt1988 发表于 2014-2-24 16:30
这是伪双工 发送方主发送 接收方接受到数据 会返回一个ack 利用这个ack 接收方也能向发送方发 ...
请问你说的心跳是什么? 心跳就是 发送方就是没什么需要发送的 也要不停发特定数据包给接收方 让接收方有机会发数据给发送方 wangjt1988 发表于 2014-2-24 17:04
心跳就是 发送方就是没什么需要发送的 也要不停发特定数据包给接收方 让接收方有机会发数据给发送 ...
那请问这种验证伪双工的该怎么去写调试代码?也像验证模式1和2一样一个主函数写发数据的代码,一个写接收函数的代码么?
在调试中如果把1D寄存器设置成0X06的话就一直在while(IRQ!=0)中无法发送数据,而设置成你们的0x07就可以发送,查看手册说是一个允许错误的应答信号,是这样么? 这些驱动也是我一年前做好的了 细节都记不清了 先去理解通信的过程 再根据过程想怎么测试 wangjt1988 发表于 2014-2-24 17:18
这些驱动也是我一年前做好的了 细节都记不清了 先去理解通信的过程 再根据过程想怎么测试 ...
嗯。好。太感谢你了 不客气 一起玩 我目前遇到的问题,也是一对一收发短时间行,长时间不行! 路过。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 jiang887786 发表于 2014-5-4 08:45
我目前遇到的问题,也是一对一收发短时间行,长时间不行!
没充分考虑误码情况 请问有这种自动ACk携带数据的方式 的资料吗 绝对零度 发表于 2014-6-11 15:50
请问有这种自动ACk携带数据的方式 的资料吗
楼主贴出的代码就是可以含数据的 我的各种模式都调了;能检测到NRF24l01存在;但就是不能通信,这有那些原因造成的啊; 使用的是NRF24L01+模块
好呀, 我为后人提供一些资料吧 , 这个伪全双工挺诱人的,
NRF24L01+设置为带数据的ACK功能 <http://bbs.eeworld.com.cn/thread-443708-1-1.html>
官方手册对此详细的说明,请看英文原版第7.4节
页:
[1]