NRF24L01+模块实现双向通信(带ACK payload)

article/2025/9/21 0:35:48

本文主要关于NRF24L01+ 2.4GHz无线模块的应用。

目录

  • 说明
  • 模块开发的大致步骤
  • 使用方式
    • 一、单向通信
    • 二、双向通信(有应答包(ACK payload))
      • 寄存器配置
    • 三、星状组网
  • 注意事项

说明

1、NRF24L01+和NRF24L01的区别,前者支持Enhanced ShockBurst™,后者不支持Enhanced ShockBurst™。也就是前者支持双向通信,后者不支持双向通信。(当然你如果通过程序手动控制的话,应该也可以实现双向通信,不过应该比较麻烦) 所以,要确定你买的模块是NRF24L01+(注意要带“+”),否则不支持双向通信。有些商家可能是真的不懂,也可能是故意的,标的是NRF24L01+,但实际上是NRF24L01。
2、由于时间原因,本文不可能说的太详细。主要是一些主要的注意事项。
3、文章是我根据数据手册和经验写的,有些功能我没有亲自试过,所以可能会存在一些疏漏或者错误之处。
4、我是用STM32通过SPI来驱动NRF24L01+模块的。

模块开发的大致步骤

1、看产品说明书。nrf24l01+的说明书好像没有中文版的,所以要看英文版。nrf24l01有中文版翻译的说明书,如果不需要双向通信可以看一下。
2、确定模块的寄存器参数(要分发送机和接收机)
3、编程实现有关STM32的SPI读写模块寄存器的操作
4、编程把合适的模块的寄存器参数写入模块
5、下载程序测试、调试

使用方式

一、单向通信

如果要单向通信相对来说比较简单。
根据说明手册配置就好了。

二、双向通信(有应答包(ACK payload))

双向通信比单向通信多了最后两个寄存器(DYNPD和FEATURE寄存器)
感觉整个过程论述起来有点麻烦,不如看NRF24L01+的说明书,不做论述。
所以这里就直接给出我的寄存器配置。

寄存器配置

以下配置为是我的配置,我这里测试是没问题的。读者根据自己的实际应用情况配置即可。
PTX(主发射机):

WriteReg(0x00,0x0E);  //设置CONFIG寄存器() 
WriteReg(0x01,0x01);  //通道0自动应答
WriteReg(0x02,0x01);  //使能接收通道0
WriteReg(0x03,0x03);  //设置地址长度
WriteReg(0x04,0x53);  //自动重传3次,延时1500us
WriteReg(0x05,0x02);  //设置RF频道 
//WriteReg(0x06,0x0E);  //设置发射功率0dbm,速率2Mbps
WriteReg(0x06,0x06);  //设置发射功率0dbm,速率1Mbps
//WriteReg(0x06,0x26);  //设置发射功率0dbm,速率250Kbps
WriteAddrReg(0x0A,recieve_addr[0],recieve_addr[1],recieve_addr[2],recieve_addr[3],recieve_addr[4]); //设置接收地址(自己设置即可)
WriteAddrReg(0x10,send_addr[0],send_addr[1],send_addr[2],send_addr[3],send_addr[4]);                //设置发送地址(自己设置即可)
WriteReg(0x11,0x20);  //通道0接收负载的字节数
WriteReg(0x1C,0x01);  //NRF24L01+ 特有,动态负载长度
WriteReg(0x1D,0x07);  //NRF24L01+ 特有

PRX(主接收机):

WriteReg(0x00,0x0F);  //CONFIG寄存器
WriteReg(0x01,0x01);  //通道0自动应答
WriteReg(0x02,0x01);  //使能接收通道0
WriteReg(0x03,0x03);  //设置地址长度
WriteReg(0x04,0x53);  //自动重传3次,延时1500us
WriteReg(0x05,0x02);  //设置RF频道 
//WriteReg(0x06,0x0E);  //设置发射功率0dbm,速率2Mbps
WriteReg(0x06,0x06);  //设置发射功率0dbm,速率1Mbps
//WriteReg(0x06,0x26);  //设置发射功率0dbm,速率250Kbps
WriteAddrReg(0x0A,recieve_addr[0],recieve_addr[1],recieve_addr[2],recieve_addr[3],recieve_addr[4]); //设置接收地址(自己设置即可)
WriteAddrReg(0x10,send_addr[0],send_addr[1],send_addr[2],send_addr[3],send_addr[4]);  设置发送地址(自己设置即可)
WriteReg(0x11,0x20);    //通道0接收负载的字节数
WriteReg(0x1C,0x01);  //NRF24L01+ 特有,动态负载长度
WriteReg(0x1D,0x07);  //NRF24L01+ 特有

(注:第一个参数是寄存器的地址,第二个参数是寄存器的参数)

三、星状组网

NRF24L01P可以实现星状组网,一个主接收机,1-6个主发射机,每个主发射机与主接收机之间可以实现双向通信。
星状组网示意图,如下图
 星状组网示意图

注意事项

1、关于此模块的使用最主要的就是寄存器的配置和操作的时序。这里已经给出了寄存器的配置参数。
2、操作的时序需要注意CSN置低才能选中该模块。
3、地址不要设置为:(1)000FFFFFFF(16进制) (2)前导码的延续:类似10101010,01010101(转换为二进制后)高低交替。 否则会增加包错误率。
4、主控MCU提前把ACK payload写到TXFIFO(PRX)中,等收到PTX的包后自动把ACK payload发送出去。
5、PRX的TX FIFO有三级,并且遵循先进先发的原则。
6、如果是星型结构如何保证ACKpayload发送到对应的发送机中呢?写ACKpayload命令时会指定通道号。
7、双向通信时可能会出现接收机可以收到数据,而发射机收不到应答的情况。
8、自动重传时间会影响发射机接收应答包的丢包率,250Kbps下自动重传延时要设置的大一点,2Mbps模式下自动重传延时可以设置的小一点。


http://chatgpt.dhexx.cn/article/ehcQPRqg.shtml

相关文章

2.4G模块NRF24L01调试经验

参照野火STM32程序调试NRF24L01成功,颇获喜感 nRF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurstTM模式控制器、功率放大器、警惕振荡器、调制器、解调器。输出功率、频道选择和协议的…

小体积、高速率的nRF24L01芯片通信模块

在选择纯硬件通信模块时, 面对上述问题,AS01提供了很好的解决办法。 AS01系列模块是工作在2.4GHz(ISM频段)的纯硬件模块。此系列基于NORDIC原装nRF24L01P芯片方案开发,提供多种接口形式,具有高空速(最高空速可达到2…

Arduino使用NRF24L01模块进行无线通信

Arduino使用NRF24L01模块进行无线通信 前言 ​ 其实CSDN有很多关于这个无线模块的使用,包括Arduino的使用例程,但是实际自己跟着做一遍的时候还是发现了有些小问题,于是记录一下方便以后做其他有意思的小项目。(Arduino的库文件…

nRF24L01--2.4G无线通信模块(1)(51单片机和51单片机通信)

作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 或者 https://blog.csdn.net/Kevin_8_Lee/article/details/95667604 欢迎转载,但也请保留上面这段声明。谢谢!(上面两个都是我的博客,只是在不同平台…

STM32控制NRF24L01无线模块进行通信

一.NRF2401无线模块 1.模块介绍 功能介绍 (1)2.4Ghz 全球开放ISM 频段免许可证使 2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合 (3)126 频道,满足多点通信和跳频通信需要 (4) 内置硬件CRC 检错和点对…

NRF24L012.4G模块

文章目录 datasheet1. 相关案例:2. nRF24L01通信的常识1. 发送模式。1.5 补充spi一点知识1. SPI读写时序2. 工作模式2.1 收发模式Enhanced ShockBurstTM收发模式Enhanced ShockBurstTM发送流程:Enhanced ShockBurstTM接收流程: 3. SPI指令 3.…

STM32驱动NRF24L01无线模块

目录 一、模块简介二、工作模式三、主要命令四、配置寄存器五、状态寄存器六、接收模式七、发送模式八、STM32使用NRF24L01模块 一、模块简介 NRF24L01是NORDIC公司生产的一款无线通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst 协议&…

nRF24L01无线模块笔记

nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据传输. nRF24L01是一个能兼顾距离和数据速率的无线模块, 在空旷环境下,2M速率15米, 1M速率30米, 250K速率能达到50米. 和蓝牙…

NRF24L01+模块:一对一双向通信,成功!

查找了很多资料,好多都是复制粘贴转发,或者安装英文手册直译的(比如我自己上篇笔记,,),看完还是一脸懵逼,没几个可行的,推荐几个比较实在的资料:手册我也不是…

NRF24L01 无线通信模块使用方法

原文出处:http://blog.csdn.net/mc_hust/article/details/39473913 昨天登录百度账号,无意间发现漏看了好多朋友的私信,其中不少是找我探讨关于NRF2401模块的。从12年到14年的信件都有(平时很少注意系统提示信息。。。&#xff0…

STM32 + 无线通信模块 NRF24L01 数据收发

NRF24L01的模块资料,网上已很详尽了,在这不再重复描述知识点了。 这篇文章的目的,旨在把主要知识点胶接起来,梳理成一套完整的步骤,使器件快速上手汇入工作使用。 将按操作顺序,拆分成7个步骤,…

NRF24L01 无线模块

NRF24L01 简介 NRF24L01 可以实现点对点或者是1(收)对6(发)的无线通信。NRF24L01 采样SPI通信,很方便连接MCU NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下: 1&a…

NRF2401模块

一、模块介绍 (1) 2.4Ghz 全球开放 ISM 频段免许可证使用 (2) 最高工作速率 2Mbps,高效 GFSK 调制,抗干扰能力强,特别适合工业控制场合 (3) 126 频道,满足多点通信和跳频通信需要 (4) 内置硬件 CRC 检错和点对多点通信地址控制…

Nrf24l01无线模块

Nrf24l01无线模块 一,模块介绍 二,接口电路, 模块连接注意点: (1) VCC 脚接电压范围为 1.9V~3.6V 之间,不能在这个区间之外,超 过 3.6V 将会烧毁模块。推荐电压 3.3V 左右。 (2) 除电源 VCC 和接地端&…

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信 NRF24L01一、简介二、引脚功能描述 程序设计一、对 24L01 的程序编程的基本思路如下:二、Tx 与 Rx 的配置过程1、Tx 模式初始化过程:2、Rx 模式初始化过程: 三、基本程序函数…

详解NRF24L01无线收发模块

近日有粉丝朋友留言,希望介绍一下nRF24L01这款无线收发芯片,正巧前不久的电赛有些涉及,因此将自己的一些经验写在这里,希望能有所收获。 前面我们介绍过单片机的几种通信协议,并且初步了解如何操作寄存器进而控制芯片的…

nRF24L01芯片(模块)介绍

nRF24L01芯片(模块)简介 nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。 输出功率频道选择和协议的…

2.4G通信

文章目录 2.4G无线通信实验一、模块简介二、Enhanced ShockBurstTM模式介绍三. 编程1.初始化IO口2.Enhanced ShockBurstTM发送流程3.Enhanced ShockBurstTM发送模式初始化4.Enhanced ShockBurstTM接收流程5.Enhanced ShockBurstTM接收模式初始化6.读函数7.写函数8.主函数 总结 …

无线收发模块——NRF24L01

1、什么是nRF24L01 nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。有着极低的电流消耗。 nRF24L01与5V单片机的连接通过SPI接口进行通讯,输出功率频道选择和协议的设置可以通过SPI 接口进行设置,几乎可以连接到各种单片…

分布式集群脑裂问题

Zookeeper集群"脑裂"问题 - 运维总结 在分布式集群的脑裂问题中,zookeeper脑裂是一个经典的例子。 在zookeeper集群中,有一个leader和多个follower(observer不参与选举,可以忽略),leader通过周…