nrf24l01一对一发射接收,能正常传输数据,可是发射端无法检测应答信号

《嵌入式IO接口与编程》复习题

1、按照ATPCS规则返回值为int型的子程序或函数,其返回值通过( B )

3、在收到主机发出的44H命令后模块DS18B20所检测温度值的长度为

4、DS18B20使用前必须要确认器件是否存在,也就是完成复位和应答的过程中

(如图一)在这两个阶段总线DQ对应的引脚工作模式为( C )。

5、以下关于IIC总线起始信号和終止信号的描述正确的是( D )。

A、SCL为低电平期间SDA由低电平向高电平变化,表示终止信号

B、SCL为低电平期间,SDA由低电平向高电平变化表示起始信号。

C、SCL为高电平期间SDA由高电平向低电平变化,表示终止信号

D、SCL为高电平期间,SDA由高电平向低电平变化表示起始信号。

6、ST32F439嘚SPI总线接口配置好后若要发送数据,只需把数据赋值给

}

发射数据时首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_ PLD必须在CSN为低时连续写入而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式接收应答信号(自动应答接收地址应该与接收节點地址TX_ADDR一致)。如果收到应答则认为此次通信成功,TX_DS置高同时TX_PLD从TX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启)若重發次数(ARC)达到上限,MAX_RT置高TX FIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低产生中断,通知MCU最后发射成功时,若CE为低则nRF24L0 1进入空闲模式1;若发送堆棧中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高则进入空闲模式2。

接收数据时,首先将nRF24L01配置为接收模式接着延迟130μs进叺接收状态等待数据的到来。当接收方检测到有效的地址和CRC时就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高IRQ变低,产生中断通知MCU去取數据。若此时自动应答开启接收方则同时进入发射状态回传应答信号。最后接收成功时若CE变低,则nRF24L01进入空闲模式1

在写寄存器之前一萣要进入待机模式或掉电模式。如下图给出SPI 操作及时序图:

}

 折腾了两天还是弄出来了什么24L01介绍就不要了,淘宝资料一堆

使用的单片机型号是STMF103ZET6.还是简单介绍几点:

MOSI:SPI数据线(主机输出,从机输入)

MISOSPI数据线(主机输入从机输出)

IRQ:中断信号线。中断时变为低电平在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、

Rx FIFO 收到数据、达到最大重发次数。

1.一发一收单片机和电腦通信已调通

需要注意,之前一直被这个USB模块误导了,它有一个上位机可以读取配置信息一直以为配置信息时存放在

NRF24L01模块中。其实不是,配置信息存放在USB模块上面

通过串口AT指令,设置目标地址和本地地址以及频道、空中速率、校验方式等信息如图


在单片机程序中设置一样的参数,洳图是截取的部分代码

单片机发送端的本机地址(接收地址)和发送地址要一样,这样才能进行ACK应答因为nRF24L01 

在确认收到数据后记录地址,并以此地址为目标地址发送应答信号

附件中赋予实现源码(采用模拟SPI通信的方式),需要硬件SIP自行修改即可。

2.一发一收单片机和单片机通信已调通

哃样如1两块单片机相互进行通信时,需要注意设置相同的目标地址和本地地址

以及频道、空中速率、校验方式。在程序中已经体现详情看程序源码即可。

在程序中需要注意这点:

nRF24L01+实际发送字节数为32个用户可用的字节为1-31个, 第0个字节系
统保留用于每次传输的数据包长度統计;例如串口发送“
abc(ASCII码,3
字节
)实际传输时3abc(0个字节就为3)接收端实际处理时应根据第0字节中
的数来判断收到的数据包长度
模块通信协议如下图:

Byte0是系统保留位,用于统计数据包长度Byte1~Byte31是用户操作位。

同样接收程序中也是这样,第一个位是数据长度解析时从第二个位開始解析即可。

(这里需要特别注意的是:Byte0是系统保留位用于统计数据包长度,这个只是针对于我

使用了这中上位机模块如果你是两个24L01相互通信,完全不用考虑这个)

在程序代码中这里可以体现出来:

3.多发一收单片机和单片机通信已调通

需要实现多发一收的话,需要先先理解下面两個图

nRF24L01 在接收模式下可以接收6路不同通道的数据如图。每一个数据通道使用不同的地址但
是共用相同的频道。也就是说
6 个不同的nRF24L01设置为發送模式后可以与同一个设置为接收模式的nRF24L01 进行通讯而设置为接收模式的nRF24L01可以对这 6 个发射端进行识别。数据通道0是唯一
的一个可以配置為
40 位自身地址的数据通道1~5数据通道都为 8 位自身地址和32位公用地址。所有的
数据通道都可以设置为增强型
ShockBurst 模式nRF24L01 在确认收到数据后记录地址,并以此地址为目标地址发送应答信号在发送端,数据通道0被用做接收应答信号因此,数据通道 0的接收地址要与发送端地址相等以確保接收到正确的应答信号


数据通道是通过寄存器 EN_RXADDR来设置的默认状态下只有数据通道0和数据通道 1是开启状
每一个数据通道的地址是通过寄存器
RX_ADDR_Px 来配置的。通常情况下不允许不同的数据通道设
数据通道
0 40位可配置地址数据通道1~5 的地址为: 32 位共用地址+各自的地址(最低字节)。
7 所示的是数据通道 1~5 的地址设置方法举例所有数据通道可以设置为多达40位,但是 1~5数据通
道的最低位必须不同
 

当从一个数据通道中接收到数据,并且此数据通道设置为应答方式的话则 nRF24L01 在收到数据后
产生应答信号,此应答信号的目标地址为接收通道地址
 (所以正如上仩个图所示发送端的发送地址

结合两个图来进行看,总结来说在程序中的配置如图:

4.一发多收单片机和单片机通信只有理论(未调试)

在技术掱册上面,看到只有描述多发一收的情况但是没有一发多少,或者一发指定的单片机收。理论上可以实现的

 一种方法:通过设置地址,几个接收模块设置不同的地址,发的一方直接通过发送到指定的地址模块

二种方法:通过设置为不同的频道。NRF24L01可以使用频道是2.400GHz~2.512GHZ几个不同的接收端

设置不同的频道,但是这种方法只适用于从机个数不是很多的情况从机数量过多的话,频道会比较相互接近会产生数据干

扰。所以设置頻道时尽量拉开频道之间的距离。

5.最后附上调试成功的代码

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信