当前位置:文档之家› nRF24L01无线通信模块使用手册

nRF24L01无线通信模块使用手册

nRF24L01无线通信模块使用手册

一、模块简介

该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:

1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm

2.2Mbps,传输速率高

3.功耗低,等待模式时电流消耗仅22uA

4.多频点(125个),满足多点通信及跳频通信需求

5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)

6.工作原理简介:

发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。

接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。

三、模块引脚说明

四、模块与AT89S52单片机接口电路

注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU模块时,请将Nrf24L01通讯模块每个端口(MOSI、SCK、CSN和CE)接4.7K的排阻上拉到VCC增强其驱动能力(如下图:)。若使用其它单片机与Nrf24L01通讯模块相连时请串联2K电阻。

五、工作模式控制

注1:进入此模式后,只要CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据数据发射完毕,之后进入待机模式II。

注2:正常的发射模式,CE端的高电平应至少保持10us。24L01将发射一个数据包,之后进入待机模式I。

六、数据和控制接口

通过以下六个引脚,可实现模块的所有功能:

①IRQ(低电平有效,中断输出)

②CE(高电平有效,发射或接收模式控制)

③CSN(SPI信号)

④SCK(SPI信号)

⑤MOSI(SPI信号)

⑥MISO(SPI信号)

通过SPI接口,可激活在数据寄存器FIFO中的数据;或者通过SPI命令(1个字节长度)访问寄存器。

在待机或掉电模式下,单片机通过SPI接口配置模块;在发射或接收模式下,单片机通过SPI接口接收或发射数据。

1.SPI指令

所有的SPI指令均在当CSN由低到高开始跳变时执行;从MOSI写命令的同时,MISO 实时返回24L01的状态值;SPI指令由命令字节和数据字节两部分组成。

SPI命令字节表

2.SPI时序

SPI读写时序见下面两图。在写寄存器之前,一定要进入待机模式或掉电模式。其中,Cn——SPI指令位;Sn——状态寄存器位;Dn——数据位(低字节在前,高字节在后;每个字节中高位在前)

SPI读时序

SPI写时序

八、模块编程控制

1.ShockBurst TM发射模式

①设置PRIM_RX为低。

②通过SPI接口,将接收节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块,写TX_PLD时,CSN必须一直置低。

③置CE为高,启动发射。CE高电平持续时间至少为10us。

④ShockBurst TM发射模式:

系统上电

启动内部16MHz时钟

数据打包

数据发射

⑤若启动了自动应答模式(ENAA_P0=1),则模块立即进入接收模式(NO_ACK已设置)。如果接收到应答信号,则表示发射成功,TX_DS置高且TX FIFO中的有效数据被移出;如果没有接收到应答信号,则自动重发(自动重发已设置);如果自动重发次数超过最大值(ARC),MAX_RT置高,在TX FIFO中的数据不被移出。当MAX_RT和TX_DS置高时,IRQ激活。只有重新写状态寄存器(STA TUS)才能关闭IRQ。如果重发次数达到最大后,仍没有接收到应答信号,在MAX_RT中断清除之前,不会再发射数据。PLOS_CNT 计数器会增加,每当有一个MAX_RT中断产生。

⑥如果CE置低,则系统进行待机模式I,否则发送TX FIFO寄存器中的下一个数据包。当TX FIFO中的数据发射完,CE仍为高时,系统进入待机模式II。

⑦在待机模式II下,CE置低,则进入待机模式I。

2.ShockBurst TM接收模式

①设置PRIM_RX为高,配置接收数据通道(EN_RXADDR)、自动应答寄存器(EN_AA)和有效数据宽度寄存器(RX_PW_PX)。

②置CE为高,启动接收模式。

③130us后,模块检测空中信号,

④接收到有效的数据包后(地址匹配、CRC检验正确),数据储存在RX FIFO中,RX_DR 置高。

⑤如果启动了自动应答功能,则发送应答信号。

⑥MCU置CE为低,进入先机模式I。

⑦MCU可通过SPI接口将数据读出

⑧模块准备好进入发射模式或接收模式或待机模式。

九、RF通道频率

RF通道频率指的是nRF24L01所使用的中心频率,该频率范围从 2.400GHz到2.525GHz,以1MHz区分一个频点,故有125个频点可使用。

由参数RF_CH确定,公式为:F0 = 2400 + RF_CH(MHz)

十、示例程序

接收模块与发射模块大部分程序代码相同,如下:

1.SPI命令和寄存器配置头文件API.h(根据第六、七两点编写)

#ifndef _BYTE_DEF_

#define _BYTE_DEF_

typedef unsigned char BYTE;

#endif

// SPI命令

#define READ_REG 0x00 //读第0个寄存器

#define WRITE_REG 0x20 //写第0个寄存器

#define RD_RX_PLOAD 0x61 //在接收模式下使用,读有效数据

#define WR_TX_PLOAD 0xA0 //在发送模式下使用,写有效数据

#define FLUSH_TX 0xE1 //在发送模式下使用,清TX FIFO寄存器

#define FLUSH_RX 0xE2 //在接收模式下使用,清RX FIFO寄存器

#define REUSE_TX_PL 0xE3 //发送方使用,重复发送最后的数据

#define NOP 0xFF //空操作,用于读状态寄存器STATUS的值

// nRF24L01寄存器地址

#define CONFIG 0x00 //配置寄存器,8bit

#define EN_AA 0x01 //自动应答设置寄存器,8bit

#define EN_RXADDR 0x02 //接收地址设置寄存器,8bit

#define SETUP_AW 0x03 //地址宽度设置寄存器,8bit

#define SETUP_RETR 0x04 //自动重复发送设置寄存器,8bit

#define RF_CH 0x05 //RF通道寄存器,8bit

#define RF_SETUP 0x06 //RF设置寄存器,8bit

#define STATUS 0x07 //状态寄存器,8bit

#define OBSERVE_TX 0x08 //发送观测寄存器,8bit

#define CD 0x09 //载波检测寄存器,8bit,

#define RX_ADDR_P0 0x0A //接收地址数据通道0,40bit

#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 //发送地址.发送方使用,40bit

#define RX_PW_P0 0x11 //通道0接收的有效数据字节长度(1-32字节),8bit

#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 //FIFO状态寄存器,8bit

2.SPI操作头文件(与单片机的接口设置在此头文件中)

#define uchar unsigned char

#define TX_ADR_WIDTH 5 //地址长度为5个字节

#define TX_PLOAD_WIDTH 20 //数据长度为20个字节

uchar const TX_ADDRESS[TX_ADR_WIDTH] = {0xE7,0xE7,0xE7,0xE7,0xE7};

char rx_buf[TX_PLOAD_WIDTH]; //接收缓冲区

uchar flag; //标志位

int test[12];

#define CE P0_0 //芯片使能:Chip Enable

#define CSN P0_1 //片选信号:Chip Select Not

#define SCK P1_2 //串行时钟信号:Serial Clock

#define MOSI P0_3 //主发从收:Master In Slave Out

#define MISO P0_4 //主收从发:Master Out Slave In

#define IRQ P3_2 //中断查询:Interrupt Request

uchar bdata sta;

sbit RX_DR = sta^6;

sbit TX_DS = sta^5;

sbit MAX_RT = sta^4;

uchar SPI_RW(uchar byte)//写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据

{

uchar bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++) //先写字节的高位,再写低位

{

MOSI = (byte & 0x80); //MOSI取byte最高位

byte = (byte << 1); //byte左移一位

SCK = 1; //SCK从高到低时开始写入

byte |= MISO;

//获取MISO位.从MOSI写命令的同时,MISO返回nRF24L01的状态及数据SCK = 0;

}

return(byte);

}

uchar SPI_RW_Reg(BYTE reg, BYTE value)//将字节value写入寄存器reg

{

uchar status;

CSN = 0; //CSN为0时,才能进行SPI读写

status = SPI_RW(reg); //选择寄存器reg

SPI_RW(value); //写字节value到该寄存器

CSN = 1; //终止SPI读写

return(status);

}

BYTE SPI_Read(BYTE reg)//读寄存器reg状态字

{

BYTE reg_val;

CSN = 0; //CSN为0时,才能进行SPI读写

SPI_RW(reg); //选择寄存器reg

reg_val = SPI_RW(0); //写0,什么操作也不进行,仅仅为了读寄存器状态

CSN = 1; //终止SPI读写

return(reg_val);

}

uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)

//从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址{

uchar status,byte_ctr;

CSN = 0; //CSN为0时,才能进行SPI读写

status = SPI_RW(reg); //选择寄存器reg并返回其状态字

for(byte_ctr=0;byte_ctr

pBuf[byte_ctr] = SPI_RW(0); //从寄存器读数据

CSN = 1; //终止SPI读写

return(status); //返回状态值

}

uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)//将数据写入寄存器,如TX数据,RX/TX地址等. {

uchar status,byte_ctr;

CSN = 0; //CSN为0时,才能进行SPI读写

status = SPI_RW(reg); //选择寄存器reg并返回其状态字

for(byte_ctr=0; byte_ctr

SPI_RW(*pBuf++); //写数据到寄存器

CSN = 1; //终止SPI读写

return(status); //返回状态值

}

//接收模式初始化:设置RX地址,RX数据宽度,RF通道,速率,低噪声放大器增益

//设置完之后,将CE置高,准备好接收数据

void RX_Mode(void)

{

SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);

// 写TX_Address 到nRF24L01 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 自动重发延时:500us + 86us;重发次数:10次

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);

//将地址TX_ADDRESS写入寄存器0的数据通道0 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //ENAA_P0=1,数据通道0自动应答

SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //ERX_P0=1,使能

SPI_RW_Reg(WRITE_REG + RF_CH, 40); //40个通信频段

SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);

//数据通道0的RX数据长度为TX_PLOAD_WIDTH,要与发送的一致SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F);

//速率为2Mbps,发送功率为0dBm,低噪声放大器增益为1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);

//PRIM_RX=1,接收方;PWR_UP=1;CRC检验字为2字节;

}

//发送模式初始化:设置发送地址,设置发送的数据,设置接收方地址,RF通道,速率等,与接收类似

void TX_Mode(void)

{

SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);

SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);

SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);

SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);

SPI_RW_Reg(WRITE_REG + RF_CH, 40);

SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);

}

void show_status(void) //显示状态寄存器的值

{

test[0] = SPI_Read(EN_AA); //0x01

test[1] = SPI_Read(EN_RXADDR); //0x01

test[2] = SPI_Read(SETUP_AW); //0x03,5个字节

test[3] = SPI_Read(SETUP_RETR); //0x1a

test[4] = SPI_Read(RF_CH); //0x28

test[5] = SPI_Read(RF_SETUP); //0x0f

test[6] = SPI_Read(RX_ADDR_P2);

test[7] = SPI_Read(RX_ADDR_P3);

test[8] = SPI_Read(RX_ADDR_P4);

test[9] = SPI_Read(RX_ADDR_P5);

test[10] = SPI_Read(RX_PW_P0); //0x14

test[11] = SPI_Read(STA TUS);

}

void init_io(void)

{

CE = 0; //待机

CSN = 1; //SPI禁止读写

SCK = 0;

}

void Inituart(void)//设置串口工作模式

{

TMOD |= 0x20; //定时器1工作在方式2,8位自动重装模式

TL1 = 0xfd; //波特率为9600

TH1 = 0xfd;

SCON = 0x50; //模式1,8位数据

TR1 = 1; //启动定时器1

TI=1;

}

void init_int0(void)//外部中断设置

{

EA=1; //允许全局中断

ES=1; //开串行口中断

EX0=1; //允许外部中断0

}

void delay_ms(unsigned int x) //毫秒级延时

{

unsigned int i,j;

i=0;

for(i=0;i

{

j=108;

while(j--);

}

}

3.发送模块主函数(向接收模块发射数据“abcdefg”,中断方式)void main(void)

{

int i;

init_io(); //IO端口设置

Inituart(); //串口设置

init_int0(); //外部中断0设置

for(i=0;i<7;i++) //待发的数据tx_buf,发送的数据为”abcdefg”七个字母tx_buf[i] = 'a'+i;

while(1)

{

CE = 0; //Standby-1模式

TX_Mode(); //发送设置

CE = 1; //启动发送模式

delay_ms(20);

CE = 0; //Standby-1模式

delay_ms(1000);

}

}

//中断函数

//如果RX_DR=1,则读取数据,之后清除标志位;

//如果TX_DS或MAX_RT为1,则仅清除中断标志位

void ISR_int0(void) interrupt 0

{

sta=SPI_Read(STATUS); //读状态寄存器STATUS

if(RX_DR) //如接收到数据,则中断

{

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据

flag=1; //标志位置高

}

if(MAX_RT) //重发中断达到最大数

SPI_RW_Reg(FLUSH_TX,0); //清除TX FIFO寄存器

SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除RX_DR,TX_DS和MAX_RT中断标志位

}

4.接收模块主函数(接收并在串口输出,同时输出状态寄存器的值,使用查询方式)void main(void)

{

int i;

init_io(); //IO端口设置

Inituart(); //串口设置

init_int0(); //外部中断0设置

CE=0; //Standby-1模式

RX_Mode(); //设置接收模式

CE = 1; //准备接收数据

while(1)

{

sta=SPI_Read(STATUS);

if(RX_DR) //接收到数据

{

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据

for(i=0;i<7;i++)

printf("%c ",rx_buf[i]); //通过串口发送接收到的数据

printf("\n");

show_status(); //输出状态寄存器的值,可不用此操作

for(i=0;i<12;i++)

printf("%x ",test[i]);

printf("\n");

delay_ms(10);

}

if(MAX_RT) //重发中断达到最大数

SPI_RW_Reg(FLUSH_TX,0); //清除TX FIFO寄存器

SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除RX_DR,TX_DS和MAX_RT中断标志位}

}

nrf24l01使用与调试经验总结(包括一收多发)

nrf24l01使用与调试经验总结 (包括一收多发--1主机最多6从机) ---------------------------------------------------------------------------------------------------------------------------- 主要特性 工作在2.4GHz ISM 频段 调制方式:GFSK/FSK 数据速率:2Mbps/1Mbps/250Kbps 超低关断功耗:<0.7uA 超低待机功耗:<15uA 快速启动时间:<130uS 内部集成高PSRR LDO 宽电源电压范围:1.9-3.6V 数字IO 电压: 3.3V/5V 低成本晶振:16MHz±60ppm 接收灵敏度:<-83dBm @2MHz 最高发射功率:7dBm 接收电流(2Mbps):<15mA 发射电流(2Mbps):<12mA(0dBm) 10MHz 四线SPI 模块 内部集成智能ARQ 基带协议引擎 收发数据硬件中断输出 支持1bit RSSI 输出 极少外围器件,降低系统应用成本 QFN20 封装或COB 封装

注意:C代表了命令,S表示寄存器值,D表示数据 写数据:SPI写命令+寄存器地址----->SPI写入数据 读数据:SPI写寄存器地址(可以使用读命令+寄存器地址)----->SPI读取数据 不论是读取或者写入数据,甚至是读/写len长度的数据都要先写寄存器地址;

总的来说时候就三个模式: 1.待机模式(待机模式+掉电省电模式) 2.发送模式 3.接受模式 具体各个模式介绍参考数据手册。。。 ---------------------------------------------------------------------------------------------------------------- nrf发送数据是以包来发送。 其中前导码和CRC不用管。具体我们来看看中间三部分: 地址: 地址也就是接收到通道的地址,如果是能了自动应答,那么我们得将发送地址(TX_ADDR) 和 接受应答信号的通道地址(RX_ADDR_P0)设置为一样的。

nrf24l01无线通信模块与51单片机工作原理

nrf24l01无线通信模块与51单片机工作原理无线通信技术在现代社会中扮演着重要的角色,其中nrf24l01无线 通信模块与51单片机也成为了无线通信的重要组成部分。本文将探讨nrf24l01无线通信模块与51单片机的工作原理,以及它们之间的配合 关系。 一、nrf24l01无线通信模块 nrf24l01无线通信模块是一种低功耗的2.4GHz无线收发模块,广泛应用于物联网、无线传感器网络等领域。其工作原理基于射频通信技术,通过无线信道进行数据的传输。nrf24l01模块由无线收发器和嵌入 式射频微控制器组成,具备高速率、长距离传输和多通道选择等特性。 1. 发射端工作原理 nrf24l01发射端主要由收发器、天线和控制电路组成。当51单片机 通过SPI总线与nrf24l01通信时,可将要发送的数据通过控制电路和收发器转换成射频信号,并通过天线发送出去。发送端的工作原理可简 述为以下几个步骤: a. 初始化设置:通过配置寄存器进行初始化设置,包括工作频率、 数据传输速率、天线增益等参数。 b. 数据准备与发送:将待发送的数据加载到发送缓冲区中,并通过 发送指令启动数据的发送。

c. 发送前导码:在发送数据之前,发射端会先发送一段前导码作为 同步信号,以确保接收端正确接收数据。 d. 数据传输与重发机制:发送端将数据以数据包的形式传输,接收 端在接收到数据后会进行确认应答,发送端根据应答情况决定是否进 行重发。 2. 接收端工作原理 nrf24l01接收端与发送端相似,主要由收发器、天线和控制电路组成。当发送端通过射频信号将数据发送过来时,接收端的工作原理如下: a. 初始化设置:与发送端类似,接收端也需要通过配置寄存器进行 初始化设置,以匹配发送端的参数。 b. 接收与解码:接收端在接收到射频信号后,对信号进行解码,并 将解码后的数据加载到接收缓冲区。 c. 数据处理与应答:通过与51单片机的交互,将接收到的数据进 行处理,并向发送端发送确认应答,确保数据的可靠性。 二、51单片机工作原理 51单片机,全称是指Intel(英特尔)公司发布的一种基于MCS-51 架构的8位单片机,它具有低功耗、高稳定性和良好的扩展性等特点。在nrf24l01与51单片机配合使用时,51单片机充当着控制器的角色, 负责数据的处理和与nrf24l01的通信。

nRF24L01的工作原理

nRF24L01的工作原理 nRF24L01是一种低功耗2.4GHz无线收发模块,广泛应用于无线通信领域。它采用射频收发器芯片nRF24L01+,支持2Mbps的高速数据传输速率,具有优秀的抗干扰能力和稳定的信号传输性能。本文将详细介绍nRF24L01的工作原理,包括硬件结构和通信协议。 1. 硬件结构 nRF24L01模块主要由射频收发器芯片、天线、晶振、电源管理电路和外部接口组成。 射频收发器芯片:nRF24L01+芯片是模块的核心部件,它集成了射频收发器、基带处理器和嵌入式协议栈等功能。该芯片采用2.4GHz的ISM频段,支持多通道选择,能够与其他nRF24L01模块进行无线通信。 天线:nRF24L01模块通常配备了PCB天线,用于接收和发送无线信号。天线的设计和布局对模块的通信距离和稳定性有一定影响。 晶振:nRF24L01模块使用晶振提供时钟信号,以保证模块的正常运行。常见的晶振频率为16MHz。 电源管理电路:nRF24L01模块需要3.3V的电源供电,电源管理电路用于稳定和管理电源输入。 外部接口:nRF24L01模块通常具有SPI接口,用于与主控芯片进行通信。SPI 接口包括四根信号线:SCK、MISO、MOSI和CSN。 2. 通信协议 nRF24L01模块使用一种称为Enhanced ShockBurst的协议进行数据传输。该协议基于射频通信技术,具有高效的数据传输和强大的抗干扰能力。

Enhanced ShockBurst协议采用了一对多的通信方式,即一个发送器可以同时向 多个接收器发送数据。协议中定义了一些重要的概念和参数,如地址、通道、数据包、数据速率等。 地址:nRF24L01模块使用6字节的地址进行通信,发送器和接收器必须使用 相同的地址才能进行通信。地址由发送器设定,并在数据包中包含。 通道:nRF24L01模块支持多达125个通道,发送器和接收器必须使用相同的 通道才能进行通信。通道的选择可以用于避免不同模块之间的干扰。 数据包:数据包是nRF24L01模块传输的基本单位,每个数据包包含一个地址、一个数据载荷和一个校验码。数据包的长度可以在1到32字节之间进行设置。 数据速率:nRF24L01模块支持多种数据速率选择,包括1Mbps、2Mbps和 250Kbps。不同的数据速率可以在传输距离和传输速度之间进行权衡。 3. 工作原理 nRF24L01模块的工作原理可以分为发送和接收两个过程。 发送过程: 1) 发送器通过SPI接口将待发送的数据写入发送器的发送缓冲区。 2) 发送器设置目标地址和通道,并启动发送过程。 3) 发送器将数据包按照Enhanced ShockBurst协议进行编码和调制。 4) 发送器通过射频信道将调制后的信号发送出去。 5) 接收器接收到信号后,进行解调和解码,得到原始的数据包。 6) 接收器校验数据包的完整性和正确性,并将数据包的数据载荷写入接收器的 接收缓冲区。 接收过程:

NRF24L01详细教程

NRF24L01详细教程 NRF24L01是一款低功耗2.4GHz无线收发模块,广泛应用于各种无线通信项目中。它可以使微控制器与其他设备进行无线通信,例如Arduino 与Arduino之间的通信、Arduino与无线传感器节点的通信等。下面是一个详细的NRF24L01教程。 1.NRF24L01的基本介绍 NRF24L01是一款由Nordic Semiconductor公司生产的低功耗无线收发模块,采用2.4GHz频段,具有快速的通信速率、低功耗、高阻塞容限等特点。它可以与各种微控制器(如Arduino)进行通信,是一种理想的无线通信解决方案。 2.NRF24L01的物理连接 在开始使用NRF24L01之前,需要将其与微控制器进行物理连接。NRF24L01模块有8个引脚,分别是:VCC、GND、CE、CSN、SCK、MOSI、MISO和IRQ。其中,VCC和GND连接到供电电源,CE和CSN连接到微控制器的任意数字引脚,而SCK、MOSI和MISO连接到SPI总线。 3.NRF24L01的库文件安装 在编程之前,需要安装与NRF24L01相关的库文件。可以在Arduino IDE的库管理器中并安装"nRF24L01"库。安装完成后,就可以在程序中引用该库文件了。 4.NRF24L01的基本设置 在程序中,首先需要进行NRF24L01的基本设置。首先,在程序开头引入"NRF24L01.h"库文件。然后,在setup(函数中,通过调用

"NRF24L01"类的对象进行初始化设置。设置包括设置CE与CSN引脚、设置通信频率、设置收发地址等。 5.NRF24L01的通信 在进行基本设置之后,可以开始进行NRF24L01的通信。通信包括发送数据和接收数据两个方面。对于发送数据,可以使用"NRF24L01"类的write(函数将数据发送给另外一个NRF24L01模块;对于接收数据,则可以使用available(函数判断是否有数据接收到,并使用read(函数读取数据。 6.NRF24L01的高级功能 除了基本的发送和接收数据之外,NRF24L01还具有很多高级功能。例如,可以设置接收和发送的数据长度、设置通信速率、设置信道、设置发送功率等。这些高级功能可以通过调用不同的函数进行设置。 7.NRF24L01的应用 NRF24L01广泛应用于各种无线通信项目中。例如,可以将NRF24L01与Arduino配对,实现两个Arduino之间的无线通信;还可以将 NRF24L01与无线传感器进行配对,实现传感器数据的无线传输;还可以将NRF24L01与无线网络模块(如ESP8266)进行配对,实现无线互联网通信等。可以根据具体的应用需求,灵活使用NRF24L01模块。 总结: NRF24L01是一款广泛应用于无线通信项目中的低功耗2.4GHz无线收发模块。通过物理连接、库文件安装、基本设置和通信功能的调用,可以实现与微控制器的无线通信。此外,NRF24L01还具有许多高级功能和广

NRF24L01配置说明

USB串口无线模块的配置说明 带USB接口的模块直接插电脑进行配置,不带USB接口的模块得借助USB转串口进行配置;(如下图所示)

1、USB转串口模块以及带USB的无线驱动模块需要安装CH341驱动; (文件在“CH341>>DRIVER>SETUP.EXE) 2、波特率默认设置为9600(带USB与不带USB的),波特率的选择范围为: 2400-115200,具体,请看配置参数对应的描述; 3、配置时,必须在断电的情况下,插上跳线帽,再从新上电;(注意:不能上 着电的情况下,插跳线帽!) 4、配置完成之后,必须得把跳线帽拔掉;(注意:必须得在断电的情况下拔, 然后,再重新上电!) 5、配置的格式为8个字节: “0X00+每个数据包的长度+0X01+频道+0X02+工作模式+单向/双向运行模式+‘波特率’” 注意: 1、必须插上跳线帽进行配置,配置完之后,必须拔掉跳线帽才能正常使用;(配 置时,在上电前就得插上跳线帽;当然,正常使用时也得在断电的情况下,拔跳线帽,再重新上电) 2、串口调试助手发送数据的格式为:十六进制;

3、USB转串口模块的TX,RX与NRF24L01驱动模块(无USB的)的TX,RX要交叉 相连,即一方的TX与另外一方的RX相连,然后,一方的RX与另外一方的TX相连; 4、两个模块的数据长度,频道得设置成一样,否则工作不正常;数据的长度选 择范围:(单向工作模式最小为1个字节,最大为32个字节)(双向工作模式最小为2个字节,最大为32个字节);频道的选择范围为:从0X00到0X7F 选择一个;(即0-127,从0开始,2的6次方) 5、同一个实验室的,为了不互相影响,得把频道设置成不一样,否则会互相干 扰,; 6、“工作模式”只分两种:TX模式(0X01)和 RX模式(0X00),注意:两个模 块的工作模式不能一样,必须得其中一个模块为TX模式,另外一个模块为RX模式,否则,不能实现两个模块的无线通信; 7、单向/双向运行模式,0X01:模块运行在双向通信模式,0X00:模块运行在 单向通信模式;双向模式相对单向模式而言,双向模式中,可以通过发送AT 指令来切换方向,具体请看双向模式的使用要求; 8、波特的选择,从小到大分别为:2400(0X07),4800(0X08), 9600(0X00), 14400(0X01), 19200(0X02), 38400(0X03), 56000(0X04), 57600(0X05), 115200(0X06); 9、数据的长度得选择适中,串口调试助手(单片机)的发送频率也得选择适中;

nRF24L01无线模块E01-ML01DP5说明书(亿佰特2.4G通讯)_202001081638017

--模块简介E01-ML01DP5 E01-ML01DP5 是一款标志性产品的 2.4G 无线模块,是当今市面上最 优秀的nRF24L01+PA+LNA 射频模块,SPI 接口,目前已经稳定量产,并适 用于多种应用场景。 E01-ML01DP5 采用挪威 Nordic 公司原装进口的 nRF24L01P 芯片, 配备美国进口的 20dBm 功率放大芯片,使模块最大发射功率达到 100mW (20dBm),并同时将接收灵敏度提升10dB,使得模块超过nRF24L01P 自 身10 倍以上的通信距离,硬件设计上带有抗干扰屏蔽罩,使得模块的抗干 扰能力大大提升。 --电气参数E01-ML01DP5 序号参数名称参数值摘要 1 射频芯片nRF24L01P Nordic 2 模块尺寸18 * 33.4mm 不含 SMA 3 平均重量 4.9g 含 SMA 4 工作频段 2.4G ~ 2.525G Hz 可调,1MHz 步进 5 生产工艺无铅工艺,机贴无线类产品必须机贴方能保证批量一致性和可靠性 6 接口方式 2 * 4 * 2.54mm 直插 7 供电电压 2.0 ~ 3.6V DC 注意:高于 3.6V 电压,将导致模块永久损毁 8 通信电平0.7VCC ~ 5V VCC 指模块供电电压 9 实测距离2000m 晴朗空旷,最大功率,5dBi 天线,高度 2m,250k 空中速率 10 发射功率最大 20dBm 约 100mW 11 空中速率250k~2Mbps 3 级可调(250kbps、1Mbps、2Mbps) 12 关断电流 1.0uA nRF24L01P 设置为掉电,CE 低电平 13 发射电流130mA@20dBm 供电能力必须大于 300mA 14 接收电流20mA CE=1 15 通信接口SPI 最高速率可达 10Mbps 16 发射长度单个数据包 1~32 字节 3 级 FIFO 17 接收长度单个数据包 1~32 字节 3 级 FIFO 18 RSSI 支持不支持仅支持简单的丢包统计 19 天线接口SMA-K 外螺纹内孔,50Ω特性阻抗 20 工作温度-40 ~ +85℃工业级 21 工作湿度10% ~ 90% 相对湿度,无冷凝 22 储存温度-40 ~ +125℃工业级 23 接收灵敏度-106dBm@250kbps 详见芯片手册

nRF24L01无线通信模块使用手册

nRF24L01无线通信模块使用手册 一、模块简介 该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01: 1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm 2.2Mbps,传输速率高 3.功耗低,等待模式时电流消耗仅22uA 4.多频点(125个),满足多点通信及跳频通信需求 5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线) 6.工作原理简介: 发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。 接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。 三、模块引脚说明

nRF24L01无线通信模块使用手册12要点

nRF24L01无线通信模块使用手册12要点nRF24L01是一种常用的无线通信模块,广泛应用于无线遥控、智能家居、物联网等领域。本文主要介绍nRF24L01无线通信模块的使用手册12要点。 1. 硬件连接 将nRF24L01模块插入Arduino板的SPI接口上,然后将CE、CSN、SCK、MOSI、MISO分别连接到Arduino板的Digital口上。 2. 初始化模块 在使用nRF24L01模块之前,必须对其进行初始化,在初始化代码中需要指定通信频率、发射功率、数据通道等等。 3. 设置通信频率 nRF24L01可以在2.4GHz频段内进行无线通信,可以通过设置通信频率来避免干扰。通信频率的设置需要与对方设备的频率相匹配。 4. 设置发射功率 nRF24L01具有多个发射功率级别,选择发射功率级别需要权衡通信距离和电池寿命。 5. 设置数据通道 nRF24L01具有多个数据通道,可以在多个设备之间相互独立传输数据。 6. 选择传输模式 nRF24L01可以选择多种不同的传输模式,包括单向、双向、广播等。 7. 发送数据 使用nRF24L01发送数据时,需要将数据写入到缓冲区中,并指定接收方的地址。 8. 接收数据 使用nRF24L01接收数据时,需要将接收方的地址写到接收方地址寄存器中,然后从缓冲区中读取数据。

9. 检查模块状态 使用nRF24L01时需要进行状态检查,可以检查发送、接收、空闲、数据发送 完成等等状态。 10. 错误处理 在进行nRF24L01通信时,可能会发生各种各样的错误,需要进行错误处理。 11. 调试技巧 在进行nRF24L01调试时,可以使用串口进行调试,输出各种调试信息。 12. 应用注意事项 在进行nRF24L01的应用时,需要注意如下事项:避免干扰、选择合适的电源、防止数据丢失等等。 以上为nRF24L01无线通信模块使用手册12要点,希望对大家有所帮助。

nrf24l01无线通信模块与51单片机工作原理 -回复

nrf24l01无线通信模块与51单片机工作原理-回复nRF24L01无线通信模块与51单片机工作原理 引言: 随着物联网的快速发展,无线通信技术在各个领域中的应用越来越广泛。而在无线通信领域中,nRF24L01无线通信模块和51单片机成为了常见的组合。本文将详细介绍nRF24L01和51单片机的工作原理及其之间的通信过程。 第一部分:nRF24L01无线通信模块的工作原理 nRF24L01是一款低功耗的单片机无线通信模块,广泛应用于无线传感器网络、智能家居等领域。其工作原理可以分为硬件和软件两个方面。 硬件方面,nRF24L01模块由射频前端及基带部分两个主要部分组成。射频前端部分包括射频收发器和RF增益模块,用于接收和发送射频信号。基带部分包含SPI接口、调制解调器和数据缓存区,用于控制数据的传输及处理。 软件方面,nRF24L01模块的工作需要通过使用专用的库函数进行驱动。这些库函数可以在编程环境中调用,以实现nRF24L01模块的相应功能。软件通过SPI接口与模块进行通信,并通过设置寄存器、发送命令和接收状态等方式控制模块的工作。

第二部分:51单片机的工作原理 51单片机,全称为AT89C51,是一种典型的8051架构的单片机。在无线通信系统中,51单片机通常作为主控芯片,通过与nRF24L01模块进行交互,实现与其他设备的无线通信。 51单片机的工作原理主要包括四个方面:时钟与计时、IO口控制、中断系统和串行通信。 时钟与计时:51单片机内部由一个双字节的定时器/计数器组成,用于提供计时和延时功能。通过设置计时器的时钟源和分频系数,可以实现不同频率和精度的计时与延时。 IO口控制:51单片机的IO口主要用于与其他设备进行数据交互。通过设置相应的寄存器,可以控制IO口的输入输出、上拉电阻和工作模式等。 中断系统:51单片机内部集成了中断控制器,可以通过设置中断优先级和中断源等参数,实现对不同事件的响应。在无线通信系统中,可以通过中断来处理接收数据、发送完成等事件。 串行通信:51单片机具有多种串行通信接口,如UART、SPI和I2C等。在无线通信系统中,一般使用SPI接口与nRF24L01模块进行通信。通过

完整word版NRF24L01详细教程

先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在 使用10 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的 情况下了。作为初探我们就是 用简单的I0模拟SPI 的方法了,中断使用查询 的方式。那么该教程讲解的接口与单片机的连接如下: GNl) Pl 首先您需要了解 NRF24L01,请参阅“ NRF24L01芯片中文资料” 片英文资料”。 我们的教程是以一个简单的小项目为大家展示 NRF24L01的使用方法与乐 趣。我们所写教程均是以这种方式的呢, 让您在学习的时候明白它能做什么, 使 您学起来不至于枯燥无味。 作为简易的教程,我们只需要知道它是怎么使用的就够了, 我们本教程的目 的是用NRF24L01发送数据和接收数据,且接收方会对比发送的数据与接收的 数据,若完全相同则 控制LED 闪烁一次,并且把接收到的数据通过串口发送 到PC 端,通过串口工具查看接收到 的数据。 具体的要求如下: 1、 具备发送和接收的能力。 2、 发送32个字节的数据,接收方接收到正确数据之后给予提示,通过 LED 闪烁灯形 式。 3、 把接收到的数据传送到 PC 进行查看。 4、 发送端每隔大约1.5秒发送一次数据,永久循环。 以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢: 使用DIY 方式设计NRF24L01的接口板,且包含含单片机平台,使用PCB 方 式或者万用板方式均可。如 果您想让自己学的很扎实,那么推荐您自行做出接 口板子呢。当然若您的能力不足,那么我 们不推荐自行做板呢,因为这样会增 加您学习的难度,反而起到了反效果呢。 我们知道NRF24L01的供电电压是1.9V~3.6V 不能超过这个范围,低了不 工作,高了可能烧毁NRF24L01芯片。我们常用的STC89C52的单片机的供电 电压是5V ,我们不能直接给24L01这个模块供电,我们需要使用 AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01模块供电。 为此我们的设计原理图如下:包含单片机最小系统、供电系统、下载程序接 口、5V 转3.3V 电路、NRF24L01模块接口。并且全部引出单片机的 IO 口, 另外还加了 5个电源输出接 口,为扩展使用。还包括了电源指示 LED 以及一 个IO 口独立控制的LED ,这个独立控制的 LED 用于 NRF24L01接收成功 闪烁指示。为了保证系统的稳定性,在设计中添加了两个滤 波电容。 Cl : S{ K MtSO P24 QI eSN M( )Si IRQ 或者“ NRF24L01 芯

nRF24L01详解

第一章、无线收发模块(nRF24L01) 1.1、nRF24L01介绍 (1) 2.4Ghz 全球开放ISM 频段免许可证使用 (2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场 合 (3) 126 频道,满足多点通信和跳频通信需要 (4) 内置硬件CRC 检错和点对多点通信地址控制 (5) 低功耗1.9 - 3.6V 工作,待机模式下状态为22uA;掉电模式下为900nA (6) 内置2.4Ghz 天线,体积小巧15mm X29mm (7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示), 可直接接各种单片机使用,软件编程非常方便 (8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效 果 (9) 2.54MM间距接口,DIP封装 (10)工作于Enhanced ShockBurst 具有Automatic packethandling, Auto packet transaction handling,具有可选的内置包应答机制,极大的降低丢包率。 (11)与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需 要。 (12)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小, 如果超过10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24l01模块的IO口线连接。比如AVR系列单片机,如果是5V 的,一般串接2K 的电阻 1.2、内部结构及引脚介绍 (1)结构方框图

(2)引脚介绍 引脚封装 引脚名称引脚功能描述 1 CE 协同nRF24L01状态寄存器共同控制芯片模式 2 CSN 片选线,低电平有效 3 SCK SPI时钟线 4 MOSI SPI,数据输入线 5 MISO SPI,数据输出线 6 IRQ 可屏蔽中断引脚 7 VDD 电源(+3V) 8 VSS 电源(0V) 9 XC2 晶体振荡器2脚(输出) 10 XC1 晶体振荡器1脚/外部时钟输入脚 11 VDD_PA 给RF功率放大器提供1.8V电源 12 ANT1 天线接口1 13 ANT2 天线接口2 14 VSS 接地(0V) 15 VDD 电源(+3V) 16 IREF 参考电流(模拟输入) 引脚名称引脚功能描述 17 VSS 接地(0V)

NRF24L01功能使用文档

NRF24L01功能使用文档 一、NRF24L01的功能特点: 1.双向通信:NRF24L01可以同时作为发送器和接收器,实现双向通信。这意味着可以用它构建各种无线传感器网络。 2. 高速数据传输:NRF24L01的最大数据传输速率为2Mbps,这使得它可以用于高速数据传输的应用场景,如视频传输。 3.高可靠性:NRF24L01具有自动重复传输和错误检测功能。当传输数据时,NRF24L01会自动重复发送数据,并在接收端检测错误。这提高了数据传输的可靠性。 4.小尺寸和低功耗:NRF24L01的尺寸小,只有20针的QFN封装,适用于各种空间受限的应用场景。同时,它的工作电压范围广,只需1.9-3.6V,功耗低。 5.多通道:NRF24L01支持多达125个通道,这使得它可以与其他无线设备同时工作,避免干扰。 二、NRF24L01的使用方法: 1. 引脚连接:首先,将NRF24L01的引脚连接到主控制器(如Arduino)上。连接时需要注意引脚的对应关系,如CE(引脚1)连接到主控制器的数字引脚9上,CSN(引脚2)连接到数字引脚10上,SCK (引脚3)连接到数字引脚13上,等等。 2.配置寄存器:NRF24L01有多个寄存器,用于配置各种参数。可以通过SPI接口向这些寄存器写入数据来配置NRF24L01、例如,可以通过

写入到寄存器地址0x00的数据来配置NRF24L01的发射功率、数据传输速率、等等。 3.发送数据:在发送数据之前,需要将NRF24L01设置为发送模式。 首先,将CE置高,然后向TXFIFO寄存器中写入数据。NRF24L01会自动 将数据传输给接收器,并等待接收器的确认。 4.接收数据:在接收数据之前,需要将NRF24L01设置为接收模式。 首先,将CE置高,然后等待数据的接收。一旦接收到数据,可以从RXFIFO寄存器中读取数据。 5.错误处理:当数据传输过程中出现错误时,NRF24L01会自动重复 发送数据。为了避免数据丢失,接收端需要检测并处理错误。可以通过读 取NRF24L01的状态寄存器来获取错误信息。 三、使用注意事项: 1.距离限制:虽然NRF24L01具有较远的传输距离,但在实际应用中,受到环境和天线等因素的影响,传输距离可能会受到限制。为了获得较好 的传输效果,需要选择合适的传输距离和功率等参数。 2.干扰问题:NRF24L01采用2.4GHz频率,这是一个频繁使用的频段,可能会受到其他无线设备的干扰。为了避免干扰,可以选择不同的通道, 或者使用其他干扰抑制技术。 3.电源功耗:尽管NRF24L01的功耗很低,但在实际应用中,需要注 意控制功耗。可以通过合理地选择睡眠模式和唤醒方式来降低功耗。 4. 数据传输速率:NRF24L01的最大数据传输速率为2Mbps,但在实 际应用中,可能由于距离和信号质量等因素的限制,无法达到最大速率。 在选择数据传输速率时,需要根据实际需求来权衡。

相关主题
文本预览
相关文档 最新文档