RF24L01开发文档
24L01 台产资料
一、模块介绍(1) 2.4Ghz 全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合(3) 126 频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 低功耗1.9 - 3.6V 工作,待机模式下状态为22uA;掉电模式下为900nA(6) 内置2.4Ghz 天线,体积种类多样(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便(8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效果(9) 2.54MM间距接口,DIP封装(10)工作于Enhanced ShockBurst 具有Automatic packet handling, Auto packet transaction handling,具有可选的内置包应答机制,极大的降低丢包率。
(11)与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。
(12)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24l01模块的IO口线连接。
比如AVR系列单片机如果是5V 的,一般串接2K 的电阻二、接口电路说明:1) VCC脚接电压范围为1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。
推荐电压3.3V左右。
(2) 除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO 口直接相连,无需电平转换。
当然对3V左右的单片机更加适用了。
(3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。
(4) 如果需要其他封装接口,比如密脚插针,或者其他形式的接口,可以联系我们定做。
24L01模块说明
24L01微功率2.4G高速无线收发模块简介一.24L01模块简介★ 2.4G全球开放ISM频段,最大0dBm发射功率。
★ 支持2M的高速数据传输,减少发射时间,降低平均功耗。
★ 125个频点,满足多点通信和跳频通信需要★ 内置2.4G天线,体积小巧,15X34mm 方便集成使用★ 当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了平均功耗。
★ 集成了所有与RF协议相关的高速信号处理部分,如:自动重发丢失数据包和自动产生应答信号等,SPI接口可以利用单片机的硬件SPI口连接或用单片机的I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
★ 由于链路层完全集成在模块上,非常便于开发。
★ 自动重发功能,自动检查和重发丢失的数据包,重发时间及重发次数可软件控制★ 自动存储未收到的应答信号的数据包★ 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程★ 内置硬件CRC检错和点对多点通信地址控制★ 数据包传输错误计数器及载波检测功能可用于跳频设置★ 可同时设置六路接收通道地址,可选择性的打开接收通道★ 标准的2.54mmDIP间距接口,便于嵌入式应用。
★ 提供参考源代码,应用原理图等详细资料,上手快,缩短您的开发时间二.24L01模块的应用1、智能家庭、家居应用和无线传感、安全系统;2、控制处理、无线数据连接、遥测、小型无线网络;3、车辆监控、防盗;机器人控制,飞思卡尔智能车控制4、无线抄表、门禁系统、小区传呼;5、工业数据采集系统、生物信号采集、水文气象监控等;三.24L01模块的技术指标产品型号 24L01工作频率 2400-2525M调制方式 GFSK发射功率 0dBm接收灵敏度 -85dBm@1M -82dBm@2M 工作电压 1.9---3.6V谐波1st<-20dBc ; 2nd<-50dB杂散 <-60dBm发射电流 11 mA @0dBm接收电流 12.3mA用户接口方式 SPI工作温度 -30℃~70℃工作湿度 10%~90%相对湿度,无冷凝外形尺寸 15mm×34mm参考距离 开阔地最远80米四.24L01端口定义及连接示意图1、端口定义2、连接示意图3、SPI接口SPI 接口由SCK , MISO , MOSI及CSN组成在待机或掉电模式下,单片机通过SPI接口配置模块的工作参数,在发射或接收模式下,单片机通过SPI接口发送或接收数据,中断接口IRQ可提供如下几种中断输出(可选): 数据发射结束TX_DS,数据接收就绪TX_DR,重发此时达到最大MAX_RF具体模块的SPI配置参数及工作时序请参考NORDIC的官方文件。
nordic nRF24LE1无线监控通信快速开发文档V1.0
nRF24LE1无线监控通信开发文档ATR—609撰写时间:2010年9月9日nRF24LE1无线监控通信开发文档 (1)第一章项目背景概述 (4)第二章nRF24LE1背景知识 (6)2.1 nRF24LE1的硬件架构介绍 (6)2.2 nRF24L01+2.4G射频收发器介绍 (6)2.2.1射频收发器架构介绍 (6)2.2.2 射频收发功能说明 (7)2.2.3 增强型ShockBurst (8)2.3 存储器相关 (9)第三章软硬件开发平台搭建 (11)3.1 硬件平台介绍 (11)3.2 软件平台介绍 (11)3.2.1 软件开发包SDK (12)3.2.2 nRF软件综合环境 (13)3.2.3 nRFprobe——在线仿真软件调试工具 (14)3.2.4 软件开发平台 (14)3.3 nRF24LE1 DK Getting Started Guide (15)第四章子模块代码解析 (17)4.1 I/O口的使用 (17)4.2 UART子模块 (18)4.3 实时钟RTC (20)4.4跳频子函数 (21)4.5 发送和接收子模块 (22)第五章无线抗干扰技术 (27)5.1 2.4GHz ISM频段分析 (27)5.2 无线抗干扰设计 (29)第六章无线通信协议 (30)6.1介质访问控制协议设计 (30)6.2 通信协议设计 (32)参考文献 (34)第一章项目背景概述本无线通信设计应用于家庭安防监控系统。
如图1.1所示,该系统以主机为中心,多个传感器及摄像头等设备与主机构成一个星形的网络结构。
他们每个节点都配有一个无线收发模块nRF24LE1,主机也有无线收发模块,因此主机与各个设备之间都是无线通讯的,不需要布线来进行连接,系统维护和管理都不需要太多的外部干预,这样使得系统更加简便安全。
图1.1 无线通信系统框图各模块之间的通信关系:主机与摄像头之间:①向主机申请加入网络,主机收到加入申请后,回复加入网络成功信号;②主机发送拍摄照片命令,摄像头收到指令后按指令要求向主机发送图片数据;③当传感器被触发后,向主机发送触发信号;④定时的网络维持。
RF24L01开发文档
至少10us,将时发送过程完成后。 4.1.1.1 Enhanced ShockBurstTM发射流程 A. 把接收机的地址和要发送的数据按时序送入RF24L01; B. 配置CONFIG寄存器,使之进入发送模式。 C. 微控制器把CE置高(至少10us),激发RF24L01进行Enhanced ShockBurstTM发射; D. RF24L01的Enhanced ShockBurstTM发射 (1) 给射频前端供电; (2)射频数据打包(加字头、CRC校验码); (3) 高速发射数据包; (4)发射完成,RF24L01进入空闲状态。
4.1.1.2 Enhanced ShockBurstTM接收流程 A. 配置本机地址和要接收的数据包大小; B. 配置CONFIG寄存器,使之进入接收模式,把CE置高。 C. 130us后,RF24L01进入监视状态,等待数据包的到来; D. 当接收到正确的数据包(正确的地址和CRC校验码),RF24L01自动 把字头、地址和CRC校验位移去; E. RF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起微控 制器中断)通知微控制器;F. 微控制器把数据从RF2401读出;G. 所 有数据读取完毕后,可以清除STATUS寄存器。RF2401可以进入四种 主要的模式之一。
(5) 低功耗1.9 - 3.6V 工作,待机模式下状态为22uA;掉电模式下 为900nA (6) 模块可软件设地址,只有收到本机地址时才会输出数据(提供 中断指示),可直接接各种单片机使用,软件编程非常方便 (7) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很 好的通信效果 (8) 标准 5*2 DIP间距接口,便于嵌入式应用 (9) 工作于Enhanced ShockBurst 具有Automatic packet handling, Auto packet transaction handling,具有可选的内置包应答机制, 极大的降低丢包率。 (10) RF24L01SE配外置天线,无阻挡传输距离50-100米,RF24L01B 配PCB内置天线,无阻挡传输距离20-50米。如需要传输更远距离, 请选用本公司出品的带功放电路的RF24L01PA模块 (11) 本公司提供目前几大主流单片机(AVR,MSP430,51,C8051F 等)的开发代码,客户只需要将代码移植,就能轻松应用本模块; 同时配套基于目前主流单片机(AVR,MSP430,51等)的无线开发系 统,帮助更快实现无线应用,欢迎配套选购 (12) 与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余 口连接不需要 (13) 其他系列的单片机,如果是5V的,请参考该系列单片机IO口输 出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模 块! 如果是3.3V的,可以直接和RF24L01模块的IO口线连接。比如AVR 系列单片机如果是5V的,一般串接2K的电阻。
基于nrf24l01的无线发电路的设计
基于nrf24l01的无线发电路的设计1.简介本文档旨在介绍基于n rf24l01的无线发电路的设计。
n rf24l01是一种低功耗、高性能的射频通信模块,它被广泛应用于无线通信领域。
本文将介绍无线发电路设计的基本原理、硬件连接、代码编写以及测试验证等内容。
2.设计原理2.1n r f24l01概述n r f24l01是一款2.4G Hz无线射频通信模块,采用G FS K调制解调方式,具备16个通道和自动频率跳变功能。
该模块工作在低功耗模式下,能够实现远距离的无线数据传输,适用于各种物联网应用场景。
2.2无线发电路设计原理无线发电路设计的目标是实现两个或多个无线设备之间的数据传输。
基于nr f24l01的无线发电路设计主要包括以下几个方面:硬件连接 1.:连接n r f24l01模块与控制单元,确保数据的稳定传输。
代码编写2.:编写适合的代码,配置nr f24l01模块的寄存器以及实现数据的发送和接收。
电源管理3.:合理设计电源电路,确保n rf24l01模块的稳定工作。
通信协议 4.:选择合适的通信协议,确保数据传输的可靠性和安全性。
3.硬件连接为了实现无线发电路的设计,需要先完成n rf24l01模块与控制单元的正确连接。
具体连接方法如下:1.将n rf24l01模块的V CC引脚连接至控制单元的3.3V电源引脚。
2.将n rf24l01模块的G ND引脚连接至控制单元的地引脚。
3.将n rf24l01模块的C E引脚连接至控制单元的某一可用G PI O引脚。
4.将n rf24l01模块的C SN引脚连接至控制单元的某一可用G PI O引脚。
5.将n rf24l01模块的S CK引脚连接至控制单元的S PI时钟引脚。
6.将n rf24l01模块的M OS I引脚连接至控制单元的S PI数据输出引脚。
7.将n rf24l01模块的M IS O引脚连接至控制单元的S PI数据输入引脚。
4.代码编写无线发电路的设计需要编写适合的代码,以实现n rf24l01模块的数据传输功能。
测温并24l01无线传输设计
河南大学物理与电子学院开放实验室单片机设计报告测温并24L01无线传输设计设计人:开放实验室入室人员目录0 前言 (1)1 系统组成与功能 (1)1.1系统组成 (1)1.1.1 AT89C52单片机 (1)1.1.2 18B20测温芯片 (6)1.1.3 24L01模块 (2)1.1.4 四位一体八段共阴数码管、无源蜂鸣器、74LS138 (3)1.2 系统功能 (6)1.3 系统功能扩充 (6)2 系统原理 (6)2.1无线发射仿真图 (6)2.2 无线接收仿真图 (7)2.3 实物照片 (7)3 程序流程图 (8)3.1 测温程序流程图 (8)3.2 发射程序流程图 (9)3.3 接收程序流程图 (10)4 具体程序 (11)4.1测温程序 (11)4.2 发射板部分程序 (11)4.3 接收板部分程序 (13)5 主要元件清单 (14)5.1 发射板其他主要元件 (14)5.2 接收板其他主要元件 (14)6 结论 (15)7测温并无线收发心得 (15)参考文献 (15)河南大学·物理与电子学院·开放实验室·单片机设计报告1 测温并24L01无线传输开放实验室入室人员(河南大学物理与电子学院,河南 开封,475004)0 前言温度的测试技术已经成熟,已经满足了人们的大部分需求,然而在某些工作场合下,我们更想知道与自己不在一个地方的温度,以便进行温度调控,更好更方便地生产生活,因此,温度的传输就成为了我们要考虑的内容了。
此单片机项目设计中,我们就基于24L01模拟温度的无线传输,经过调试,试验,已经实现了预期功能,同时也实现了对生产生活中温度预警的模拟功能。
1 系统组成与功能1.1 系统组成本系统主要有AT89C52单片机、复位按键、无源蜂鸣器、18B20芯片、24L01模块、四位一体共阴8段数码管等元件组成。
1.1.1 AT89C52单片机AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash 只读程序存储器和256 bytes 的随机存取数据存储器(RAM ),兼容标准MCS-51指令系统。
RF24L01PA
RF24L01PA无线模块开发指南(V2.0)一、模块介绍RF24L01PA ( 尺寸:48mm X 19mm, 标配约15-17CM长可折高增益天线)模块特点:(1) 2.4GHz 全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合(3) 125 频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 工作电压3.0-3.6V ,发射功率20dBm(VDD=3.3V)(6) 外置2.4GHz 天线,体积小巧 48mm X 18mm(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便(8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效果(9) 标准DIP间距接口,便于嵌入式应用(10)工作于Enhanced ShockBurst 具有Automatic packet handling, Auto packet transaction handling,具有可选的内置包应答机制,极大的降低丢包率(11) 本公司提供目前几大主流单片机(AVR,MSP430,51,C8051F等)的开发代码,客户只需要将代码移植,就能轻松应用本模块;同时配套基于目前主流单片机(AVR,MSP430,51等)的无线开发系统,帮助更快实现无线应用,欢迎配套选购(12) 开阔地传输距离300-600米(具体距离视环境和天线而定)(13) 与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要(14) 其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24L01PA模块的IO口线连接。
比如AVR系列单片机如果是5V的,一般串接2K的电阻二、接口电路管脚说明:(1)VCC脚接电压范围为 3.0V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。
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接收地址其余与双工通信相同以上就是简要的代码。
24l01(1)
24L01+超低功耗高性能 2.4GHz GFSK 无线收发芯片主要特性 工作在 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 封装应用范围 无线鼠标、键盘 无线遥控、体感设备 有源 RFID、NFC 智能电网、智能家居 无线音频 无线数据传输模块 低功耗自组网无线传感网节点封装图结构框图24L01+术语缩写术语 ARQ ART ARD BER CE CRC CSN DPL GFSK IRQ ISM LSB Mbps MCU MHz MISO MOSI MSB PA PID PLD RX TX PWR_DWN PWR_UP RF_CH RSSI RX RX_DR SCK SPI TX TX_DS XTAL 描述 Auto Repeat-reQuest Auto ReTransmission Auto Retransmission Delay Bit Error Rate Chip Enable Cyclic Redundancy Check Chip Select Dynamic Payload Length Gaussian Frequency Shift Keying Interrupt Request Industrial-Scientific-Medical Least Significant Bit Megabit per second Micro Controller Unit Mega Hertz Master In Slave Out Master Out Slave In Most Significant Bit Power Amplifier Packet Identity Payload RX TX Power Down Power UP Radio Frequency Channel Received Signal Strength Indicator Receiver Receive Data Ready SPI Clock Serial Peripheral Interface Transmitter Transmit Data Sent Crystal 中文描述 自动重传请求 自动重发 自动重传延迟 误码率 芯片使能 循环冗余校验 片选 动态载波长度 高斯频移键控 中断请求 工业-科学-医学 最低有效位 兆位每秒 微控制器 兆赫兹 主机输入从机输出 主机输出从机输入 最高有效位 功率放大器 数据包识别位 载波 接收端 发射端 掉电 上电 射频通道 信号强度指示器 接收机 接收数据准备就绪 SPI 时钟 串行外设接口 发射机 已发数据 晶体振荡器24L01+目 录1、简介.................................................. 4 2、引脚信息 .............................................. 5 3、工作模式 .............................................. 6 4、寄存器映射表 .......................................... 9 5、主要参数指标 ......................................... 10 6、封装................................................. 12 7、典型应用原理图 ....................................... 14 8、订单信息 ............................................. 17附: 典型配置方案 ....................................... 1924L01+1、简介24L01 是一颗工作在2.4GHz ISM频段,专为低功耗无线场合设计,集成嵌 入式 ARQ 基带协议引擎的无线收发器芯片。
基于nRF24LE1_RFID开发系统使用手册
2.4GHz 有源RFID 评估开发系统---------nRFSOC-RFID-Dev使用前请认真阅读本手册说明以及nRF24LE1数据手册为了便于用户开发应用先进的nRF24LE1高速嵌入式SOC无线芯片开发.4GHz有源R ID,迅通2F科技提供2.4GHz有源RFID评估开发系统。
包括两个2.4GHz 有源RFID实验板,一个可与计算机连接的2.4GHz RFID Reader,及详细参考源代码,原理图,资料光盘,加电即可使用,可方便地进行性能评测以及开发,并迅速掌握热门的2.4GHZ有源RFID的开发和设计。
时间 缩短您的开发时间,建立您对RF产品开发的信心;风险 接近实用的评估板,方便验证和改进,零风险;费用 您预算内很小一部分;市场 可对多种产品及应用进行验证,实现平台式的验证与应用资料 技术资料全,上手快,可以使您立刻进入与世界同步的无线设计领域;1、2.4GHz 有源RFID 评估开发系统示意图:2、2.4GHz 有源RFID 评估开发系统安装与使用:(1). 将CR2032电池装入RFID实验板的电池座,注意正极朝上(2). 拨动RFID实验板底部的电源开关到ON位置,使RFID实验板加电进入工作状态(3). 如图将RFID Reader接上串口线至PC(用来接收及监控读出的RFID数据),并接上+5V稳压电源(注意正负极)(4). 在计算机的串口接收终端上,将显示由Reader 所接收到的RFID接收数据。
3、2.4GHz 有源RFID 评估开发系统(程序烧录)使用开发系统提供的编程器通过ISP编程接口可直接对RFID实验板以及RFID Reader实验板上的nRF24LE1进行编程,编程连接图如下,详见《nRF Flash在线下编程器使用手册》。
A.. 对RFID Reader实验板上的nRF24LE1进行编程的连接图Reader/开发母板nRF Flash编程器编程连接线B. 对RFID实验板上的nRF24LE1进行编程的连接图Reader/开发母板nRF Flash编程器编程连接线将RFID实验板底部的电源开关设于OFF位置,而后将RFID实验板如图所示插入Reader上的适配器插座中,即可进行RFID板的在线编程。
RF24L01开发文档
0x00 0x20 0x61 0xA0 0xE1 0xE2 0xE3 0xFF
// Define read command to register // Define write command to register // Define RX payload register address // Define TX payload register address // Define flush TX register command // Define flush RX register command // Define reuse TX payload register command // Define No Operation, might be used to read status
三、模块结构和引脚说明
RF24L01模块使用Nordic公司的nRF24L01芯片开发而成。
四、工作方式
RF24L01有工作模式有四种:
收发模式 配置模式 空闲模式 关机模式
工作模式由PWR_UP register 、PRIM_RX register和CE决定,详 见下表。
4.1 收发模式 收 发 模 式 有 Enhanced ShockBurstTM 收 发 模 式 、 ShockBurstTM收发模式和直接收发模式三种, 收发模式由器件配 置字决定,具体配置将在器件配置部分详细介绍。
4.1.1 Enhanced ShockBurstTM收发模式 Enhanced ShockBurstTM收发模式下,使用片内的先入先 出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这 样可以尽量节能,因此,使用低速的微控制器也能得到很高的射 频数据发射速率。 与射频协议相关的所有高速信号处理都在片内 进行,这种做法有三大好处:尽量节能;低的系统费用(低速微 处理器也能进行高速射频发射);数据在空中停留时间短,抗干 扰性高。Enhanced ShockBurstTM技术同时也减小了整个系统的 平均工作电流。 在Enhanced ShockBurstTM收发模式下, RF24L01自动处 理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移 去。在发送数据时,自动加上字头和CRC校验码,在发送模式下, 置CE为高,至少10us,将时发送过程完成后。 4.1.1.1 Enhanced ShockBurstTM发射流程 A. 把接收机的地址和要发送的数据按时序送入RF24L01; B. 配置CONFIG寄存器,使之进入发送模式。 C. 微控制器把CE 置高(至少10us),激发RF24L01进行Enhanced ShockBurstTM 发射; D. RF24L01的Enhanced ShockBurstTM发射 (1) 给射 频前端供电; (2)射频数据打包(加字头、 CRC校验码); (3) 高速发射数据包; (4)发射完成,RF24L01进入空闲状态。 4.1.1.2 Enhanced ShockBurstTM接收流程 A. 配置本机地址 和要接收的数据包大小; B. 配置CONFIG寄存器,使之进入接收 模式,把CE置高。 C. 130us后, RF24L01进入监视状态, 等待数据包的到来; D. 当 接收到正确的数据包(正确的地址和CRC校验码),RF2401自动把 字头、地址和CRC校验位移去; E. RF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起 微控制器中断)通知微控制器; F. 微控制器把数据从RF2401读 出; G. 所有数据读取完毕后,可以清除STATUS寄存器。RF2401 可以进入四种主要的模式之一。 4.1.2 ShockBurstTM收发模式 ShockBurstTM收发模式可以与Nrf2401a,02,E1及E2兼容, 具体表
RF24L01中文详细资料 datasheet
待机模式 低电平
掉电模式 -
待机模式 待机模式 I 在保证快速启动的同时减少系统平均消耗电流 在待机模式 I 下 晶振正常工作 在待机
模式 II 下部分时钟缓冲器处在工作模式 当发送端 TX FIFO 寄存器为空并且 CE 为高电平时进入待机模式 II 在待机模式期间 寄存器配置字内容保持不变
掉电模式 在掉电模式下,nRF24L01 各功能关闭 保持电流消耗最小 进入掉电模式后 nRF24L01 停止工作
描述 确认信号 应答信号 自动重发 芯片使能 时钟信号 循环冗余校验 片选非 增强型 ShockBrustTM 高斯键控频移 中断请求 工业 科学 医学 低噪声放大 最低有效位 最低有效字节 兆位/秒 微控制器 主机输入从机输出 主机输出从机输入 最高有效位 最高有效字节 印刷电路板 数据包误码率 数据包识别位 载波 接收源 发射源 掉电 上电 接收 接收数据准备就绪 串行可编程接口 发送 已发送数据
引脚及其功能
引脚 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
名称 CE CSN SCK MOSI MISO IRQ VDD VSS XC2 XC1 VDD_PA ANT1 ANT2 VSS VDD IREF VSS VDD DVDD VSS
掉电模式和待机模式下电流消耗更低
快速参考数据
参数
数值
最低供电电压
1.9
最大发射功率
0
最大数据传输率
2000
发射模式下 电流消耗 0dBm
11.3
接收模式下电流消耗 2000kbps
12.3
温度范围
-40~ +85
数据传输率为 1000kbps 下的灵敏度
24l01 资料
温馨提示:如果您是新手推荐您按照我们写的顺序看哦!若您第一遍看的不是很明白,那么只要能够用起来就可以了,使用多了慢慢就会更深入明白这个无线模块(nrf24l01)了。
先来看接口电路,使用的IO口不是唯一的哦,可随意定义接口,当然是在使用IO口模拟SPI 且IRQ中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO模拟SPI的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:213602b31mfzox8tfvp8of.png (20.38 KB, 下载次数: 0)下载附件保存到相册NRF24L01无线无线模块发射简易教程【图文】新手必备2015-6-6 16:22 上传首先您需要了解NRF24L01,请参阅“NRF24L01芯片中文资料”或者“NRF24L01芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01的使用方法与乐趣。
我们所写的教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED闪烁一次,并且把接收到的数据通过串口发送到PC端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32个字节的数据,接收方接收到正确数据之后给予提示,通过LED闪烁灯形式。
3、把接收到的数据传送到PC进行查看。
4、发送端每隔大约1.5秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY方式设计NRF24L01的接口板,且包含含单片机平台,使用PCB方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
NRF24L01无线模块C语言程序之欧阳引擎创编
NRF24L01无线模块C语言程序欧阳引擎(2021.01.01)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,U8date);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; else MOSI=0; // byte最高位输出到MOSI date<<=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; //待机模式 1 CSN=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(Bac kDate);}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(Bac kDate);}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_WIT DH);//写入数据 NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0 NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a); // 自动重发延时等待250us+86us,自动重发10次 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(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); // 使能接收通道0 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WI TDH); // 接收通道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); } else return(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_WI TDH);// 从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; } } }}//// 做接收:一直处于接受模式查询所得到的值是不是0x08main(){ 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; } }}。
无线模块24L01双向收发
先发后接:/****************************************************************************** *****************************///hc-sr04 超声波测距模块DEMO 程序//晶振:11.0592//接线:模块TRIG接P3.6 ECH0 接p3.5//数码管:共阴数码管P2接数据口,P1.0 P1.1 P1.2接选通数码管/****************************************************************************** *****************************/#include <reg52.h> //器件配置文件#include <intrins.h>typedef unsigned char uchar;typedef unsigned char uint;//***************************************************************************** **************#define TX_ADR_WIDTH 1 // 5 uints TX address width#define RX_ADR_WIDTH 1 // 5 uints RX address width#define TX_PLOAD_WIDTH 1 // 20 uints TX payload#define RX_PLOAD_WIDTH 1 // 20 uints TX payloaduint const TX_ADDRESS[TX_ADR_WIDTH]= {0x01}; //本地地址uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x01}; //接收地址//***************************************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栈入栈出状态寄存器设置void Delay(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(uint uchar);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uint SPI_RW_Reg(uchar reg, uchar value);uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);void delayus(unsigned int i);void delayms(unsigned int k);void write_command(unsigned char command);void write_data(unsigned char dat);void init_1602();uchar RxBuf[1]; //存放接收到的数据uchar TxBuf[1]; //需要发送的数据//***************************************************************************** *************uint bdata sta; //状态标志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;//****************************************NRF24L01端口定义***************************************sbit M ISO =P1^5;sbit M OSI =P1^1;sbit SCK =P1^6;sbit CE =P1^7;sbit CSN =P1^2;sbit IRQ =P3^2;//1602控制端口sbit rs_1602=P0^0;sbit rw_1602=P0^1;sbit en_1602=P0^2;unsigned char a,b; //a用于接收的,b用于发送的/*以下为无线模块*///NRF24L01初始化void init_NRF24L01(void){delayus(100);CE=0; // chip enableCSN=1; // Spi disableSCK=0; // Spi clock line init highSPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动ACK应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB// SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收// SPI_RW_Reg(WRITE_REG + CONFIG, 0xbf);}//函数:uint SPI_RW(uint uchar)//功能:NRF24L01的SPI写时序uint SPI_RW(uint uchar){uint bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit{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; // ..then set SCK low again}return(uchar); // return read uchar}//函数:uchar SPI_Read(uchar reg)//功能:NRF24L01的SPI时序uchar SPI_Read(uchar reg){uchar reg_val;CSN = 0; // CSN low, initialize SPI communication...SPI_RW(reg); // Select register to read from..reg_val = SPI_RW(0); // ..then read registervalueCSN = 1; // CSN high, terminate SPI communicationreturn(reg_val); // return register value}//功能:NRF24L01读写寄存器函数uint SPI_RW_Reg(uchar reg, uchar value){uint status;CSN = 0; // CSN low, init SPI transactionstatus = SPI_RW(reg); // select registerSPI_RW(value); // ..and write value to it..CSN = 1; // CSN high againreturn(status); // return nRF24L01 status uchar}//函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars){uint status,uchar_ctr;CSN = 0; // Set CSN low, init SPI tranactionstatus = SPI_RW(reg); // Select register to write to and read status ucharfor(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)pBuf[uchar_ctr] = SPI_RW(0); //CSN = 1;return(status); // return nRF24L01 status uchar}//函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars){uint status,uchar_ctr;CSN = 0; //SPI使能status = SPI_RW(reg);for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //SPI_RW(*pBuf++);CSN = 1; //关闭SPIreturn(status); //}//函数:void SetRX_Mode(void)//功能:数据接收配置void SetRX_Mode(void){CE=0;// SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收CE = 1;delayus(130);}//函数: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使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO bufferrevale =1; //读取数据完成标志}SPI_RW_Reg(WRITE_REG+STA TUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT 都置高为1,通过写1来清楚中断标志return revale;}//函数:void nRF24L01_TxPacket(unsigned char * tx_buf)//功能:发送tx_buf中数据void nRF24L01_TxPacket(unsigned char * tx_buf){CE=0; //StandBy I模式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 + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送CE=1; //置高CE,激发数据发送delayus(10);}//通过串口将接收到数据发送给PC端void R_S_Byte(uchar R_Byte){SBUF = R_Byte;while( TI == 0 ); //查询法TI = 0;}/*无线模块到此为止*//*以下为延时模块*///延时1MS函数void delayms(unsigned int k){unsigned int j,i;for(j=k;j>0;j--)for(i=110;i>0;i--);}//延时1us函数void delayus(unsigned int i){for(;i>0;i--);}/*延时模块到此为止*//*以下为LCD1602模块*///1602写指令函数void write_command(unsigned char command)//写指令函数{rs_1602=0;rw_1602=0;en_1602=0;delayms(2);P2=command;delayus(2);en_1602=1;delayms(3);en_1602=0;}//1602写数据函数void write_data(unsigned char dat)//写数据函数{rs_1602=1;rw_1602=0;en_1602=0;delayms(2);P2=dat;delayus(2);en_1602=1;delayms(3);en_1602=0;}//1602初始化程序void init_1602()//初始化{write_command(0x01);//清屏write_command(0x38);//设置16*2显示,5*7点阵,8位数据口write_command(0x0c);//开显示、显示光标write_command(0x80);//写1062初始地址,0x80为1602第一行第一个地址}/*LCD1602模块到此为止*/void main(){a=1;b=1;TxBuf[0]=5;RxBuf[0]=0;init_1602(); //1602初始化init_NRF24L01(); //无线通信24L01初始化delayms(300);EA=1; //开启总中断EX0=1;//开外部中断1IT0=1;//下降沿触发while(1){SPI_RW_Reg(WRITE_REG + CONFIG, 0xfe); //24L01处于发送状态delayms(30);nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer datadelayms(30); //可变SPI_RW_Reg(WRITE_REG+STATUS,0XFF);delayms(30);while(b){a=1;TxBuf[0]++;if(TxBuf[0]>9)TxBuf[0]=0;break;}SPI_RW_Reg(WRITE_REG + CONFIG, 0xbf); //24L01处于接收状态SetRX_Mode(); //等待接受数据,在接受数据前要写这条指令delayms(300);while(a) //接收循环,中断函数中成功接收数据后,退出该循环{_nop_();}write_command(0x80);write_data(0x30+RxBuf[0]%10);}}void zhongd() interrupt 0 //外部中断函数{uchar i,j=1,temp;while(j){if(nRF24L01_RxPacket(RxBuf)) //接收数据{temp++;for(i=0;i<1;i++){R_S_Byte(RxBuf[i]);delayms(3);}j=0; //通过无线接收到的数据存入RxBuf[0]后再退出中断}}a=0; //接收到数据后,退出接收循环(循环在主函数里面进行)b=1; //接收到数据后,进入发送循环(循环在主函数里面进行)}先接后发:/****************************************************************************** *****************************///hc-sr04 超声波测距模块DEMO 程序//晶振:11.0592//接线:模块TRIG接P3.6 ECH0 接p3.5//数码管:共阴数码管P2接数据口,P1.0 P1.1 P1.2接选通数码管/****************************************************************************** *****************************/#include <reg52.h> //器件配置文件#include <intrins.h>typedef unsigned char uchar;typedef unsigned char uint;//***************************************************************************** **************#define TX_ADR_WIDTH 1 // 5 uints TX address width#define RX_ADR_WIDTH 1 // 5 uints RX address width#define TX_PLOAD_WIDTH 1 // 20 uints TX payload#define RX_PLOAD_WIDTH 1 // 20 uints TX payloaduint const TX_ADDRESS[TX_ADR_WIDTH]= {0x01}; //本地地址uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x01}; //接收地址//***************************************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栈入栈出状态寄存器设置void Delay(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(uint uchar);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uint SPI_RW_Reg(uchar reg, uchar value);uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);void delayus(unsigned int i);void delayms(unsigned int k);void write_command(unsigned char command);void write_data(unsigned char dat);void init_1602();uchar RxBuf[1]; //存放接收到的数据uchar TxBuf[1]; //需要发送的数据//***************************************************************************** *************uint bdata sta; //状态标志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;//****************************************NRF24L01端口定义***************************************sbit M ISO =P3^5;sbit M OSI =P3^1;sbit SCK =P3^6;sbit CE =P3^3;sbit CSN =P3^0;sbit IRQ =P3^2;//LCD12864端口定义sbit rs_12864=P1^0;sbit rw_12864=P1^1;sbit en_12864=P1^2;sbit psb_12864=P3^7;unsigned char a,b; //a用于接收的,b用于发送的/*以下为无线模块*///NRF24L01初始化void init_NRF24L01(void){delayus(100);CE=0; // chip enableCSN=1; // Spi disableSCK=0; // Spi clock line init highSPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动ACK应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB// SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收// SPI_RW_Reg(WRITE_REG + CONFIG, 0xbf);}//函数:uint SPI_RW(uint uchar)//功能:NRF24L01的SPI写时序uint SPI_RW(uint uchar){uint bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit{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; // ..then set SCK low again}return(uchar); // return read uchar}//函数:uchar SPI_Read(uchar reg)//功能:NRF24L01的SPI时序uchar SPI_Read(uchar reg){uchar reg_val;CSN = 0; // CSN low, initialize SPI communication...SPI_RW(reg); // Select register to read from..reg_val = SPI_RW(0); // ..then read registervalueCSN = 1; // CSN high, terminate SPI communicationreturn(reg_val); // return register value}//功能:NRF24L01读写寄存器函数uint SPI_RW_Reg(uchar reg, uchar value){uint status;CSN = 0; // CSN low, init SPI transactionstatus = SPI_RW(reg); // select registerSPI_RW(value); // ..and write value to it..CSN = 1; // CSN high againreturn(status); // return nRF24L01 status uchar}//函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars){uint status,uchar_ctr;CSN = 0; // Set CSN low, init SPI tranactionstatus = SPI_RW(reg); // Select register to write to and read status ucharfor(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)pBuf[uchar_ctr] = SPI_RW(0); //CSN = 1;return(status); // return nRF24L01 status uchar}//函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars){uint status,uchar_ctr;CSN = 0; //SPI使能status = SPI_RW(reg);for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //SPI_RW(*pBuf++);CSN = 1; //关闭SPIreturn(status); //}//函数:void SetRX_Mode(void)//功能:数据接收配置void SetRX_Mode(void){CE=0;// SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收CE = 1;delayus(130);}//函数: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使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO bufferrevale =1; //读取数据完成标志}SPI_RW_Reg(WRITE_REG+STA TUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT 都置高为1,通过写1来清楚中断标志return revale;}//函数:void nRF24L01_TxPacket(unsigned char * tx_buf)//功能:发送tx_buf中数据void nRF24L01_TxPacket(unsigned char * tx_buf){CE=0; //StandBy I模式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 + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送CE=1; //置高CE,激发数据发送delayus(10);}//通过串口将接收到数据发送给PC端void R_S_Byte(uchar R_Byte){SBUF = R_Byte;while( TI == 0 ); //查询法TI = 0;}/*无线模块到此为止*//*以下为延时模块*///延时1MS函数void delayms(unsigned int k){unsigned int j,i;for(j=k;j>0;j--)for(i=110;i>0;i--);}//延时1us函数void delayus(unsigned int i){for(;i>0;i--);}/*延时模块到此为止*//*LCD12864模块如下*/void wcom_12864(unsigned char command){rs_12864=0;//写指令rw_12864=0;en_12864=0;delayus(3);en_12864=1;P2=command;delayms(3);en_12864=0;}void wdata_12864(unsigned char dat){rs_12864=1;rw_12864=0;en_12864=0;delayus(3);en_12864=1;P2=dat;delayms(3);en_12864=0;}void init_12864(){psb_12864=1;wcom_12864(0x01);//清屏delayms(1);wcom_12864(0x38);delayms(1);wcom_12864(0xc0);delayms(1);wcom_12864(0x0c);delayms(1);}/*LCD12864模块到此为止*/void main(){a=1;b=1;TxBuf[0]=0x00;RxBuf[0]=0x00;init_12864(); //12864初始化init_NRF24L01(); //无线通信24L01初始化delayms(300);EA=1; //开启总中断EX0=1;//开外部中断1IT0=1;//下降沿触发while(1){SPI_RW_Reg(WRITE_REG + CONFIG, 0xbf); //24L01处于接收状态SetRX_Mode(); //等待接受数据,在接受数据前要写这条指令delayms(300);while(a) //接收循环,中断函数中成功接收数据后,退出该循环{_nop_();}delayms(1000); //改变这个延时函数可以改变连续两次收发的间隔,从处理器加了这个延时函数后,主控制器即使不加也是可以的wcom_12864(0x80);wdata_12864(0x30+RxBuf[0]%10);SPI_RW_Reg(WRITE_REG + CONFIG, 0xfe); //24L01处于发送状态delayms(30);nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer datadelayms(30); //可变SPI_RW_Reg(WRITE_REG+STATUS,0XFF);delayms(30);while(b){a=1;TxBuf[0]+=2;if(TxBuf[0]>9)TxBuf[0]=0;break;}}}void zhongd() interrupt 0 //外部中断函数{uchar i,j=1,temp;while(j){if(nRF24L01_RxPacket(RxBuf)) //接收数据{temp++;for(i=0;i<1;i++){R_S_Byte(RxBuf[i]);delayms(3);}j=0; //通过无线接收到的数据存入RxBuf[0]后再退出中断}}a=0; //接收到数据后,退出接收循环(循环在主函数里面进行)b=1; //接收到数据后,进入发送循环(循环在主函数里面进行)}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、 模块介绍
基于NRF24L01的无线模块分为两个型号:RF24L01B和RF24L01SE
RF24L01B(PCB板载天线) (尺寸:37mm*17mm*1.6mm)
RF24L01SE (外置天线)(尺寸:31mm*17mm*1.6mm)
RF24L01特点: (1) 2.4Ghz 全球开放ISM 频段免许可证使用 (2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别 适合工业控制场合 (3) 126 频道,满足多点通信和跳频通信需要 (4) 内置硬件CRC 检错和点对多点通信地址控制 (5) 低功耗1.9 - 3.6V 工作,待机模式下状态为22uA;掉电模 式下为900nA (6) 模块可软件设地址,只有收到本机地址时才会输出数据(提 供中断指示),可直接接各种单片机使用,软件编程非常方便 (7) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有 很好的通信效果 (8) 标准 5*2 DIP间距接口,便于嵌入式应用 (9) 工 作 于 Enhanced ShockBurst 具 有 Automatic packet handling, Auto packet transaction handling,具有可选的内 置包应答机制,极大的降低丢包率。 (10) RF24L01SE 配 外 置 天 线 空 旷 地 传 输 距 离 可 达 100 米 , RF24L01B空旷地传输距离约30-50米,由于2.4GHz的无线传输容 易受到外界干扰,传输的可靠性或传输距离会受到一定的影响。 (11) 公司开发有相应的无线开发板及开发系统供客户配套选 购,含一些实际应用例程,帮助更好进行无线应用开发。 (12) 与51系列单片机P0口连接时候,需要加10K的上拉电阻,与 其余口连接不需要。 (13) 其他系列的单片机,如果是5V的,请参考该系列单片机IO 口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易 烧毁模块! 如果是3.3V的,可以直接和RF2401模块的IO口线连 接。比如AVR系列单片机如果是5V的,一般串接2K的电阻。
#define RX_ADDR_P2
0x0C // 'RX address pipe2' register address
RF24L01配置字的CONFIG寄存器的位描述如下表所示。 RF24L01 CONFIG配置字描述
六、参考源代码
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2007,版权所有, 仅供试用。
#include <reg51.h>
//<nRF2401_Pins 对应引脚> sbit MISO =P1^3; sbit MOSI =P1^4; sbit SCK =P1^5; sbit CE =P1^6; sbit CSN =P3^7; sbit IRQ =P1^2;
0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define SETUP_AW
0x03 // 'Setup address width' register address
#define SETUP_RETR
0x04 // 'Setup Auto. Retrans' register address
#define RF_CH
0x05 // 'RF channel' register address
4.1.2 ShockBurstTM收发模式 ShockBurstTM收发模式可以与Nrf2401a,02,E1及E2兼容,具体表
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2007,版权所有, 仅供试用。
述前看本公司的-RF2401文档。 4.2 空闲模式 RF24L01的空闲模式是为了减小平均工作电流而设计,其最大的 优点是,实现节能的同时,缩短芯片的起动时间。在空闲模式下, 部分片内晶振仍在工作,此时的工作电流跟外部晶振的频率有 关。 4.4 关机模式 在关机模式下,为了得到最小的工作电流,一般此时的工作电流 为900nA左右。关机模式下,配置字的内容也会被保持在RF2401 片内,这是该模式与断电状态最大的区别。
#define RF_SETUP
0x06 // 'RF setup' register address
#define STATUS
0x07 // 'Status' register address
#define OBSERVE_TX
0x08 // 'Observe TX' register address
#define FLUSH_TX
0xE1 // Define flush TX register command
#define FLUSH_RX
0xE2 // Define flush RX register command
#define REUSE_TX_PL
0xE3 // Define reuse TX payload register command
4.1.1 Enhanced ShockBurstTM收发模式 Enhanced ShockBurstTM收发模式下,使用片内的先入先
出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这 样可以尽量节能,因此,使用低速的微控制器也能得到很高的射 频数据发射速率。与射频协议相关的所有高速信号处理都在片内 进行,这种做法有三大好处:尽量节能;低的系统费用(低速微 处理器也能进行高速射频发射);数据在空中停留时间短,抗干 扰性高。Enhanced ShockBurstTM技术同时也减小了整个系统的 平均工作电流。
在Enhanced ShockBurstTM收发模式下, RF24L01自动处 理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移 去。在发送数据时,自动加上字头和CRC校验码,在发送模式下, 置CE为高,至少10us,将时发送过程完成后。
4.1.1.1 Enhanced ShockBurstTM发射流程 A. 把接收机的地址和要发送的数据按时序送入RF24L01; B. 配置CONFIG寄存器,使之进入发送模式。 C. 微控制器把CE 置高(至少10us),激发RF2401的Enhanced ShockBurstTM发射 (1) 给射 频前端供电; (2)射频数据打包(加字头、CRC校验码); (3) 高速发射数据包; (4)发射完成,RF24L01进入空闲状态。
4.1.1.2 Enhanced ShockBurstTM接收流程 A. 配置本机地址 和要接收的数据包大小; B. 配置CONFIG寄存器,使之进入接收 模式,把CE置高。
C. 130us后,RF24L01进入监视状态,等待数据包的到来; D. 当 接收到正确的数据包(正确的地址和CRC校验码),RF2401自动把 字头、地址和CRC校验位移去; E. RF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起 微控制器中断)通知微控制器; F. 微控制器把数据从RF2401读 出; G. 所有数据读取完毕后,可以清除STATUS寄存器。RF2401 可以进入四种主要的模式之一。
三、模块结构和引脚说明
RF24L01模块使用Nordic公司的nRF24L01芯片开发而成。
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2007,版权所有, 仅供试用。
四、工作方式
RF24L01有工作模式有四种:
收发模式 配置模式 空闲模式 关机模式
工作模式由PWR_UP register 、PRIM_RX register和CE决定,详 见下表。
ShockBurstTM的配置字使RF24L01能够处理射频协议,在配 置完成后,在RF24L01工作的过程中,只需改变其最低一个字节 中的内容,以实现接收模式和发送模式之间切换。
ShockBurstTM的配置字可以分为以下四个部分: 数据宽度:声明射频数据包中数据占用的位数。这使得 RF24L01能够区分接收数据包中的数据和CRC校验码;
二、接口电路
说明: (1) VCC脚接电压范围为 1.9V~3.6V之间,不能在这个区间之外, 超过3.6V将会烧毁模块。推荐电压3.3V左右。 (2) 除电源VCC和接地端,其余脚都可以直接和普通的5V单片机 IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用 了。 (3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片 机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单 片机IO口就可以了,当然用串口也可以了。 (4) 9脚接地脚,需要和母板的逻辑地连接起来;2脚和9脚悬空。 (5) 排针间距为100mil,标准DIP插针,如果需要其他封装接口, 比如密脚插针,或者其他形式的接口,可以联系我们定做。
sbit LED2 =P3^5; sbit LED1 =P3^4; sbit KEY1 =P3^0; sbit KEY2 =P3^1;
// SPI(nRF24L01) commands
#define READ_REG
0x00 // Define read command to register
#define WRITE_REG
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2007,版权所有, 仅供试用。
地址宽度:声明射频数据包中地址占用的位数。这使得 RF24L01能够区分地址和数据;
地址:接收数据的地址,有通道0到通道5的地址; CRC:使RF24L01能够生成CRC校验码和解码。 当使用RF24L01片内的CRC技术时,要确保在配置字(CONFIG的 EN_CRC)中CRC校验被使能,并且发送和接收使用相同的协议。