NRF24LE1编程器&烧写器使用说明
nRF24L01中文手册
在 ShockBurstTM 发送模式下,nRF24L01 自动生成前导码及 CRC 校验,参见表格 12。数据发送完毕 后 IRQ 通知 MCU。减少了 MCU 的查询时间,也就意味着减少了 MCU 的工作量同时减少了软件的开发 时间。nRF24L01 内部有三个不同的 RX FIFO 寄存器(6 个通道共享此寄存器)和三个不同的 TX FIFO 寄 存器。在掉电模式下、待机模式下和数据传输的过程中 MCU 可以随时访问 FIFO 寄存器。这就允许 SPI 接口可以以低速进行数据传送,并且可以应用于 MCU 硬件上没有 SPI 接口的情况下。
小心:静电敏感器件。操作时遵守防护规则。
COPYRIGHT ©2007 迅通科技 TEL 北京:+86 10 64390486 深圳:+86 755 26675941
6
术语表
迅通科技
术语
描述
ACK
确认信号(应答信号)
ART
自动重发
CE
芯片使能
CLK
迅 ShockBurstTM 模式: ShockBurst 模式下 nRF24L01 可以与成本较低的低速 MCU 相连。高速信号处理是由芯片内部的射频 协议处理的,nRF24L01 提供 SPI 接口,数据率取决于单片机本身接口速度。ShockBurst 模式通过允许与 单片机低速通信而无线部分高速通信,减小了通信的平均消耗电流。
工业传感器 玩具
技
低工作电压:1.9~3.6V
概述:
科
nRF24L01 是一款工作在 2.4~2.5GHz 世界通用 ISM 频段的单片无线收发器芯片。无线收发器包括:频
nRF24LE1H 详细编程电路图 烧写电路
nRF24LE1 Flash/OTP Programming Adapter Kit User Guide Liability disclaimer
Nordic Semiconductor ASA reserves the right to make changes without further notice to the product to improve reliability, function or design. Nordic Semiconductor ASA does not assume any liability arising out of the application or use of any product or circuits described herein.
Figure 1. Kit content nRF24LE1 Flash/OTP Programming Adapter Kit content: • • 1 Programming Adapter Module 1 Printed Getting Started Guide
Revision 1.1
Main office: Otto Nielsens veg 12 7004 Trondheim Norway Phone: +47 72 89 89 00 Fax: +47 72 89 89 89
Revision History
Date December 2011 October 2009 Version 1.1 1.0 Description Removed references to the CD User Guide
nRFgo nRF24LE1 Flash/OTP Programming Adapter Kit
stc12单片机SPI的nrf24l01程序
stc12单片机SPI的nrf24l01程序/////////////////////发送/////////////////////////////// #include <reg52.h>#include <intrins.h>typedef unsigned char uchar;#define uint unsigned int//****************************************IO端口定义***************************************sfr SPCTL = 0xCE;//SPI Control Register SSIG SPEN DORD MSTR CPOL CPHASPR1 SPR0 0000,0100sfr SPSTAT = 0xCD;//SPI Status Register SPIF WCOL - - - -- - 00xx,xxxxsfr SPDAT = 0xCF;sbit CE =P1^0;sbit CSN =P1^1;sbit IRQ =P1^2;sbit led=P1^3;//********************************************************* ********************************* uchar bdata sta;//状态标志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;//*********************************************NRF24L01*************************************#define TX_ADR_WIDTH 5// 5 uints TX address width#define RX_ADR_WIDTH 5// 5 uints RX address width#define TX_PLOAD_WIDTH 32// 32 uints TX payload#define RX_PLOAD_WIDTH 32// 32 uints TX payloaduchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//本地地址uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//接收地址 uchar codeTx_Buf[TX_PLOAD_WIDTH]={0xff,0xee,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb,0x11,0x2 2,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa ,0xbb,0x11,0x22,0x33,0xee,0xff};//发送数据 ucharRx_Buf[RX_PLOAD_WIDTH];//接收数据//***************************************NRF24L01寄存器指令*******************************************************#define READ_REG 0x00 // 读寄存器指令 #defineWRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX0xE1 // 冲洗发送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 // 收发地址宽度设置 #defineSETUP_RETR 0x04 // 自动重发功能设置 #define RF_CH 0x05 // 工作频率设置 #define RF_SETUP 0x06 // 发射速率、功耗功能设置 #define STATUS 0x07 // 状态寄存器 #define OBSERVE_TX 0x08 // 发送监测功能 #defineCD 0x09 // 地址检测 #define RX_ADDR_P0 0x0A // 频道0接收数据地址#defineRX_ADDR_P1 0x0B // 频道1接收数据地址 #defineRX_ADDR_P2 0x0C // 频道2接收数据地址 #defineRX_ADDR_P3 0x0D // 频道3接收数据地址 #defineRX_ADDR_P4 0x0E // 频道4接收数据地址 #defineRX_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栈入栈出状态寄存器设置/******************************************延时函数********************************************************///长延时 void Delay(unsigned int s) { unsigned int i,j;for(i=0;i<1000;i++)for(j=0;j<s;j++); } //短延时 voiddelay_ms(unsigned int x) { unsigned int i,j; i=0;for(i=0;i<x;i++) { j=108; while(j--); } } /************初始化5A spi***************/ void Init_SPI() { SPDAT=0; //初始化数据寄存器 SPSTAT=0XC0; //清除状态寄存器SPCTL=0XD2;//设置为主机模式主频不能超过2M //忽略SS 使能spi MSB SCLK空闲为0 第一个时钟边沿开始采集 spi通信的频率为CUP_CLK/16 } //SPDAT 读写一个字节 //TxData:要写入的字节//返回值:读取到的字节 uchar SPI_ReadWriteByte(uchar TxData){ SPDAT=TxData; //发送一个bytewhile((SPSTAT&0x80)==0); SPSTAT=0XC0; //清除状态寄存器 return SPDAT; //返回收到的数据 } //读取SPI寄存器值 //reg:要读的寄存器 uchar SPI_Read_Reg(uchar reg) { uchar reg_val; CSN = 0; //使能SPI传输SPI_ReadWriteByte(reg); //发送寄存器号reg_val=SPI_ReadWriteByte(0xFF);//读取寄存器内容 CSN = 1;//禁止SPI传输 return(reg_val); //返回状态值 } // 向寄存器REG写一个字节,同时返回状态字节reg寄存器地址 value写入的数据 uchar SPI_RW_Reg (ucharreg,uchar value) { uchar status; CSN=0;status=SPI_ReadWriteByte(reg);//发送寄存器号SPI_ReadWriteByte(value); //写入寄存器的值 CSN=1;return(status); } //写一个数据包 ucharSPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) { ucharstatus,byte_ctr; CSN = 0;status=SPI_ReadWriteByte(reg); for(byte_ctr=0; byte_ctr<bytes;byte_ctr++) SPI_ReadWriteByte(*pBuf++); CSN = 1; return(status); } //读一个数据包 uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) { uchar status,uchar_ctr; CSN = 0;status = SPI_ReadWriteByte(reg);for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)pBuf[uchar_ctr]=SPI_ReadWriteByte(0xFF); CSN = 1; return(status); } /*******************************接 ***** 收 ***** 模 *****式 ***** 代 ***** 码 *************************************//*********************************************************************** *******************************/ /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) /*功能:数据读取后放如rx_buf接收缓冲区中/******************************************************************* ***********************************/ unsigned charnRF24L01_RxPacket(unsigned char* rx_buf) { // unsigned char revale=0; sta=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况 SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 if(RX_DR) // 判断是否接收到数据{ SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO bufferSPI_RW_Reg(FLUSH_RX,0xFF);//清除接受FIFO return 1;//读取数据完成标志 } return 0; }/******************************************************************* *********************************/ /*函数:voidRX_Mode(void) /*功能:数据接收配置/******************************************************************* *********************************/ void RX_Mode(void) { CE=0; //SPI_RW_Reg(FLUSH_RX,0x00);//清除接受FIFO //SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack SPI_RW_Reg(WRITE_REG + EN_AA,0x01);//使能自动应答 Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //连接通道0和地址 Enable Pipe0//SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...1a SPI_RW_Reg(WRITE_REG + RF_CH, 40);//通信频率0~125 设置通信的频率 Select RF channel 40SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为2字节 SPI_RW_Reg(WRITE_REG +RF_SETUP,0X07); //0x07 TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR // 设置TX发射参数,0db增益,2Mbps,低噪声增益开启 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F);//配置基本工作模式的参数 CE=1; delay_ms(130); }//************************************串口初始化********************************************************* void StartUART( void ) { //波特率9600 TMOD=0x20;//设置定模式2 TH1=0xFD; TL1=0xFD; SM1=1; //设置串口SCON,为方式1 SM0=0; REN=1; //串行允许 TR1=1; //启动定时器EA=1; //中断 ES=1; //打开串口 }//************************************通过串口将接收到数据发送给PC端 ************************************** voidR_S_Byte(uint R_Byte) { ES=0; SBUF=R_Byte; while(TI==0); TI=0; ES=1; } /************************************主函数************************************************************/ uchar NRF24L01_Check(void) { ucharbuf[5]={0XA5,0XA5,0XA5,0XA5,0XA5}; uchar i;SPI_Write_Buf(WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.SPI_Read_Buf(TX_ADDR,buf,5); //读出写入的地址for(i=0;i<5;i++) if(buf[i]!=0XA5) break; if(i!=5) return 1;//检测24L01错误 return 0; //检测到24L01 } void main() { uint i=0; CE=0; CSN=1; led=0; Init_SPI(); StartUART(); //串口初始while(NRF24L01_Check())//检测不到24L01 { delay_ms(500);delay_ms(500); R_S_Byte(0x11); } //接收模式代码 RX_Mode(); //接受模式 Delay(10);//防止编译警告 while(1){ if(nRF24L01_RxPacket(Rx_Buf)) { for(i=0;i<TX_PLOAD_WIDTH;i++) { R_S_Byte(Rx_Buf[i]); //发送接收到的数据到电脑 } } Delay(10); } }。
nRF24LE1芯片简单介绍
nRF24LE1芯片简单介绍NRF24LE1特性NRF24LE1采用了NORDIC最新的无线和超低功耗技术,在一个极小封装中集成了包括2.4G无线传输,增强型51 FLASH高速单片机,丰富外设及接口等的单片FLASH芯片,是一个综合了性能及成本的完美结合,很适合应用于各种2.4G的产品设计。
NRF24LE1=2.4GHz+Flash51+ADC+PWM+I2C+RTC+WDT+RNG+AES++COMP+UART+SPI….应用:无线鼠标,无线键盘,无线摇杆,PC外设,玩具,RFID,无线遥控,医学参数监测,线数字语音,工业控制及无线数据采集主要特性:1、内嵌 2.4GHz低功耗无线收发内核NRF24L01+, 250kbps,1Mbps,2Mbps空中速率2、高性能51内核,16kbytes Flash,1Kbyte data RAM,1Kbyte NVRAM3、具有丰富的外设资源,内置128bit AES硬件加密,32位硬件乘除处理器,6-12位ADC,两路PWM,I2C,UART,硬件随机数产生器件,WDT,RTC,模拟比较器4、提供QFN24,QFN32,QFN48多种封装,提供灵活应用选择5、灵活高效的开发手段,支持Keil C,ISP下载,是开发无线外设,RFID,消费产品,无线数传等有力工具及平台。
带Gazell协议Gazell协议是NORDIC专为2.4G无线桌面和其他无线应用设计推出的无线通信协议,配合NRF24LE1/NRF24LU1P使用,客户可以专注于应用设计,无需花费大量的精力在无线链路上。
低功耗Gazell协议是低功耗协议,可设计为纽扣电池供电的应用。
抗干扰性Gazell协议完成自动跳频及抗干扰的无线通信,具有在复杂环境下优异的抗干扰性能。
低延时Gazell协议充分利用NRF高速通信的特性,具有低延时特性,特别满足PC周边及其他应用。
高安全性Gazell协议具有AES 128bit 高强度加密,确保数据传输的安全可靠。
nRF24LU1快速开发系统使用手册
nRF24LU1-Quick-Dev 快速开发系统使用手册使用nRF24LU1-Quick-Dev 前请认真阅读本手册说明以及nRF24LU1的数据手册为了便于用户开发应用先进的nRF24LU1 USB+8051 Flash MCU+高速2Mbps2.4GHz 无线芯片,迅通科技提供nRF24LU1快速开发系统。
nRF24LU1开发系统包括两个无线高速USB 模块、两个开发板,MINI USB Dongle ,详细源代码,原理图,资料光盘,开发板上有按键和指示灯等,加电即可使用,可完成USB HID 协议和无线数据高速传输的全部功能,可方便地进行性能以及距离评测,并迅速掌握nRF24LU1的USB 设备开发以及高速无线通信编程和协议的设计。
时间 缩短您的开发时间,建立您对RF 产品开发的信心; 风险 接近实用的评估板,方便验证和改进,零风险;费用 只需不到一个工程师一个月的薪水或您预算内很小一部分 市场 可对多种产品及应用进行验证,实现平台式的验证与应用资料 技术资料全,上手快,可以使您立刻进入与世界同步的无线设计领域;1、 n RF24LU1-Quick-Dev 快速开发系统的安装示意图:2、nRF24LU1-Quick-Dev 开发板的安装:1、按照安装示意图,将nRF24LU1无线模块安装在开发板上。
请注意无线模块的安装方向!2、开发板上跳线帽接VBUS 端,nRF24LU1无线模块上跳线接帽VBAT 端。
3、开发板采用USB 端口供电,用USB 连线将开发板与PC 机的USB 端口连接即可工作。
3、nRF24LU1-Quick-Dev 开发板演示程序的使用:1、源代码说明程序源代码在 \ SOURCE CODE 目录上,程序分为USB DONGLE 部分和WDP KEYBOARD 部分。
该程序的特点是内嵌“WIRELESS DESKTOP PROTOCOL (简称WDP )”的协议,具有抗干扰、可靠、省电等优点,实用性强,可应用于产品设计。
nRF24LE1中文数据手册
2
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
8
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
1 Mbps 速率下非重叠频道间隔为 1 MHz 2 Mbps 速率下非重叠频道间隔为 2 MHz 增加型突发模式 1-32 字节动态有效载荷长度(即用户要发的数据长度可以 1-32 字节) 包自动处理(封包/解包) 自动包传输处理(自动应答确认,自动重传) 6 个数据通道可用于 6:1 星型网络
当被过滤后的射频信号高于-64 dBm 时,PRD 寄存器被置高。PRD 被置高前射频信号必须 维持至少 40us
发送模式 通过置高 POR_UP 位,置低 PRIM_RX 位,TX FIFO 不为空,rfce 位置高 10us 后置低进入 发送模式
收发器将保持在发送模式直到数据包发送完毕。如果此时 rfce=0,收发器返回待机模式 1.如 果 rfce=1,且 TX FIFO 不为空则收发器继续保留在发送模式且发送下一包数据。如果 TX FIFO 为空,收发器进入待机模式 2. PLL 工作于开环模式。每次不要将收发器置于发送模式 超过 4ms.如果开启了 Enhanced ShockBurst 特性,收发器永远不会在发送模式超过 4ms.
dianzirentaobaocomnrf24le1nrf24lu1模块多功能编程器rmb8818pwmcon0xb20x00pwm配置寄存器pwmdc00xa10x00pwm通道0周期配置pwmdc10xa20x00pwm通道1周期配置pwrdwn0xa40x00掉电控制rfcon0xe80x02射频收发器控制寄存器rngctl0xd60x00随机数发生器控制寄存器rngdat0xd70x00随机数发生器数据寄存器rstreas0xrstreas0xb10x00复位源寄存器rtc2cmp00xb40xffrtc2比较值寄存器0rt2comp10xb50xffrtc2比较值寄存器1rt2con0xb30x00rtc2配置寄存器rt2cpt000xb60x00rtc2捕获值寄存器00rt2cpt010xab0x00rtc2捕获值寄存器01rt2cpt100xac0x00rtc2捕获值寄存器10s0buf0x990x00串口0数据缓冲寄存器s0con0x980x00串口0控制寄存器s0relh0xba0x03串口0重载寄存器高字节s0rell0xaa0xd9串口0重载寄存器低字节sp0x810x07堆栈指针寄存器spimcon00xfc0x02主spi配置寄存器0spimcon10xfd0x0f主spi配置寄存器1spimdat0xff0x00主spi数据寄存器spimstat0xfe0x03主spi状态寄存器spircon00xe40x01射频收发器主spi配置寄存器0spircon10xe50x0f射频收发器主spi配置寄存器1spirdat0xe70x00射频收发器主spi数据寄存器spirstat0xe60x03射频收发器主spi状态寄存器spiscon00xbc0xf0从spi配置寄存器0spisdat0xbf0x00从spi数据寄存器spisstat0xbe0x03从spi状态寄存器t2con0xc80x00定时器2控制寄存器tcon0x880x00定时计数器控制寄存器th00x8c0x00定时器0高字节th10x8d0x00定时器1高字节th20xcd0x00定时器2高字节tl00x8a0x00定时器0低字节tl10x8b0x00定时器1低字节tl20xcc0x00定时器2低字节tmod0x890x00定时器模式寄存器w2con00xe20x802wire配置寄存器0w2con10xe10x002wir
STM8的SPI口NRF24L01例程
//定时器初值*定时器分频*系统分频/16MHZ=定时时
间
//250*8*2/16mhz=250us
TIM4_IER |= 0x01;
//- - - - - - - UIE(Enable TIM4 OVR interrupt)
TIM4_CR1 |= 0x81; //ARPE - - - OPM URS UDIS CE_PINN
//Configure TIM3 prescaler = 8192
TIM3_CR1 |= 0x81;
//*/
//------------------------------//
TIM4_PSCR = 0x03;
//PSC[2:0] [1.2.4.8.16.32.64.128]
TIM4_ARR = 0xfA;
//BIT[2:0] Configure TIM2 prescaler =1 //ARPE - - - OPM URS UDIS CE_PINN
// TIM3 CC1 control LED Blinking //Output mode PWM2.
//CC polarity low,enable PWM output
/////////////////////////////////////////////
//
/////////////////////////////////////////////
delay_time(u16 i)
{ u16 j;
for(j=0;j<i;++j)
{ while(!f_250us)
TIM3_ARRH = 0x03; TIM3_ARRL = 0xff;
//自动从装载寄存器,先装高字节
nrf24l01是适合初学入门的无线模块
24l01的多机通信采用频分多子的方法,只需要在接受端对不同的通道配置地址即可。
发送端使用相应的地址作为本机地址。
接受数据时通过读取STATUS 中相关位即可得知接收的是哪个通道的数据。
以下仅给出多对一的通信代码。
至于一对多,以及多对多等情况读者可以自行研究了。
只给出相关部分,其他部分请参考前两篇文章------------------------------------------------------------------------------------------接受端uint const ADDRESS0[ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //频道0接收地址uint const ADDRESS1[ADR_WIDTH]= {0xc4,0xc3,0xc2,0xc1,0xc0}; //频道1接收地址uchar who=0xff;//**************************************************************** ************************/*NRF24L01初始化//**************************************************************** ***********************/void init_NRF24L01(void){us(100);CE=0; // chip enableCSN=1; // Spi disableSCK=0; // Spi clock line init high//SPI_Write_Buf(WRITE_REG + TX_ADDR,ADDRESS0, ADR_WIDTH); //写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0,ADDRESS0,ADR_WIDTH); //频道0地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P1,ADDRESS1,ADR_WIDTH); //频道1地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x03); //频道0、1自动应答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x03); //允许频道0、1SPI_RW_Reg(WRITE_REG + RF_CH, 0); //设置信道工作为2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //0接收数据长度SPI_RW_Reg(WRITE_REG + RX_PW_P1, RX_PLOAD_WIDTH); //1接收数据长度SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB}/***************************************************************** *************************************//*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/***************************************************************** *************************************/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf){unsigned char revale=0;sta=SPI_Read(STATUS); //读取状态寄存其来判断数据接收状况if(RX_DR) //判断是否接收到数据{CE = 0;SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);revale =1;who=sta&0x0e;who|=0xf0; //通道0:who==0xf0;通道1:who==0xf2}SPI_RW_Reg(WRITE_REG+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志CSN=0;SPI_RW(FLUSH_RX);CSN=1;return revale;}void main(void){uchar i;uchar RxBuf[TX_PLOAD_WIDTH];init_NRF24L01() ;StartUART();ms(6000);while(1){//如果接收到数据,发往PCSetRX_Mode();if(nRF24L01_RxPacket(RxBuf)){R_S_Byte(who);ms(100);for(i=0;i<TX_PLOAD_WIDTH;i++){R_S_Byte(RxBuf[i]);ms(100);}}}}-------------------------------------------1----------------------------------------------------发送uint constADDRESS0[ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};其余与双工通信相同-------------------------------------------2----------------------------------------------------发送uint constADDRESS1[ADR_WIDTH]= {0xc4,0xc3,0xc2,0xc1,0xc0}; //频道1接收地址其余与双工通信相同以上就是简要的代码。
最新-系统级RF芯片nRF24E1收发原理与应用编程 精品
系统级RF芯片nRF24E1收发原理与应用编程摘要从应用的角度出发,阐述系统级收发芯片241的口控制方法和工作过程;分析241的收发方式;详细介绍技术、技术和应用中器件的配置方法并通过代码说明实际应用中的编程方法。
关键词241射频无线通信配置引言241收发器是推出的系统级射频芯片,采用先进的018μ工艺、6×6的36引脚封装,以240芯片结构为基础,将射频率、8051、9输入10位、125通道、、、、、全部集成到单芯片中,是目前世界首次推出的、全球24通用的、完事的低成本射频系统级芯片。
由于241片内集成了模块,在使用中,只需要一片241和少数的外围元件就能完成射频收发功能,因此,大大减少了系统的体积。
使用241时,必须进行相应的配置工作。
下面,详细讲述241的收发原理和编程方法,以供读者设计时参考。
有关241的介绍请见2019年第6期。
1口241收发器的收发任务由口控制。
口使用标准8051中的2口地址。
由于射频收发器是片内置的,并不是双向工作。
为了满足射频收发子系统的需要,口的默认值与标准8051的2默认值也不一样。
收发器由特殊功能豁口中的00和_03控制。
_=00时,没用;_=01时,连接到1口;_=10时,连到第一个2401频道;_=11时,连接到第二个2401频道。
豁口的各个位如图1所示。
在241头文件中,所定义的各个位的名字与图1中一样。
1用口控制收发器用芯片内嵌的口控制收发器的操作非常方便。
如配置和接收或发送。
2复位时口的状态复位引脚为高电平时无论是时钟是否有效,控制2401收发子系统的输出位默认为3=0,6=0,7_=1。
程序运行后,保持默认值,直到程序通过寄存器改变各位的值。
范文先生网收集整理2收发方式通过_、和三个控制引脚,可以设置2401。
nRF24L01
最近百度上一些朋友都在为nRF24L01头疼,我这段时间又比较忙不能花太多时间一个一个去帮忙调试,干脆今天抽点儿时间写个应用笔记,希望能给大家提供一些方法和帮助。
有问题可以跟帖留言,我看到会尽量帮大家。
nRF24L01是Nordic公司生产的一个单芯片射频收发器件,是目前应用比较广泛的一款无线通讯芯片,具体手册资料网上大把,我就不再重复它的特性什么的了,直接说说它的调试方法,供大家参考。
24L01是收发双方都需要编程的器件,这就对调试方法产生了一定的要求,如果两块一起调,那么通讯不成功,根本不知道是发的问题还是收的问题,不隐晦的说,我当时也是没理清调试思路才浪费了大半天时间看着模块干瞪眼。
正确的方法应该是先调试发送方,能保证发送正确,再去调接收,这样就可以有针对性的解决问题。
至于怎么去调发送方,先说下发送方的工作流程:·配置寄存器使芯片工作于发送模式后拉高CE端至少10us·读状态寄存器STA TUS·判断是否是发送完成标志位置位·清标志·清数据缓冲网上的程序我也看过,大多都是成品,发送方发送-等应答-(自动重发)-触发中断。
可是这样的流程就已经把接收方给牵涉进来了,就是说一定要接收方正确收到数据并且回送应答信号之后发送方才能触发中断,结束一次完整的发送。
可是这跟我们的初衷不相符,我们想单独调试发送,完全抛开接收,这样就要去配置一些参数来取消自动应答,取消自动重发,让发送方达到发出数据就算成功的目的。
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 失能通道0自动应答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); // 失能接收通道0SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00); // 失能自动重发(注:以下贴出的寄存器描述由于中文资料上有一个错误,故贴出原版英文资料)有了以上这三个配置,发送方的流程就变成了发送-触发中断。
nrf24L01中文资料
单片2.4G 无线射频收发芯片nRF24L01===================================================特性● 真正的GFSK● 内置链路层● 增强型ShockBurst TM● 自动应答及自动重发功能 ● 地址及CRC 检验功能● 数据传输率1或2Mbps ● SPI 接口数据速率0~8Mbps ● 125个可选工作频道● 很短的频道切换时间可用于跳频 ● 与nRF 24XX 系列完全兼容 ● 可接受5V 电平的输入 ● 20脚QFN 44mm 封装 ● 极低的晶振要求60ppm ● 低成本电感和双面PCB 板 ● 工作电压 1.9~3.6V 应用● 无线鼠标键盘游戏机操纵杆 ● 无线门禁● 无线数据通讯 ● 安防系统 ● 遥控装置 ● 遥感勘测● 智能运动设备 ● 工业传感器 ● 玩具 概述:nRF24L01是一款工作在2.4~2.5GHz 世界通用ISM 频段的单片无线收发器芯片无线收发器包括:频率发生器增强型SchockBurst TM 模式控制器功率放大器晶体振荡器调制器解调器输出功率频道选择和协议的设置可以通过SPI 接口进行设置极低的电流消耗当工作在发射模式下发射功率为-6dBm 时电流消耗为9.0mA 接收模式时为12.3mA掉电模式和待机模式下电流消耗更低 快速参考数据参数 数值 单位最低供电电压 1.9 V最大发射功率 0 dBm最大数据传输率 2000 kbps发射模式下电流消耗0dBm 11.3 mA接收模式下电流消耗2000kbps 12.3 mA温度范围 -40~ +85数据传输率为1000kbps 下的灵敏度 -85 dBm掉电模式下电流消耗 900 nA 表1 nRF24L01快速参考数据很短的时间???hehe,,有想法,,,是Mbps,,,,要利用好,,,这是在此功耗下,,,大的功耗消耗更大丠丠dBm=10*lg(P/1mW)为0.9uA 1mW W分类信息型号描述版本nRF24L01 IC 裸片 DnRF24L01 20脚QFN 4*4mm,RoHS&SS-00259compliant DnRF24L01-EVKIT 评估套件 1.0表2nRF24L01 分类信息结构方框图:图1 nRF24L01 及外部接口引脚及其功能引脚名称引脚功能描述1 CE 数字输入 RX或TX模式选择2 CSN 数字输入 SPI片选信号3 SCK 数字输入 SPI时钟4 MOSI 数字输入从SPI数据输入脚5 MISO 数字输出从SPI数据输出脚6 IRQ 数字输出可屏蔽中断脚7 VDD 电源电源+3V8 VSS 电源接地0V9 XC2 模拟输出晶体震荡器2脚10 XC1 模拟输入晶体震荡器1脚/外部时钟输入脚11 VDD_PA 电源输出给RF的功率放大器提供的+1.8V电源12 ANT1 天线天线接口113 ANT2 天线天线接口214 VSS 电源接地0V15 VDD 电源电源+3V16 IREF 模拟输入参考电流17 VSS 电源接地0V18 VDD 电源电源+3V19 DVDD 电源输出去耦电路电源正极端20 VSS 电源接地0V表3nRF24L01引脚功能图2 引脚封装电气特性参数+27 +85 高电平输出电压=-0.5mA 高电平输出电压=0.5mA 160 320R GFSK >0 1800 2000 单通道工作电流单通道工作电流0.1%BRE(@2000kbps)图3nRF24L01外形封装尺寸极限范围供电电压VDD…………………………….-0.3V~+3.6VVSS (0V)输入电压V I………………………………-0.3V~5.25V输出电压V O……………………………. VSS~VDD总功耗=85……………………… 60mWPD T温度工作温度……………………-40~+85存储器温度…………………-40~+125注意:若超出上述极限值可能对元器件有损害静电敏感元件术语表术语描述ACK 确认信号应答信号ART 自动重发CE 芯片使能CLK 时钟信号CRC 循环冗余校验CSN 片选非ESB 增强型ShockBrust TMGFSK 高斯键控频移IRQ 中断请求ISM 工业科学医学LNA 低噪声放大LSB 最低有效位LSByte 最低有效字节Mbps 兆位/秒MCU 微控制器MISO 主机输入从机输出MOSI 主机输出从机输入MSB 最高有效位MSByte 最高有效字节PCB 印刷电路板PER 数据包误码率PID 数据包识别位PLD 载波PRX 接收源PTX 发射源PWR_DWN 掉电PWR_UP 上电RX 接收RX_DR 接收数据准备就绪SPI 串行可编程接口TX 发送TX_DS 已发送数据表5术语表功能描述工作模式nRF24L01可以设置为以下几种主要的模式模式PWR_UP PRIM_RX CE FIFO寄存器状态-接收模式 1 1 1数据在TX FIFO寄存器中发送模式 1 0 1发送模式 1 0 10 停留在发送模式直至数据发送完TX FIFO为空待机模式II 1 0 1待机模式I 1 - 0无数据传输-掉电模式0 - -表6 nRF24L01主要工作模式关于nRF24L01 I/O脚更详细的描述请参见下面的表7nRF24L01在不同模式下的引脚功能引脚名称 方向 发送模式接收模式 待机模式 掉电模式CE 输入 高电平>10us 高电平低电平-CSN 输入 SPI 片选使能低电平使能SCK 输入 SPI 时钟 MOSI输入 SPI 串行输入 MISO 三态输出 SPI 串行输出 IRQ输出 中断低电平使能表7nRF24L01引脚功能待机模式待机模式I在保证快速启动的同时减少系统平均消耗电流在待机模式I 下晶振正常工作在待机模式II 下部分时钟缓冲器处在工作模式当发送端TX FIFO 寄存器为空并且CE 为高电平时进入待机模式II 在待机模式期间寄存器配置字内容保持不变掉电模式在掉电模式下,nRF24L01各功能关闭保持电流消耗最小进入掉电模式后nRF24L01停止工作但寄存器内容保持不变启动时间见表格13掉电模式由寄存器中PWR_UP 位来控制数据包处理方式nRF24L01有如下几种数据包处理方式ShockBurst TM 与nRF2401nRF24E1nRF2402nRF24E2数据传输率为1Mbps 时相同 增强型ShockBurst TM 模式ShockBurst TM 模式ShockBurst 模式下nRF24L01可以与成本较低的低速MCU 相连高速信号处理是由芯片内部的射频协议处理的nRF24L01提供SPI 接口数据率取决于单片机本身接口速度ShockBurst 模式通过允许与单片机低速通信而无线部分高速通信减小了通信的平均消耗电流在ShockBurst TM 接收模式下当接收到有效的地址和数据时IRQ 通知MCU 随后MCU 可将接收到的数据从RX FIFO 寄存器中读出 在ShockBurst TM发送模式下nRF24L01自动生成前导码及CRC 校验参见表格12数据发送完毕后IRQ 通知MCU 减少了MCU 的查询时间也就意味着减少了MCU 的工作量同时减少了软件的开发时间nRF24L01内部有三个不同的RX FIFO 寄存器6个通道共享此寄存器和三个不同的TX FIFO 寄存器在掉电模式下待机模式下和数据传输的过程中MCU 可以随时访问FIFO 寄存器这就允许SPI 接口可以以低速进行数据传送并且可以应用于MCU 硬件上没有SPI 接口的情况下增强型的ShockBurst TM 模式增强型ShockBurst TM 模式可以使得双向链接协议执行起来更为容易有效典型的双向链接为发送方要求终端设备在接收到数据后有应答信号以便于发送方检测有无数据丢失一旦数据丢失则通过重新发送功能将丢失的数据恢复增强型的ShockBurst TM 模式可以同时控制应答及重发功能而无需增加MCU 工作量确实,,由硬件完成,,减小了量,,,图4 nRF24L01在星形网络中的结构图nRF24L01在接收模式下可以接收6路不同通道的数据见图4每一个数据通道使用不同的地址但是共用相同的频道也就是说6个不同的nRF24L01设置为发送模式后可以与同一个设置为接收模式的nRF24L01进行通讯而设置为接收模式的nRF24L01可以对这6个发射端进行识别数据通道0是唯一的一个可以配置为40位自身地址的数据通道1~5数据通道都为8位自身地址和32位公用地址所有的数据通道都可以设置为增强型ShockBurst 模式nRF24L01在确认收到数据后记录地址并以此地址为目标地址发送应答信号在发送端数据通道0被用做接收应答信号因此数据通道0的接收地址要与发送端地址相等以确保接收到正确的应答信号见图5 选择地址举例图5应答地址确定举例nRF24L01配置为增强型的ShockBurst TM发送模式下时只要MCU 有数据要发送nRF24L01就会启动ShockBurst TM 模式来发送数据在发送完数据后nRF24L01转到接收模式并等待终端的应答信号如果没有收到应答信号nRF24L01将重发相同的数据包直到收到应答信号或重发次数超过SETUP_RETR_ARC 寄存器中设置的值为止如果重发次数超过了设定值则产生MAX_RT 中断只要收到确认信号nRF24L01就认为最后一包数据已经发送成功接收方已经收到数据把TX FIFO 中的数据清除掉并产生TX_DS 中断IRQ 引脚置高在发射器中,,通道0要接收应答回来的信号,,所以应该与发送通道地址,,,相同,,在增强型ShockBurst模式下nRF24L01有如下的特征当工作在应答模式时快速的空中传输及启动时间极大的降低了电流消耗低成本nRF24L01集成了所有高速链路层操作比如重发丢失数据包和产生应答信号无需单片机硬件上一定有SPI口与其相连SPI 接口可以利用单片机通用I/O口进行模拟 由于空中传输时间很短极大的降低了无线传输中的碰撞现象由于链路层完全集成在芯片上非常便于软硬件的开发增强型ShockBurstTM发送模式1配置寄存器位PRIM_RX为低2当MCU有数据要发送时接收节点地址TX_ADDR和有效数据(TX_PLD)通过SPI接口写入nRF24L01发送数据的长度以字节计数从MCU写入TX FIFO当CSN为低时数据被不断的写入发送端发送完数据后将通道0设置为接收模式来接收应答信号其接收地址(RX_ADDR_P0)与接收端地址(TX_ADDR)相同例在图5中数据通道5的发送端(TX5)及接收端(RX)地址设置如下TX5TX_ADDR=0xB3B4B5B605TX5RX_ADDR_P0=0xB3B4B5B605RX RX_ADDR_P5=0xB3B4B5B6053设置CE为高启动发射CE高电平持续时间最小为10 us4nRF24L01 ShockBurst TM模式无线系统上电启动内部16MHz时钟无线发送数据打包见数据包描述高速发送数据由MCU设定为1Mbps或2Mbps5如果启动了自动应答模式自动重发计数器不等于0ENAA_P0=1无线芯片立即进入接收模式如果在有效应答时间范围内收到应答信号则认为数据成功发送到了接收端此时状态寄存器的TX_DS位置高并把数据从TX FIFO中清除掉如果在设定时间范围内没有接收到应答信号则重新发送数据如果自动重发计数器ARC_CNT溢出超过了编程设定的值则状态寄存器的MAX_RT位置高不清除TX FIFO中的数据当MAX_RT或TX_DS为高电平时IRQ引脚产生中断IRQ中断通过写状态寄存器来复位见中断章节如果重发次数在达到设定的最大重发次数时还没有收到应答信号的话在MAX_RX中断清除之前不会重发数据包数据包丢失计数器(PLOS_CNT)在每次产生MAX_RT中断后加一也就是说重发计数器ARC_CNT计算重发数据包次数PLOS_CNT计算在达到最大允许重发次数时仍没有发送成功的数据包个数6如果CE置低则系统进入待机模式I如果不设置CE为低则系统会发送TX FIFO寄存器中下一包数据如果TX FIFO寄存器为空并且CE为高则系统进入待机模式II.7如果系统在待机模式II当CE置低后系统立即进入待机模式I.增强型ShockBurst TM接收模式1 ShockBurst TM接收模式是通过设置寄存器中PRIM_RX位为高来选择的准备接收数据的通道必须被使能EN_RXADDR寄存器所有工作在增强型ShockBurst TM模式下的数据通道的自动应答功能是由(EN_AA寄存器)来使能的有效数据宽度是由RX_PW_Px寄存器来设置的地址的建立过程见增强型ShockBurst TM发送章节23 130us后4接收到有效的数据包后地址匹配CRC检验正确数据存储在RX_FIFO中同时RX_DR位置高并产生中断状态寄存器中RX_P_NO位显示数据是由哪个通道接收到的5如果使能自动确认信号则发送确认信号6 MCU设置CE脚为低进入待机模式I低功耗模式7 MCU将数据以合适的速率通过SPI口将数据读出8芯片准备好进入发送模式接收模式或掉电模式两种数据双方向的通讯方式如果想要数据在双方向上通讯寄存器必须紧随芯片工作模式的变化而变化处理器必须保证PTX和PRX端的同步性在RX_FIFO和TX_FIFO寄存器中可能同时存有数据CE=1是开始启动的标志,,,这个以前没有注意,,,!!!要接收几点的地址,,,看看要求,,,我的天那,,,认真看吧,,自动应答时,,接收方和发送方的EN_AA都要打开,,,接收方也要设置有效位,,跟发送的应该一致,,,自动应答RX自动应答功能减少了外部MCU 的工作量并且在鼠标/键盘等应用中也可以不要求硬件一定有SPI 接口因此降低成本减少电流消耗自动重应答功能可以通过SPI 口对不同的数据通道分别进行配置在自动应答模式使能的情况下收到有效的数据包后系统将进入发送模式并发送确认信号发送完确认信号后系统进入正常工作模式工作模式由PRIM_RX 位和CE 引脚决定自动重发功能ART (TX)自动重发功能是针对自动应答系统的发送方启动重发数据的时间长度在每次发送结束后系统都会进入接收模式并在设定的时间范围内等待应答信号接收到应答信号后系统转入正常发送模式如果TX FIFO 中没有待发送的数据且CE 脚电平为低则系统将进入待机模式I 如果没有收到确认信号则系统返回到发送模式并重发数据直到收到确认信号或重发次数超过设定值达到最大的重发次数有新的数据发送或PRIM_RX 寄存器配置改变时丢包计数器复位 数据包识别和CRC 校验应用于增强型ShockBurst TM模式下每一包数据都包括两位的PID 数据包识别来识别接收的数据是新数据包还是重发的数据包PID 识别可以防止接收端同一数据包多次送入MCU 在发送方每从MCU 取得一包新数据后PID 值加一PID 和CRC 校验应用在接收方识别接收的数据是重发的数据包还是新数据包如果在链接中有一些数据丢失了则PID 值与上一包数据的PID 值相同如果一包数据拥有与上一包数据相同的PID 值nRF24L01将对两包数据的CRC 值进行比较如果CRC 值也相同的话就认为后面一包是前一包的重发数据包而被舍弃1接收方接收方对新接收数据包的PID 值与上一包进行比较如果PID 值不同则认为接收的数据包是新数据包如果PID 值与上一包相同则新接收的数据包有可能与前一包相同接收方必须确认CRC 值是否相等如果CRC 值与前一包数据的CRC 值相等则认为是同一包数据并将其舍弃 2发送方每发送一包新的数据则发送方的PID 值加一图6PID 值生成和检测CRC 校验的长度是通过SPI 接口进行配置的一定要注意CRC 计算范围包括整个数据包地址PID确实,,减小了编程量,,,额,,,高四位设置,,额,,,两个CNT 就复位了,,,和有效数据等若CRC 校验错误则不会接收数据包这一点是接收数据包的附加要求在上图没有说明载波检测CD当接收端检测到射频范围内的信号时将CD 置高否则CD 为低内部的CD 信号在写入寄存器之前是经过滤波的内部CD 高电平状态至少保持128us 以上在增强型ShockBurst TM 模式中只有当发送模块没有成功发送数据时推荐使用CD 检测功能如果发送端PLOS_CNT 显示数据包丢失率太高时可将其设置位接收模式检测CD 值如果CD 为高说明通道出现了拥挤现象需要更改通信频道如果CD 为低电平状态距离超出通信范围可保持原有通信频道但需作其它调整数据通道nRF24L01配置为接收模式时可以接收6路不同地址相同频率的数据每个数据通道拥有自己的地址并且可以通过寄存器来进行分别配置数据通道是通过寄存器EN_RXADDR 来设置的默认状态下只有数据通道0和数据通道1是开启状态的 每一个数据通道的地址是通过寄存器RX_ADDR_Px 来配置的通常情况下不允许不同的数据通道设置完全相同的地址数据通道0有40位可配置地址数据通道1~5的地址为32位共用地址+各自的地址最低字节图7所示的是数据通道1~5的地址设置方法举例所有数据通道可以设置为多达40位但是1~5数据通道的最低位必须不同图7 通道0~5的地址设置当从一个数据通道中接收到数据并且此数据通道设置为应答方式的话则nRF24L01在收到数据后产生应答信号此应答信号的目标地址为接收通道地址 寄存器配置有些是针对所有数据通道的有些则是针对个别的如下设置举例是针对所有数据通道的 CRC 使能/禁止 CRC 计算 接收地址宽度 频道设置无线数据通信速率 LNA 增益 射频输出功率寄存器配置,,,注意了丗不同地址丆相同频率,,,不允许配置相同的地址的,,,额,,,这的目标地址为其接受到的地址,,,这么多是相同的,,,nRF24L01所有配置都在配置寄存器中所有寄存器都是通过SPI 口进行配置的 SPI 接口SPI 接口是标准的SPI 接口其最大的数据传输率为10Mbps 大多数寄存器是可读的 SPI 指令设置SPI 接口可能用到的指令在下面有所说明CSN 为低后SPI 接口等待执行指令每一条指令的执行都必须通过一次CSN 由高到低的变化 SPI 指令格式<命令字由高位到低位每字节>AAAAA AAAAA 1-32读操作全部从字节当读有效数据完成后寄存器中有效数据被清除应用于接收模式下1-32开始应用于发射模式下应用于发射模式下寄存器应用于接收模式下在传输应答信号过程中不应执行此指令信号过程中执行此指令的话将使得应答信号不能被完整的传输重新使用上一包有效数据当数据包被不断的重新发射空操作寄存器可能操作单字节或多字节寄存器当访问多字节寄存器时首先要读/写的是最低字节的高位在所有多字节寄存器被写完之前可以结束写SPI 操作在这种情况下没有写完的高字节保持原有内容不变例如RX_ADDR_P0寄存器的最低字节可以通过写一个字节给寄存器RX_ADDR_P0来改变在CSN 状态由高变低后可以通过MISO 来读取状态寄存器的内容 中断nRF24L01的中断引脚IRQ 为低电平触发当状态寄存器中TX_DS RX_DR 或MAX_RT 为高时触发中断当MCU 给中断源写1时中断引脚被禁止可屏蔽中断可以被IRQ 中断屏蔽通过设置可屏蔽中断位为高则中断响应被禁止默认状态下所有的中断源是被禁止的SPI 时序图8910和表910给出了SPI 操作及时序在写寄存器之前一定要进入待机模式或掉电模式在图8至图10中用到了下面的符号Cn-SPI 指令位 Sn-状态寄存器位Dn-数据位备注由低字节到高字节每个字节中高位在前图8SPI 读操作不会出现无线命令的配置,,,即:设置MASK 为高,,所以说写之前要把CSN 拉低,,,,图9SPI写操作图10SPI NOP 操作时序图表9SPI参考时间C load=5pF表10SPI参考时间C load=10pF寄存器地址所有未定义位可以被读出其值为0’地址 参数 位 复位值类型 描述 00 寄存器配置寄存器 reserved 7 0 R/W 默认为0 MASK_RX_DR 6R/W 可屏蔽中断RX_RD1IRQ 引脚不显示RX_RD 中断0RX_RD 中断产生时IRQ 引脚电平为低MASK_TX_DS 5 0 R/W 可屏蔽中断TX_DS1IRQ 引脚不显示TX_DS 中断0TX_DS 中断产生时IRQ 引脚电平为低MASK_MAX_RT 4 0 R/W 可屏蔽中断MAX_RT1IRQ 引脚不显示TX_DS 中断0MAX_RT 中断产生时IRQ 引脚电平为低EN_CRC 3 1 R/W CRC 使能如果EN_AA 中任意一位为高则EN_CRC 强迫为高CRCO 2 0 R/W CRC 模式‘0’-8位CRC 校验 ‘1’-16位CRC 校验PWR_UP 1 0 R/W 1:上电 0:掉电 PRIM_RX 0 0 R/W 1:接收模式 0:发射模式01 EN_AA Enhanced ShockBurst TM 使能自动应答功能此功能禁止后可与nRF2401通讯 Reserved 7:6 00 R/W 默认为0 ENAA_P5 5 1 R/W 数据通道5自动应答允许 ENAA_P4 4 1 R/W 数据通道4自动应答允许 ENAA_P3 3 1 R/W 数据通道3自动应答允许 ENAA_P2 2 1 R/W 数据通道2自动应答允许 ENAA_P1 1 1 R/W 数据通道1自动应答允许 ENAA_P0 0 1 R/W 数据通道0自动应答允许 02 EN_RXADDR 接收地址允许 Reserved 7:6 00 R/W 默认为00 ERX_P5 5 0 R/W 接收数据通道5允许 ERX_P4 4 0 R/W 接收数据通道4允许 ERX_P3 3 0 R/W 接收数据通道3允许 ERX_P2 2 0 R/W 接收数据通道2允许 ERX_P1 1 1 R/W 接收数据通道1允许 ERX_P0 0 1 R/W 接收数据通道0允许 03 SETUP_AW 设置地址宽度所有数据通道 Reserved 7:2 00000 R/W 默认为00000 AW 1:0 11 R/W 接收/发射地址宽度‘00’-无效‘01’-3字节宽度 ‘10’-4字节宽度 ‘11’-5字节宽度04 SETUP_RETR 建立自动重发允许–1Mbps ‘1’-18dBm当接收到有效数据后置一接收数据通道号数据通道号寄存器满标志寄存器满当写存器复位当丢失15个数据包后此寄存器重启 ARC_CNT 3:0 0 R 重发计数器发送新数据包时此寄存器复位09 CDReserved 7:1 000000 RCD 0 0 R 载波检测0A RX_ADDR_P0 39:0 0xE7E7E7E7E7 R/W 数据通道0接收地址最大长度:5个字节先写低字节所写字节数量由SETUP_AW设定0B RX_ADDR_P1 39:0 0xC2C2C2C2C2 R/W 数据通道1接收地址最大长度:5个字节先写低字节所写字节数量由SETUP_AW设定0C RX_ADDR_P2 7:0 0xC3 R/W数据通道2接收地址最低字节可设置高字节部分必须与RX_ADDR_P1[39:8]相等0D RX_ADDR_P3 7:0 0xC4 R/W数据通道3接收地址最低字节可设置高字节部分必须与RX_ADDR_P1[39:8]相等0E RX_ADDR_P4 7:0 0xC5 R/W数据通道4接收地址最低字节可设置高字节部分必须与RX_ADDR_P1[39:8]相等0F RX_ADDR_P5 7:0 0xC6 R/W数据通道5接收地址最低字节可设置高字节部分必须与RX_ADDR_P1[39:8]相等10 TX_ADDR 39:0 0xE7E7E7E7E7 R/W 发送地址先写低字节在增强型ShockBurst TM模式下RX_ADDR_P0与此地址相等11 RX_PW_P0Reserved 7:6 00 R/W 默认为00RX_PW_P0 5:0 0 R/W 接收数据通道0有效数据宽度(1到32字节)0: 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度12 RX_PW_P1Reserved 7:6 00 R/W 默认为00RX_PW_P1 5:0 0 R/W 接收数据通道1有效数据宽度(1到32字节)0: 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度13 RX_PW_P2Reserved 7:6 00 R/W 默认为00RX_PW_P2 5:0 0 R/W 接收数据通道2有效数据宽度(1到32字节)0: 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度14 RX_PW_P3Reserved 7:6 00 R/W 默认为00RX_PW_P3 5:0 0 R/W 接收数据通道3有效数据宽度(1到32字节)0 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度15 RX_PW_P4Reserved 7:6 00 R/W 默认为00RX_PW_P4 5:0 0 R/W 接收数据通道4有效数据宽度(1到32字节)0: 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度16 RX_PW_P5Reserved 7:6 00 R/W 默认为00RX_PW_P5 5:0 0 R/W 接收数据通道5有效数据宽度(1到32字节)0: 设置不合法1: 1字节有效数据宽度……32: 32字节有效数据宽度17 FIFO_STATUS FIFO 状态寄存器Reserved 7 0 R/W 默认为0TX_REUSE 6 0 R 若TX_REUSE=1则当CE位高电平状态时不断发送上一数据包TX_REUSE通过SPI 指令REUSE_TX_PL设置通过W_TX_PALOAD或FLUSH_TX复位TX_FULL 5 0 R TX FIFO寄存器满标志1:TX FIFO寄存器满0: TX FIFO寄存器未满有可用空间 TX_EMPTY 4 1 R TX FIFO寄存器空标志1:TX FIFO寄存器空0: TX FIFO寄存器非空 Reserved 3:2 00 R/W 墨认为00RX_FULL 1 0 R RX FIFO寄存器满标志1:RX FIFO寄存器满0: RX FIFO寄存器未满有可用空间 RX_EMPTY 0 1 R RX FIFO寄存器空标志1:RX FIFO寄存器空0: RX FIFO寄存器非空N/A TX_PLD 255:0 WN/A RX_PLD 255:0 R表11nRF24L01寄存器地址与nRF24XX兼容的寄存器配置如何建立nRF24L01从nRF2401/ nRF2402/ nRF24E1/ nRF24E2接收数据使用与nRF2401/ nRF2402/ nRF24E1/ nRF24E2相同的CRC配置设置PRIM_RX位为1相应通道禁止自动应答功能与发射模块使用相同的地址宽度与发射模块使用相同的频道在nRF24L01和nRF2401/ nRF2402/ nRF24E1/ nRF24E2两端都选择1Mbit/s的数据传输率设置正确的数据宽度设置PWR_UP和CE为高即频率相同,,,如何建立nRF24L01发射nRF2401/ nRF2402/ nRF24E1/ nRF24E2接收数据使用与nRF2401/ nRF2402/ nRF24E1/ nRF24E2相同的CRC 配置 设置PRIM_RX 位为0设置自动重发计数器为0禁止自动重发功能与nRF2401/ nRF2402/ nRF24E1/ nRF24E2使用相同的地址宽度 与nRF2401/ nRF2402/ nRF24E1/ nRF24E2使用相同的频道在nRF24L01和nRF2401/ nRF2402/ nRF24E1/ nRF24E2两端都选择1Mbit/s 的数据传输率 设置PWR_UP 为高发送与nRF2401/ nRF2402/ nRF24E1/ nRF24E2寄存器配置数据宽度相同的数据长度 设置CE 为高启动发射打包描述增强型ShockBurst TM 模式下的数据包形式前导码 地址35字节 9位标志位 数据132字节 CRC 校验 0/1/2字节ShockBurst TM 模式下与nRF2401/ nRF2402/ nRF24E1/ nRF24E2相兼容的数据包形式前导码 地址35字节 数据132字节 CRC 校验0/1/2字节1在发送模式下加入前导码从接收的数据包中自动去除地址PID 其中两位七位保留用作将来与其它产品相兼容nRF24L01 校验的多项式是校验的多项式是12重要的时序数据下面是nRF24L01部分工作时序数据nRF24L01时序信息nRF24L01时序最大值 最小值 参数名 掉电模式待机模式1.5ms T pd2stby 待机模式发送/接收模式 130usT stby2aCE 高电平保持时间10us Thce CSN 为低电平CE 上升沿的延迟时间4us T pece2csn表13nRF24L01工作时序nRF24L01在掉电模式下转入发射模式或接收模式前必须经过1.5ms 的待机模式注意当关掉电源VDD 后寄存器配置内容丢失模块上电后需重新进行配置最好禁止自动重发功能,,,增强型ShockBurst模式时序图11增强型ShockBurst TM模式发送一包数据时序2Mbps图11所示是发送一包数据并收到应答信号的示意图数据送入发送模块部分没有在图中显示接收模块转入接收模式CE=1发射模块配置为发射模式CE=1持续至少10us 130us 后启动发射再过37us 后发送一字节数据发送结束后发送模块自动转入接收模式等待应答信号发送模块在收到应答信号后产生中断通知MCU IRQ (TX_DS)=>TX-data sent(数据发送完)接收模块接收到数据包后产生中断通知MCU IRQ (RX_DR)=>RX-data ready(数据接收完毕)外围RF 信息 天线输出ANT1和ANT2输出脚给天线提供稳定的RF 输出这两个脚必须连接到VDD 的直流通路或者通过RF 扼流圈或者通过天线双极的中心点在输出功率最大时0dBm 推荐使用负载阻抗为15+j88通过简单的网络匹配可以获得较低的阻抗例如50Ω输出功率调节RF_PWR 输出功率 电流消耗11 0 dBm 11.3mA 10 -6 dBm 9.0 mA 01 -12 dBm 7.5 mA 00 -18 dBm 7.0 mA 工作条件VDD=3.0V ,VSS=0V ,T A =27,负载=15+j88表14nRF24L01输出功率设置接收完应答信号后才产生中断,,,。
nRF24LE1,nRF31512
nRF24LE1,nRF31512⼀⼂协议分析这两种芯⽚都是programming through SPI,烧录要⽤到的引脚有SPI_MOSI_Port :数据输⼊;SPI_MISO_Port :数据输出;SPI_SCLK_Port :时钟;SPI_CS_Port :从器件使能信号,低电平有效;SPI_RESET_Port :复位信号,低电平有效;SPI_PROG_Port :使能烧录,使⽤时根据不同的芯⽚拉⾼⾄具体的voltage。
以下是传输时序图: SPI read operation for direct and addressed command SPI write operations for direct and addressed commands各个标志含义如下:Cx :SPI Command bit;Ax :OTP address. Sequence MS to LS byte, MS to LS bit;Dx :SPI data bit, Sequence LS to MS byte, MS to LS bit. Presence depending on SPI command。
⼆⼂烧录流程需要注意的是: a)nRF31512属于OTP芯⽚,⽀持write&read,每个bit只能写⼀次,烧录原理就是例如默认值是0xFF时,给对应bit写0将数据到烧录芯⽚; b) nRF24LE1的memory为flash,⽀持write&erase&read。
read operation:在读的功能上两者操作流程是⼀样的1. 给VDD和PROG pin 脚上电⾄3.0V ;2. ⽀持整块的读取 a) SPI_CS_Port拉低,使能从器件; b) Issue READ command 0x03; c) Issue 2个字节的base_address ,⾼位在前,地位在后; d) 获取SPI_MISO_Port 上的数据; e) SPI_CS_Port拉⾼,释放从器件。
nRF24LE1中文手册
4
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
低电流消耗,2 Kbps 采样速率下仅 0.1 mA 电压比较器
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
nRF24LE1
超低功耗无线片上系统解决方案 产品说明书 V1.6
关键特征
l nRF24L01+2.4 Hz 收发器(250 bps,1 Mbps,2 Mbps 空中速率 l 集成高速单片机(兼容 8051) l 16 kB 片上程序存储器 l 1 kB 片上数据存储器 l 512 字节非易失性数据存储器 l AES 对称加密硬件加速 l 16-32 位乘法除法协处理器 l 6-12 位 ADC l 高灵活性输入输出端口 l 从超低功耗到高效运行的省电模式 l 4*4 mm QFN24 5*5mm QFN32 7*7mm QFN48 封装 l 支持硬件调试器 l 硬件支持固件更新
1 简介
nRF24LE1 是一款高性价比且内置微控制器的智能 2.4GHz 射频收发器家族中的一员。 nRF24LE1 为提供超低功耗无线应用而作了优化。处理器能力,内存,低功耗晶振,实时实 名,计数器,AES 加密加速器,随机数发生器和节电模式的组合为实现射频协议提供了理 想的平台。使用 nRF24LE1 的好处包括严密的协议时序,安全性,低功耗和改善共存的性能。 对于应用层,nRF24LE1 提供了一个丰富的外设包括:SPI,IIC,UART,6 至 12 位 ADC, PWM 和一个用于电压等级系统唤醒的超低功耗模拟比较器。 nRF24LE1 三种封装的差异 超紧凑 4*4mm 24 脚 QFN 封装(7 个通用 IO 引脚),主要用于对大小有严格要求的应用场 合,如 穿戴式运动传感器和手册 5*5mm 32 脚 QFN 封装(15 个通用 IO 引脚)适用于无线鼠标,远程控制和玩具 7*7mm 48 脚 QFN 封装(31 个通用 IO 引脚)为对 I/O 数量要求很高的产品而设计,如无线 键盘
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(函数读取数据。
nRF24LE1中文数据手册
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
1 Mbps 速率下非重叠频道间隔为 1 MHz 2 Mbps 速率下非重叠频道间隔为 2 MHz 增加型突发模式 1-32 字节动态有效载荷长度(即用户要发的数据长度可以 1-32 字节) 包自动处理(封包/解包) 自动包传输处理(自动应答确认,自动重传) 6 个数据通道可用于 6:1 星型网络
nRF24LE1 模块 nRF24LU1 模块 mPro 编程器 仅需 88 元! 支持芯片:51 AVR STC nRF24LXX PL3K 系列 EEPROM … 其他功能:USB 温湿度计 USB 开发板 USB 转串口 电脑遥控器
2
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
AD 转换 6,8,10,12 位分辨率 14 个输入通道 单端或差分输入 量程可通过内部参考电压,外部参考电压或 VDD 设置 2,4,8,16 Kbps 持续采样速率
4
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
低电流消耗,2 Kbps 采样速率下仅 0.1 mA 电压比较器
应用 l 电脑外设:鼠标、键盘、远程控制、游戏 l 高级远程控制:音频/视频、娱乐中心、家庭应用 l 有源 RFID、传感网络 l 安全系统:支付、报警、访问控制 l 医疗健康和运动 l 遥控玩具
1
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
9
nRF24LE1 nRF24LU1 模块 多功能编程器 RMB88
号进行解调,当地址与自身地址一致且 CRC 校验正确时,有效数据被送到 RX FIFOs.如果 RX FIFOs 已满,则数据包被丢弃。
nRF24L01模块介绍
nRF24L01芯片(模块)介绍nRF24L01芯片(模块)简介nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。
无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。
输出功率频道选择和协议的设置可以通过SPI 接口进行设置。
几乎可以连接到各种单片机芯片,并完成无线数据传送工作。
极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
nRF24L01芯片(模块)功能1、真正的GFSK单片式收发芯片。
2、内置硬件链路层。
3、增强型ShockBurst TM功能。
4、自动应答及自动重发功能。
5、地址及CRC检验功能。
6、无线速率:1或2Mbps7、SPI接口速率:0~8Mbps。
8、125个可选工作频道。
9、很短的频道切换时间,可用于跳频。
10、Nrf24XX系列完全兼容。
11、I/O可接受5V电平的输入。
12、20脚QFN 4X4mm封装。
13、极低成本晶振±60ppm。
14、低工作电压:1.9~3.6V。
nRF24L01芯片(模块)应用领域1、无线鼠标,键盘,游戏机操纵杆。
2、无线数据通讯。
3、无线门禁。
4、安防系统。
5、遥控装置。
6、遥感勘测。
7、智能运动设备。
8、工业传感器。
9、玩具。
nRF24L01芯片(模块)结构方框图nRF24L01芯片(模块)引脚及其功能。
NRF24L01无线模块C语言程序
NRF24L01无线模块C语言程序24MHz晶振#include#include#include#include#include#include#define U8 unsigned char#define U16 unsigned int#define TX_ADDR_WITDH 5 //发送地址宽度设置为5个字节#define RX_ADDR_WITDH 5 //接收地址宽度设置为5个字节#define TX_DATA_WITDH 1//发送数据宽度1个字节#define RX_DATA_WITDH 1//接收数据宽度1个字节#define R_REGISTER 0x00//读取配置寄存器#define W_REGISTER 0x20//写配置寄存器#define R_RX_PAYLOAD 0x61//读取RX有效数据#define W_TX_PAYLOAD 0xa0//写TX有效数据#define FLUSH_TX 0xe1//清除TXFIFO寄存器#define FLUSH_RX 0xe2//清除RXFIFO寄存器#define REUSE_TX_PL 0xe3//重新使用上一包有效数据#define NOP 0xff//空操作#define CONFIG 0x00//配置寄存器#define EN_AA 0x01//使能自动应答#define EN_RXADDR 0x02//接收通道使能0-5个通道#define SETUP_AW 0x03//设置数据通道地址宽度3-5 #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//P0通道数据宽度设置#define RX_PW_P1 0x12//P1通道数据宽度设置#define RX_PW_P2 0x13//P2通道数据宽度设置#define RX_PW_P3 0x14//P3通道数据宽度设置#define RX_PW_P4 0x15//P4通道数据宽度设置#define RX_PW_P5 0x16//P5通道数据宽度设置#define FIFO_STATUS 0x17//FIFO状态寄存器//NRF24L01U8 NRFACK();U8 NRFSPI(U8 date);U8 NRFReadReg(U8 RegAddr);U8 NRFWriteReg(U8 RegAddr,U8 date);U8 NRFReadRxDate(U8 RegAddr,U8 *RxDate,U8 DateLen);U8 NRFWriteTxDate(U8 RegAddr,U8 *TxDate,U8 DateLen);U8 NRFRevDate(U8 *RevDate);void NRFSetTxMode(U8 *TxDate);void NRF24L01Int();void NRFSetRXMode();U8 CheckACK();void Delay(U16 t);U8 bdata sta;//mainvoid Delay_10ms(U16 del);bit CE=P1^4; //RX/TX模式选择端sbit IRQ=P1^1; //可屏蔽中断端sbit CSN=P1^6; //SPI片选端//就是SSsbit MOSI=P1^0; //SPI主机输出从机输入端1sbit MISO=P1^2; //SPI主机输入从机输出端sbit SCLK=P1^3; //SPI时钟端U8 code TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址U8 bdata sta; //状态标志sbit RX_DR=sta^6;sbit TX_DS=sta^5;sbit MAX_RT=sta^4;void Delay(U16 t){U16 x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);}U8 NRFSPI(U8 date){U8 i;for(i=0;i<8;i++) // 循环8次{if(date&0x80)MOSI=1;elseMOSI=0; // byte最高位输出到MOSIdate<<=1; // 低一位移位到最高位SCLK=1;if(MISO) // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据date|=0x01; // 读MISO到byte最低位 SCLK=0; // SCK置低}return(date); // 返回读出的一字节}void NRF24L01Int(){Delay(2);//让系统什么都不干CE=0; //待机模式1CSN=1;SCLK=0;IRQ=1;}U8 NRFReadReg(U8 RegAddr){U8 BackDate;CSN=0;//启动时序NRFSPI(RegAddr);//写寄存器地址BackDate=NRFSPI(0x00);//写入读寄存器指令CSN=1;return(BackDate); //返回状态}U8 NRFWriteReg(U8 RegAddr,U8 date){U8 BackDate;CSN=0;//启动时序BackDate=NRFSPI(RegAddr);//写入地址NRFSPI(date);//写入值CSN=1;return(BackDate);}U8 NRFReadRxDate(U8 RegAddr,U8 *RxDate,U8 DateLen){ //寄存器地址//读取数据存放变量//读取数据长度//用于接收 U8 BackDate,i;CSN=0;//启动时序BackDate=NRFSPI(RegAddr);//写入要读取的寄存器地址for(i=0;i{RxDate[i]=NRFSPI(0);}CSN=1;return(BackDate);}U8 NRFWriteTxDate(U8 RegAddr,U8 *TxDate,U8 DateLen){ //寄存器地址//写入数据存放变量//读取数据长度//用于发送 U8 BackDate,i;CSN=0;BackDate=NRFSPI(RegAddr);//写入要写入寄存器的地址for(i=0;i{NRFSPI(*TxDate++);}CSN=1;return(BackDate);}void NRFSetTxMode(U8 *TxDate){//发送模式CE=0;NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);//写寄存器指令+接收地址使能指令+接收地址+地址宽度NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);//为了应答接收设备,接收通道0地址和发送地址相同NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a); // 自动重发延时等待250us+86us,自动重发10次NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益NRFWriteReg(W_REGISTER+CONFIG,0x0e); // CRC使能,16位CRC 校验,上电CE=1;Delay(5);//保持10us秒以上}//主要接收模式void NRFSetRXMode(){CE=0;NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH); // 接收设备接收通道0使用和发送设备相同的发送地址NRFWriteReg(W_REGISTER+EN_AA,0x01);// 使能接收通道0自动应答NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0NRFWriteReg(W_REGISTER+RF_CH,0x40);// 选择射频通道0x40NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH); // 接收通道0选择和发送通道相同有效数据宽度NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益*/NRFWriteReg(W_REGISTER+CONFIG,0x0f); / / CRC使能,16位CRC校验,上电,接收模式CE = 1;Delay(5);//保持10us秒以上}U8 CheckACK(){ //用于发射sta=NRFReadReg(R_REGISTER+STATUS);// 返回状态寄存器if(TX_DS||MAX_RT) //发送完毕中断{NRFWriteReg(W_REGISTER+STATUS,0xff); // 清除TX_DS或MAX_RT 中断标志CSN=0;NRFSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!!CSN=1;return(0);}elsereturn(1);}//用于接收模式U8 NRFRevDate(U8 *RevDate){U8 RevFlags=0;sta=NRFReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器 if(RX_DR) // 判断是否接收到数据{CE=0; //SPI使能NRFReadRxDate(R_RX_PAYLOAD,RevDate,RX_DATA_WITDH);// 从RXFIFO读取数据RevFlags=1; //读取数据完成标志}NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标return(RevFlags);}void Delay_10ms(U16 del){U16 i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++) //这个是通过软件仿真得出的数;}// 做发射main(){U8 TxDate[1]={0};NRF24L01Int();Delay(6000);while(1){if(KEY==0){if(KEY==0){Delay_10ms(2);TxDate[0]=0x08;//发射按键标识值NRFSetTxMode(TxDate);while(CheckACK());TxDate[0]=0;}}}}//// 做接收:一直处于接受模式查询所得到的值是不是0x08 main(){U8 x;U8 RxBuf[1]={0};NRF24L01Int();Delay(6000);while(1){NRFSetRXMode();NRFRevDate(RxBuf);x=RxBuf[0];if(x==0x08)//0x08为发射部分所发送的按键标识{////加入所要执行的功能函数//当然了这里用到单片机io口的时候需要在之前定义//还有就是发送程序中的KEY也需要之前定义好 RxBuf[0]=0;}}}。
NRF24L01参考程序(包含多个实例)
(相关人员如觉得本人水平低下,还请见谅)Nrf24L01的使用程序和使用方法和简单操作:功能:无线对发程序。
两个模块a,b,实现按下一个按键,会在对方的数码管上显示3或4,在本机上显示1,2。
当一个模块,比如a模块。
当两个按键按下其中一个,则会在另一个模块b上显示数字3,4(具体根据按下哪个按键)。
以上功能描述,B模块按键按下,如同a模块一样的功能,不做系统性描述了。
下面给出程序中几个地方的解释:#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 // 保留类似这种的描述,可以等同于READ_REG =0x00;这个是经过实际程序测试出来的,比如以下程序:#include<reg51.h>#define k 0xfevoid main(){P1=k;}则会出现此类结果:MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSIuchar = (uchar << 1); // shift next bit into MSB..SCK = 1; // Set SCK high..uchar |= MISO; // capture current MISO bitSCK = 0;此处为spi的核心,是spi协议的编程,其中uchar |= MISO; 表示uchar |= MISO | uchar; MOSI = (uchar & 0x80);其中0x80是1000 0000,与上uchar,这种&,是按位与,故可以从uchar提取出一个电平给mosi。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NRF24LE1编程器&烧写器使用说明
1、 使用真正USB2.0芯片,稳定可靠,不会出现识别不了USB 设备的情况
2、 全新升级! 支持芯片丰富,并可通过更新固件支持更多器件(升级固件无须编程器)
3、 体积小,携带方便
4、 及时修复各种问题并不断添加功能
5、 支持HEX 及BIN 编程文件格式
通讯接口:USB2.0
供电方式:USB 供电,目标板无需供电 接口驱动:支持5V 和 3.3V
支持芯片:51 A VR STC nRF24LXX PL3K 系列 EEPROM … 软件升级:支持升级以支持更多芯片 尺寸:4.5*2cm
Pin1
Pin2
Pin3Pin5Pin7Pin9 Pin4Pin6Pin8Pin10
连接目标板前请一定要看看是3.3V还是5V供电并正确设置跳线,烧写NRF24LE1需设置3.3V供电!
NRF24LE1程序下载烧写举例:
1.将烧写器的排线连接到读写器底板上的接口座。
(注意:烧写程序时底板上只能插上一个读写模块或标签,否则会引起冲突而无法完成烧写下载)
2.将烧写器USB接口插入电脑,这时可能会提示安装驱动,直接定位到mPro文件夹位置完成驱动安装。
3.烧写时,读写器可不用上电,直接由烧写器供电。
打开mPro软件界面,如下图所示:选择nRF24LE1芯片类型,然后点击“载入编程文件”,选取所要烧写的Hex文件,最后按图上所示在烧写选项“检测器件”、“擦FLASH”、“写FLASH”、“校验”前打勾,点
击“自动”即完成烧写下载工作。