天线|RF射频
直播中

袁嫚玲

7年用户 179经验值
私信 关注
[问答]

nrf24l01带数据返回的ack并且可以实现变数据长度收发

nrf24l01带数据返回的ack,并且可以实现变数据长度收发

三个缓冲区,先进先出 first in – first out,第一个截图最后说了,要是保证缓存的就是要发送的,请清除FLUSH_TX
If the TX FIFO (PRX) contains more than one payload to a PTX, payloads are handled using the first in –
first out principle. The TX FIFO (PRX) is blocked if all pending payloads are addressed to a PTX where the
link is lost. In this case, the MCU can flush the TX FIFO (PRX) by using the FLUSH_TX command.也就是修改下面这个函数
void NRF24L01_PacketAckData(u8*pBuf,u8 Len)//发送数据包,用于发送模式2/4?
{
         NRF24L01_CE=0;        
         NRF24L01_Write_Buf(W_ACK_PAYLOAD,pBuf,Len);
         NRF24L01_CE=1;        
}
void NRF24L01_PacketAckData(u8*pBuf,u8 Len)//发送数据包,用于发送模式2/4?
{
         NRF24L01_CE=0;        
         NRF24L01_Write_Reg(FLUSH_TX, 0xff);
         NRF24L01_Write_Buf(W_ACK_PAYLOAD,pBuf,Len);
         NRF24L01_CE=1;        
}
不过也仅限于提前装载ack数据的方案
4:参考的例子很多才搞好,参考的例子就不附带了

回帖(27)

张文婷

2020-7-29 05:50:30
我去年调的动态字节长度接受和发送
https://wenku.baidu.com/view/c8861fb3ad02de80d5d840b5
举报

陈晨

2020-7-29 05:56:24
看论坛上您对2401研究比较深,
上次关于延时滴达的问题也向您请教过,
真的是收益不少.
最近,我空闲也研究了一下2401,
有的时候真的是被它搞的很头疼,
一对一的时候问题不大,
但一对多的时候, 会莫名的失联,
其它我数传量并不大,
大概10秒多传一组32字节都行.
试验时距离近, 传输应该很通畅,
但时常会发生MAX_RT(或者是其它)的问题,
表现在通信网络不稳定, 莫名地就与某一成员失联.
有什么经验之谈或是要特别注意的问题吗?
举报

杨阳

2020-7-29 06:06:13
一对一问题不大是有问题还是没问题?
多对一,你这种数据量这么小,假如是单向,发送端直接发送就可以了
假如是双向,就主机轮训吧,最可靠
时常发生MAX_RT,那就是你的代码还是有问题
不过最简单的就是从机相互之间对着主机乱发,用32的数据中的某一位区分从机地址
举报

阎慧

2020-7-29 06:11:51
你说的这种乱发, 是不带ACK应答的吧.
我用的是带ACK的.
基本相当于是轮询了.
比如一对二, 主机采集一些信息,
分别对两个从机进行分发,
从机各占一个地址, 主机开两个通道,
对1机发送时切换到1机地址(包括P0也同步改变)
对2机发送时切换到2机地址(包括P0也同步改变)
每一次发送结束都恢复P0和P1两个通道对两从机的接收
两个从机很少主动发信息, 偶尔发送简单控制或配置信息,
所有各终端都采用中断方式(但发送时还是等待发送结果再往下进行的)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分