前言
最近野火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
#define WR_TX_PLOAD 0XA0
#define FLUSH_TX 0XE1
#define FLUSH_RX 0XE2
#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
#define RX_ADDR_P1 0X0B
#define RX_ADDR_P2 0X0C
#define RX_ADDR_P3 0X0D
#define RX_ADDR_P4 0X0E
#define RX_ADDR_P5 0X0F
#define TX_ADDR 0X10
#define RX_PW_P0 0X11
#define RX_PW_P1 0X12
#define RX_PW_P2 0X13
#define RX_PW_P3 0X14
#define RX_PW_P4 0X15
#define RX_PW_P5 0X16
#define FIFO_STATUS 0X17
六、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、地址要统一
转载请注明原文地址: https://ju.6miu.com/read-676588.html