前言

  最近野火STM32论坛(www.firebbs.cn)发起了一个开源平衡车的项目,于是就跟着大家一起动手做起了开源平衡车,其中就用到了2.4G NRF24L01无线模块。通过对NRF24L01中英文手册的参考,对其做如下总结,将主要的知识点以博客的形式呈现出来。如果想要对NRF24L01进行更深入的理解,还请以中英文手册为主(本博文内容都能在中英文手册中找到)。

一、概述

   NRF24L01是一款工作在2.4G~2.5GHz世界通用的ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型ShockBurst模式控制器、功率放大器、晶体振荡器、调制器、解调器。

二、基本功能

  1)真正的GFSK单片式收发芯片
  2)增强型ShockBurst功能
  3)地址及CRC校验功能
  4)无线速率:1或2Mbps
  5)SPI接口速率:0~8Mbps
  6)125个可选的工作频道
  7)低工作电压:1.9~3.6V

三、模块引脚说明

  下面以深圳云佳科技有限公司的NRF24L01模块为例,对2.4G NRF24L01模块引脚进行说明。模块如下图所示。

  GND——GND
  VCC——VCC
  CE——数字输入,RX或TX模式选择
  CSN——数字输入,SPI片选信号
  SCK——数字输入,SPI时钟
  MOSI——数字输入,从SPI数据输入脚
  MISO——数字输出,从SPI数据输出脚
  IRQ——数字输出,可屏蔽中断脚

四、NRF24L01的SPI命令宏定义

    #define NRF_READ_REG        0X00    //读配置寄存器#define NRF_WRITE_REG       0X20    //写配置寄存器#define RD_RX_PLOAD         0X61    //读RX有效数据:1~32个字节#define WR_TX_PLOAD         0XA0    //写TX有效数据:1~32个字节#define FLUSH_TX            0XE1    //清除TX FIFO寄存器,发射模式下#define FLUSH_RX            0XE2    //清除RX FIFO寄存器,接收模式下#define REUSE_TX_PL         0XE3    //重新使用上一包有效数据#define NOP                 0xFF    //空操作

五、NRF24L01相关寄存器地址宏定义

    #define CONFIG          0X00     //配置寄存器#define EN_AA           0X01     //使能自动应答功能#define EN_RXADDR       0X02     //接收地址允许#define SETUP_AW        0X03     //设置地址宽度#define SETUP_RETR      0X04     //建立自动重发#define RF_CH           0X05     //射频通道#define RF_SETUP        0X06     //射频寄存器#define STATUS          0X07     //状态寄存器#define OBSERVE_TX      0X08     //发送检测寄存器#define CD              0X09     //载波检测#define RX_ADDR_P0      0X0A     //数据通道0接收地址#define RX_ADDR_P1      0X0B     //数据通道1接收地址#define RX_ADDR_P2      0X0C     //数据通道2接收地址#define RX_ADDR_P3      0X0D     //数据通道3接收地址#define RX_ADDR_P4      0X0E     //数据通道4接收地址#define RX_ADDR_P5      0X0F     //数据通道5接收地址#define TX_ADDR         0X10     //发送地址#define RX_PW_P0        0X11     //接收数据通道0有效数据宽度#define RX_PW_P1        0X12     //接收数据通道1有效数据宽度#define RX_PW_P2        0X13     //接收数据通道2有效数据宽度#define RX_PW_P3        0X14     //接收数据通道3有效数据宽度#define RX_PW_P4        0X15     //接收数据通道4有效数据宽度#define RX_PW_P5        0X16     //接收数据通道5有效数据宽度#define FIFO_STATUS     0X17     //FIFO 状态寄存器

六、NRF24L01的工作模式

6.1、NRF24L01模式配置

6.2、发射模式函数配置

void NRF_TX_Mode(void){  NRF_CE_LOW();       NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);    NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);  NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);       NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01); NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANNEL);       NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);  NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0e);  NRF_CE_HIGH();delay_us(130); }

6.3、接收模式函数配置

void NRF_RX_Mode(void){NRF_CE_LOW();NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);NRF_WriteReg(NRF_WRITE_REG+EN_AA,0X01);NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0X01);NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANNEL);NRF_WriteReg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0f);NRF_CE_HIGH();}

6.4、发射接收模式说明

  1)在发射模式下,CE至少要拉高10us。
  2)NRF24L01在接收模式下可以接收6路不同通道的数据,每一个数据通道使用不通的地址,但是共用相同的频道。
  3)数据通道0是唯一一个可以配置为40位自身地址的数据通道,1~5数据通道都为8位自身地址和32位共用地址。
  4)所有的数据通道都可以设置为增强型ShockBurst模式。

七、NRF24L01的打包格式

7.1、增强型ShockBurst模式下的数据包形式

前导码 | 地址(3~5字节) | 9位(标志位) | 数据(1~32字节) | CRC校验(0/1/2字节)

7.2、ShockBurst模式下与NRF2401等相兼容的数据包形式

前导码 | 地址(3~5字节) | 数据(1~32字节) | CRC校验(0/1/2字节)

7.3、数据包说明

  前导码:在发送模式下加入,接收模式下去除,用来检测0和1。
  地址:1)地址内容为接收机地址
     2)地址宽度可以是3、4或5字节宽度
     3)地址可以对接收通道和发射通道分别进行配置
     4)从接收的数据包中自动去除地址
  标志位:1)PID,数据包识别。其中两位是用来每当接收到新的数据包后加一。
      2)七位保留,用作将来与其他产品相兼容
      3)当NRF24L01与NRF2401/NRF24E1通讯时不起作用
  数据:1~32字节宽度
  CRC:CRC校验是可选的

八、小结

  1、对于NRF24L01,在使用的时候要注意收发双方的频道要相同(NRF24L01总共有40个可选频道)
  2、注意寄存器的配置
  3、地址要统一

2.4G NRF24L01无线模块总结相关推荐

  1. STM32系列(HAL库)——F103C8T6通过NRF24L01(2.4G)无线模块进行双机通信

    本文参考:STM32L051C8T6 HAL库 + nRF24L01 收发案例(硬件SPI通讯) 1.软件准备 (1)编程平台:Keil5 (2)CubeMX (3)XCOM(串口调试助手) 2.硬件 ...

  2. STM32CubeMX系列08——SPI通信(W25Q64、NRF24L01无线模块)

    文章目录 1. 准备工作 1.1. 所用硬件 1.2. SPI 简介 1.3. 生成工程 1.3.1. 创建工程选择主控 1.3.2. 系统配置 1.3.3. 配置工程目录 2. 读写EEPROM实验 ...

  3. NRF24L01无线模块设置发射接受模式方法

    NRF24L01无线模块设置发射接受模式 NRF24L01无线模块通过设置CONFIG寄存器的最后一位,实现发射和接收模式的设定. CONFIG寄存器的内容: 具体程序如下: /函数:void Set ...

  4. Arduino开发遥控小车(三)基于nRF24L01无线模块实现舵机转向和直流电机调速

    Arduino开发遥控小车(三)基于nRF24L01无线模块实现舵机转向和直流电机调速 前面和大家分享了通过nRF24L01无线模块实现数据发送和接收的基本方法,本次继续和大家分享最终实现遥控小车转向 ...

  5. nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集(转)

    俗话说:每个人一生下来什么都会的,都是通过自己努力和探索出来的,NRF系列芯片,刚开始都好奇心加兴趣才来捣鼓它的,刚开始做硬件和软件,没有收发数据弄得整个人头都快炸开了,所以在此和大家分享一下前辈的经 ...

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

    一.NRF2401无线模块 1.模块介绍 功能介绍 (1)2.4Ghz 全球开放ISM 频段免许可证使 2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合 (3)126 ...

  7. 基于python的modbus协议编程_IM5D.6B利用(2.4G)无线模块实现远程控制(基于智能编程任务赛,2019版)...

    点击「蓝色微信名」关注更多比赛信息 引  言 在<中国儿童青少年威盛中国芯计算机表演赛>从第十七届活动开始,搭建了一个全新的互联网技术支持平台,实现了网络在线比赛,在全国建立了三十个省级赛 ...

  8. c语言射频接受程序,NRF24L01无线模块C语言程序

    闭门造车第三十五天. 所有零件在三号到我手中,下午组装起来,架上我古董般的51开发板,拉出我最熟悉的红外遥控程序,第二天便灵动了起来,之后陆陆续续做了什么?太琐碎理不顺了似乎.光电传感器做了两个小板, ...

  9. NRF24l01无线模块调试心得!STM32_SPI驱动NRF24L01+

    原文链接:链接 经过两日的调试nRF24L01终于调试成功.耐心,细心.有想法.资料.数据手册.总就会成功. 下面是调试的基本方法:                24L01是收发双方都需要编程的器件 ...

最新文章

  1. windows 如何配置 Go 环境(Zip archive 方式)?
  2. django 模板语言之 simple_tag 自定义模板
  3. C#开发C/S结构如何通信的问题?
  4. tushare pro接口_利用tushare获取新闻联播文字稿并制作词云
  5. Linux经典问题—五哲学家就餐问题
  6. C++ 求一元二次方程的根
  7. poj 1969 Count on Canton 摘规律
  8. oracle sql 取日期,Oracle SQL日期及日期格式获取命令,oraclesql
  9. 牛逼!一款基于SpringBoot的微信点餐系统
  10. 农村三资管理平台app_鑫农三资app下载-鑫农三资app下载安卓版 v1.0.2_手机乐园
  11. R语言 线性混合效应模型实战案例
  12. 良心安利动物 恐龙unity3d模型素材网站
  13. 无线传感器网络(双语)复习
  14. 链塔区块链数据平台周报:新增富豪榜、项目点评、收藏等功能 | 链塔数据
  15. jcp jsr_JCP选举结果:LJC和CloudBees赢得EC席位
  16. SAP 发票凭证反向冲销
  17. 集群并行效率测试软件,并行集群系统的Linpack性能测试分析
  18. 各类文件的文件头标志[转]
  19. android cs,CS 1.6移植安卓手机:附安装教程
  20. 哈工大计算机学院博士毕业 要求,哈尔滨工业大学博士毕业要求.doc

热门文章

  1. 著名的菲尔人格测试!听说挺准的
  2. 菲尔博士给我们提供提升交际气场的36招
  3. Matlab 矩阵的表示
  4. 惩罚因子(penalty term)与损失函数(loss function)
  5. 自定义漂亮的圆形进度条
  6. IE系列兼容性hack大全
  7. 关于单级PID及串级PID
  8. VMWare 虚拟机如何通过新增挂载点的方式扩展磁盘空间
  9. 新概念三英语学习Unit2
  10. H3C服务器带外默认账号和密码