您的当前位置:首页正文

NRF24L01+寄存器及指令集

2023-03-03 来源:易榕旅网


寄存器读地址 AAAAA //读地址时,直接输入寄存器地址就可以。

空操作 0xff //空操作,把要读的地址用spi写入后,需要写0xff,(写0xff的同时无线模块会输出该寄存器的设置)

写寄存器地址 1AAAAA //相当于二进制100000是十六进制的0x20,比如要写0x00寄存器的时候,要写0x00+0x20等于的值

寄存器 0x60 255位~0位 无线接收寄存器 (高字节先输出)

寄存器 0x61 255位~0位 无线接收寄存器 (低字节先输出)

寄存器 0xc2 写0xff 清空无线接收寄存器(直接写0xe2,0xff)

寄存器 0x80 255位~0位 无线发送寄存器(写入数据可以发送出去)(直接写0xa0,uchar数据,uchar数据 。。。32字节)

寄存器 0x90 255位~0位 无线发送寄存器(写入数据可以发送出去,但不使用应答)(直接写0xb0,uchar数据,uchar数据 。。。32字节)

寄存器 0xc1 写0xff 清空发送寄存器 (直接写0xe1,0xff)

寄存器 0xc3 数据重发(写地址0xe3)

寄存器 0x00 7不用

6接收完成中断使能(1关0开中断产生时IRQ脚底电平)

寄存器 0x01 5发送完成中断使能

4接收满中断

3校验使能

2校验位选择(0:8位1:9位)

1无线使能(1开,0关)

0无线工作方式(1接收模式0发送模式)

7不用

6不用

5数据通道5自动应答(1开0关)

4数据通道4自动应答(1开0关)

3数据通道3自动应答(1开0关)

2数据通道2自动应答(1开0关)

1数据通道1自动应答(1开0关)

寄存器 0数据通道0自动应答(1开0关)

7不用

6 不用

5 接收通道5允许(1开,0关)

4 接收通道4允许(1开,0关)

3 接收通道3允许(1开,0关)

2 接收通道2允许(1开,0关)

1 接收通道1允许(1开,0关)

0 接收通道0允许(1开,0关)

0x02

寄存器 0x03

7

6

5

4

3

2

10RX / TX地址字段宽度(00:无效01:3字节10:4字节11:5字节)

寄存器 0x04

7654自动重发延时 0000:250微秒 0001:500微秒。。。。1111:4000微秒

3210自动重发次数 0000:关 0001:1次 0002:2次 1111:15次

寄存器 0x05

频率最高2.45GHz

寄存器 0x06 用,位5位3 = 00:1Mbps 7不用

6543210 0000000频率最低。 1111111

7连续载波传输(1开,0关)

6

5速率250kbps(1开,0关) (和位3配合使 10:250kbps 11:不使用)

4(1开,0关)

3数据速率(0:1Mbps 1:2Mbps)(和位5配

01:2Mbps

合使用,位5位3 = 00:1Mbps 01:2Mbps 10:250kbps 11:不使用)

21(00:-18dbm 01:-12dbm 10:-6dbm 11:0dbm)

0(信号增益)(1开0关)

寄存器 0x07 无线状态寄存器(写1清除对应的中断)

7

6收到数据中断

5发送完成中断

4重发失败中断(超过设定的重发次数)

321 000通道0 001通道1 002通道2。。。。(可查看是哪个通道引起的中断)

0重复发送满标志

寄存器 0x08

7654:数据丢包计数器

寄存器

3210:重发数据 计数器

7654321:载波内容

0x09

0:载波检测

寄存器 0xa

40:39:38.。。。。。。2:1:0 (0 注: 位39到位0可以随意改 )

寄存器 0x0b

40:39:38.。。。。。。2:1:0 (通道1的地址,注:位39到位8的值被锁定0xC2C2C2C2 位7到位0可以随意改)

寄存器 0x0c

40:39:38.。。。。。。2:1:0 (通道2的地址,注:位39到位8的值被锁定0xC2C2C2C2 位7到位0可以随意改)

寄存器 0x0d

40:39:38.。。。。。。2:1:0 (通道3的地址,注:位39到位8的值被锁定0xC2C2C2C2 位7到位0可以随意改)

寄存器 0x0e 位39到位8的值被锁定0xC2C2C2C2 寄存器 0x0f

40:39:38.。。。。。。2:1:0 (通道4的地址,注: 位7到位0可以随意改)

40:39:38.。。。。。。2:1:0 (通道5的地址,注:位39到位8的值被锁定0xC2C2C2C2 位7到位0可以随意改)

寄存器 0x10 位39到位0可以随意改)

寄存器 0x11 是只接收32字节)

寄存器 0x12

40:39:38.。。。。。。2:1:0 (,注:

7

6

543210 通道0的有效字节(设置32就

7

6

543210 通道1的有效字节

寄存器 寄存器 寄存器

7

6

543210

7

6

543210

7

通道2的有效字节

通道3的有效字节

0x13 0x14 0x15

6

543210 通道4的有效字节

寄存器 0x16

寄存器 7

6

543210 通道5的有效字节

状态寄存器(只读)

7

6发上一数据包

5TX寄存器满(1满)

4TX寄存器空(1空)

3

0x17

2

1RX寄存器满(1满)

0RX寄存器空(1空)

寄存器 寄存器 寄存器 TX

位255~~~~~~~位0 RX

位255~~~~~~~位0 0x1c 启用动态载荷长度

7

6

5 通道5开

4 通道4开

3 通道3开

32字节)32字节) (

2 通道2开

1 通道1开

0 通道0开

寄存器 0x1d

7

6

5

4

3

2使能动态载荷(1开)

1使能载荷应答(1开)

0 使能发送载荷但不应答(1开)

//***************************************NRF24L01寄存器*******************************************************

指令

#define READ_REG 0x00 // 读寄存器指令

#define WRITE_REG 0x20 // 写寄存器指令

#define RD_RX_PLOAD 0x61 // 读取接收数据指令

#define WR_TX_PLOAD 0xA0 // 写待发数据指令

#define FLUSH_TX 0xE1 // 冲洗发送 FIFO指令

#define FLUSH_RX 0xE2 // 冲洗接收 FIFO指令

#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令

#define NOP 0xFF // 空运行(读地址的时候用)

//*************************************SPI(nRF24L01)****************************************************

寄存器地址

#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式

#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 // 接收频道0接收数据长度

#define RX_PW_P2 0x13 // 接收频道0接收数据长度

#define RX_PW_P3 0x14 // 接收频道0接收数据长度

#define RX_PW_P4 0x15 // 接收频道0接收数据长度

#define RX_PW_P5 0x16 // 接收频道0接收数据长度

#define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置

//**************************************************************************************

发射地址

const u8 TX_ADDRESS [TX_ADR_WIDTH]={}; //发送地址(地址要和接收通道地址一致)

接收地址

const u8 RX_ADDRESS0[RX_ADR_WIDTH]={}; //接收0通道地址(地址随便改,但必须和发射地址一致)

const u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x01,}; //接收1通道地址0xc2是被锁死的,只能改0x01

const u8 RX_ADDRESS2[RX_ADR_WIDTH]={0x02,,}; //接收2通道地址 写的时候是低位先写,所以只要写1次

const u8 RX_ADDRESS3[RX_ADR_WIDTH]={0x03,,}; //接收3通道地址

const u8 RX_ADDRESS4[RX_ADR_WIDTH]={0x04,,}; //接收4通道地址

const u8 RX_ADDRESS5[RX_ADR_WIDTH]={0x05,}; //接收5通道地址

注:红底字的值可以随意改, 的值被锁死了。

要想通讯:条件:1 接收地址和发射地址必须一致

2 无线模块0x05寄存器的值必须一致(发射/接收这2模块)

因篇幅问题不能全部显示,请点此查看更多更全内容