nrf24l01

NRF24L01 无线通信模块使用

ε祈祈猫儿з 提交于 2019-11-30 02:50:08
NRF24L01驱动代码下载: http://download.csdn.net/detail/ieczw/7029597 NRF24L01调试了近一个星期!多多少少有点浪费感情,因为由于板子的问题害的我一直无法调通,后来又找了两块板子,立马搞好!当然我的程序很大成分上是参考老一辈革命家的;但是在这之间,由于板子的问题,迫使我对NRF24L01的datasheet进行了一番研究! NRF24L01与控制器的通信采用的SPI通信协议,这个协议具体细节大家可能都懂,不懂的可以之间百度;他们的通信模型是这样的: NRF*之间基本上可以互相通信,只要你地址设置的没有问题!他有六个通道,每一个通道都有自己的缓冲区,这六个通道可以同时跟不同的NRF进行通信,但是通信的两个之间的TX_ADDR和RX_ADDR一定要相同; 这幅图能够充分的说明这个问题;Point1 to Point2,Point1和Point2的通道地址一定要一样;具体的设置在下面这个寄存器里面配置: NRF24L01有RX模式,TX模式,Standby-I模式,Standby-II模式,掉电模式;他们之间的模式转换如下图: 这张图看着可能没有一点感觉,比较乱,下面这张可能会比较清晰一点: 只要我们想切换到什么模式就可以根据这个对寄存器进行配置;不过在配置的过程中,一点要注意适当的延时,我这次也被这个延时纠结了半天;

NRF24L01多发单收配置

余生颓废 提交于 2019-11-30 02:49:50
NRF24L01多发单收配置 NRF24L01 经过测试,多发单收时候–通道0和1可以设置成为发射和接收模式,通道2345不可以发射模式(反正接收不到数据); 于是多发单收时候采用了设置通道0的单通道模式,而发射机发射时候采用不同频率(频道)和不同地址发射,接收多路测试成功。 来源: CSDN 作者: weixin_43075782 链接: https://blog.csdn.net/weixin_43075782/article/details/83216972

NRF24L01的多对一通信

末鹿安然 提交于 2019-11-30 02:49:31
一、一对一通信 要弄懂NRF的多对一通信,我们先要清楚NRF的一对一通信的地址设置,为了解说通俗我们将NRF24L01之间的通信比作两个人写信交流:首先寄信方将信件寄给收信方,收信方收到信件之后回信给寄信方确认收到信件。(以上为NRF24L01一次通信的过程,即发送端T发送信息给接收端R的流程)要完成双方的信件互通,那么双方都要知道对方的地址。这对应着NRF24L01作为发送端T时要设置1、发送地址:TX_ADDR。2、应答信号地址:RX_ADDR_P0(通道0用来接收接收端R的应达信号)。而接收端R要设置接收地址:RX_ADDR_Px(x取值为0到5,一个NRF24L01有6个通道,每一个通道都能设置作为接收信号的通道) 以上三个地址都要设置为相同的值。因为A发送信息给B,B把A的发送地址作为目标地址发回一个应答信号ACK,所以发送地址=应答信号地址=接收地址。注意:只有发送端的通道0才能接收应答信号。 二、多对一通信 多对一通信是指多个NRF24L01无线传输模块对一个NRF24L01无线传输模块进行数据传输,NRF24L01之所以能够进行多对一通信是因为:一个NRF24L01具有6个通道,每一个通道都能够接收信息。 对于接收端R:我们将NRF24L01接收端R的6个数据通道的地址设置为不同的值, 注意: 接收端通道0 RP0和接收端通道1 RP1的地址能随意设置,但是Rp2

NRF24L01的通道1 频道40配置:

喜欢而已 提交于 2019-11-30 02:48:57
NRF24L01的通道1,频道40配置: 1、修改频道: //#define CHANAL 40 //频道选择 #define CHANAL 10 //频道选择 2、保证 接发收地址宽度一致 #defineTX_ADR_WIDTH 5 //发射地址宽度 #define RX_ADR_WIDTH 5 3、修改接发收函数 void NRF_RX_Mode(void) { NRF_CE_LOW(); // 修改为通道1 寄存器地址 //SPI_NRF_WriteBuf(NRF_WRITE_REG+ RX_ADDR_P0 ,RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址 SPI_NRF_WriteBuf(NRF_WRITE_REG+ RX_ADDR_P1 ,RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址 //SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x00); //使能通道0的自动应答 SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x02); //使能通道1的自动应答 //修改后 0x01 改为0x02 //SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址 SPI_NRF_WriteReg(NRF_WRITE

STM32驱动NRF24L01

烈酒焚心 提交于 2019-11-30 02:46:55
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1. 简介 NRF24L01是 nordic 的无线通信芯片,它具有以下特点: 1) 2.4G 全球开放的 ISM 频段(2.400 - 2.4835GHz),免许可证使用; 2)最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力强; 3) 125 个可选的频道,满足多点通信和调频通信的需要; 4)内置 CRC 检错和点对多点的通信地址控制; 5)低工作电压(1.9~3.6V),待机模式下状态为 26uA;掉电模式下为 900nA; 6)可设置自动应答,确保数据可靠传输; 7)工作于EnhancedShockBurst 具有Automatic packet handling,Auto packet transaction handling ,可以实现点对点或是 1 对 6 的无线通信,速度可以达到 2M(bps),具有可选的内置包应答机制,极大的降低丢包率。 8)通过 SPI 总线与单片机进行交互,最大通信速率为10Mbps; 1.1 结构框图 如图右侧为六个控制和数据信号,分别为 CSN、 SCK、 MISO、 MOSI、 IRQ、 CE。 信号线 功能 CSN 芯片的片选线, CSN 为低电平芯片工作 SCK 芯片控制的时钟线(SPI 时钟)

STM32驱动NRF24L01一对多的通信---可变数据包宽度

蹲街弑〆低调 提交于 2019-11-30 02:46:35
既然是一对多可变payload宽度的通信,肯定是包含两个方面: (1)能进行一对多通信(同个频道下一般最多是一对六) (2)发送的数据包宽度是可变的 配置NRF24L01进行一对多通信,前提是一对一通信机制必须要清楚。 我个人的理解是这样的 PTX端需要配置的地址TX_ADDR和RX_ADDR PRX端需要配置的地址RX_ADDR 至于以上地址在这个机制中是怎么用的,为什么会相同,下面会解释。 进入正题 ShockBurst™下数据包格式: PTX端发送数据前,会先对数据进行打包。在这个数据包红色框中的就是PTX发射端的地址TX ADDR。当PRX接收到一包有效的数据时,它会解析这个数据包中的Address地址是否跟它自身RX_ADDR相同,如果是相同的,那它就认为这是个发给我的包,如果不相同呢,那肯定是发给别人的包,就会被丢弃。好的,发送和接收都搞明白了,还有应答信号(前提是使能了自动应答)。前面说了PRX会对比Address地址是否跟自身RX_ADDR相同,一旦对比成功,PRX会自动转换到发送模式并以这个地址作为发送地址发送应答信号。那么PTX是怎么接收这个应答信号的呢(前提是使能了自动应答),PTX在发送了一包数据后会自动转换为接收模式,等待接收PRX发过来的应答信号。那PTX是怎么知道需要接收哪个从机发送过来的应答信号呢,PTX端的RX_ADDR就起作用了

STM32F103之NRF24L01的发送 接收调试,多通道接收等总结与反思

萝らか妹 提交于 2019-11-30 02:46:26
问题4:是否可以一对多相互通信? 答:可以。nrf24l01最多一对几个呢?答案是无数个!官方手册上说,nrf24l01可以一对六,指的是自身的通道有6个,而且这种模式只能是,不能1发6收。所以我们一般不用这种方式。我们一般只用nrf24l01的通道0,通过改变频道和地址来实现1对多的互发。它属于2.4G芯片,1收6发 但实际上,可以在2.4G到2.5G之间的频道上通信,一共有126个频道,它的地址是5字节的。所以用这种方式,可以实现一对无数的通信。实际上由于环境中的各种干扰,太多了就乱了,可以设置频率间隔大些,所以也是有限制的。 问题5:实现一对多通信的一种最常用的办法 一对多,最常用的办法就是跳频通信,其实就是换频道。原理:假设现在1对10通信相互收发数据,给10个节点的NRF24L01设置为不同的频道,如10 20 30 ……主机的NRF24L01,要想获得某个节点的数据,就设置为某个节点的频道,然后收发数据,完成以后,可以再去和另外一个节点通信。由于单片机运行速度快,依次获取10个节点的数据,非常快,瞬间完成。 来源: CSDN 作者: Heroanita 链接: https://blog.csdn.net/qq_31530791/article/details/80720102

NRF24L01多通道通讯

走远了吗. 提交于 2019-11-30 02:45:41
nRF24L01 是一款工作在 2.4~2.5GHz 世界通用 ISM 频段的单片无线收发器芯片。 NRF24L01 单通道实现通讯很简单,只要收发方地址设置正确,就能正常通讯。 但是 NRF24L01 多通道通信,有很多误区。官网的数据手册描述的也是模糊不清,经过我 不断的调试和收集资料,有了点小成果。 一: NRF24L01 支持多通道收发 对于这个多通道有很多理解,(特别和啊海的理解冲突), 现在实验证明: NRF24L01 只有通道 0 可以发射数据和接收,通道 12345 只能接收数据。 而且通道 2345 的高字节 bit39~8 和地址 1 共用。设置为发送模式时不需要选择通道,因为 硬件默认设置发送模式下为通道 0 发送。 正常通讯的结构是 6 个发射机发数据给 1 个接收机接收。 二: RX --TX 地址设置 一个芯片最多可以设置 6 个接收地址。 所以多对一发送比较简单。 但是想要一对多发送的话 就只能一个一个发送了。 nRF24L01 配置为接收模式时可以接收 6 路不同地址,相同频率 的数据 每个数据通道拥有自己的地址, 并且可以通过寄存器来进行分别配置 - 。 每一个数据 通道的地址是通过寄存器 RX_ADDR_Px 来配置的,正常通讯情况下不允许不同的数据通 道设置完全相同的地址。 u8 TX_ADDRESS0[TX_ADR_WIDTH]={ 0x00