完整word版NRF24L01详细教程Word文档下载推荐.docx
《完整word版NRF24L01详细教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整word版NRF24L01详细教程Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
I/O可接受5V电平的输入
20脚QFN4X4mm封装
极低成本晶振±
60ppm
使用低成本电感和双面PCB板
低工作电压:
1.9~3.6V
应用领域:
无线鼠标,键盘,游戏机操纵杆
无线数据通讯
无线门禁
安防系统
遥控装置
遥感勘测
智能运动设备
工业传感器
2.4GHz无线键盘鼠标有些就是使用此无线技术实现的呢。
引脚功能说明:
CSN、SCK、MISO、MOSI、IRQ、CE。
玩具
我们常见的
引脚分别为
CSN:
芯片的片选线,CSN为低电平芯片工作。
SCK:
芯片控制的时钟线(SPI时钟)
MISO:
芯片控制数据线(主入从出)
MOSI:
芯片控制数据线(主出从入)
IRQ:
中断信号。
无线通信过程中MCU主要是通过IRQ与NRF24L01进行通信。
CE协同NRF24L01的
CE:
芯片的模式控制线。
在CSN为低的情况下,
CONFIG寄
存器共同决定NRF24L01的状态。
NRF24L01主要有以下几种工作状态:
PowerDownMode:
掉电模式
TxMode:
发射模式
RxMode:
接收模式
Standby-1Mode:
待机1模式
Standby-2Mode:
待机2模式
F面来看看怎么配置这些模式
我们使用的模式主要为发射模式和接收模式。
吧。
我们知
道NRF24L01的通信协议为SPI(SPI的协议请大家查阅相应资料,XX一下你就会有收获哦!
),所以我们看看SPI协议怎么写(IO口模拟,STC89C52没有硬件SPI,若您会了STC12C5AXXXX系列的单片机那么您可以使用硬件的SPI,将会更加的方便高效)。
uchar5FI_RI(urhardat1妥港i贡眾垂.辛宅母立至遍数掩
UChafBit.CounT.打<
?
"
希算逬的庐吏沖农乱芝甘申勺歆这里点一F'
M尊朋疔乜
for(Bit_CoLint-0,Bi-t_CoLint;
S.Bit_Cciunl-t)
MOSI=(dat&
0x80):
dat={'
daI'
、1>
.
SCKh].
dat=UISO:
SCK=0.
I
return(dati.
//幫出数挥.MSB3咗乞耳丁給-h-号注加=
//右毎一*空'
無基其送下一辽、栽技
//.診品_
//議也鵠\悻土曲報彗'
世邑壬頂禺C兰衣陕S
//脸能匸网昶9主¥
屯吕•Hmm冶蠡痘.n■"
-<
村龙歩禹片谟iwrso
SPI
的代码,通用于任何拥有可操作IO的微处理器,需要
非常详细的注释哦!
也采用
以上为IO口模拟
做好位运算处理。
代码的解释如程序中的注释所示。
了自己喜欢的编程风格,您也可以借鉴的呢!
我们主要是来看看它的配置过程。
我想对于一种芯片它的正确配置是大家最为关心的,
有时您也许会为了这些配置问题而伤脑筋。
我们先来看发射模式改怎么配置的。
发射模式的配置顺序:
voidjBit_\BF24UOl(void)
CE=O:
W"
毛礬.
CS\=l.//SPS壬屋笄二』恥』芒化话F"
:
■畀
SCk=Ci//匸亍苦疋卯『打卢
SPITi-ne_Buf(SRITE_KEC-TK.ADDR,1A_ADOEI£
SS.IS_ADR_W1D1W):
//長JT衣翹绘疥
SPITr;
T*~Buf(irKnEREC+R厂*[)DR_P0厂脈」DEHESE,FX.//FS壤笛世融
SPIKff.Res(TKlTE_RI<
i=ELM,Q^Oil.//疙'
:
卯Mk一^广r
SPI_K^_fiealKRItE2RE{;
-E^i_RU0DK.Oytll).//r活哇亨"
韵姜住番解曾翳打我号询詳xE?
宜J平
SPkKff_ReB(TOITE^REC-SETVPRETR,GaF5>
.//设S吕“史〒il吉总釘:
匕Ml増如舲小冷霸』斗
SPO<
ReB™ilOE<
^-RF_CHr0>
:
//直菱吕-3"
丁15;
'
少.厅:
真
SPQ评ZF*mffEHE_FK”咼3門」0,RX_PLOAD_»
I[nH>
.y记骨#*磋沖屮却.血t冷爵切』芋杏SPI_Sff_R*(i:
TnilIE_RE€-RF_SErLP.fe07J..-跨当去叢上「1删7,右神丄严姿:
士黑朋閃
.SPI_Kff_Rs'
i(ISIIE_RBG*COPTICOxO#)盯—“丄尹磔壬-托空rm?
兰粪比
1.设置TX节点的地址,也就是发射地址,接收端需与这个地址相同,否则接收不
到数据。
寄存器为:
TX_ADDR
2.设置RX节点的地址,也就是接收时的地址,如果是在发射模式下那么功能是为
自动应答服务的(AUTOACK)。
RX_ADDR_P0
3.允许AUTOACK功能,意思是发送数据后都会等待接收端的应答信号,目的是保
证数据正确发送。
EN_AA
4.设置允许的接收通道,总共有6个通道,我们只使用通道0,其他通道的功能应
用大家熟悉了NRF24L01之后尝试吧。
EN_RXADDR
5.配置自动重发次数。
SETUP_RETR
6.选择通信的频率。
RF_CH
7.设置接收通道0的接收数据有效宽度,与第四步对应。
RX_PW_P0
8.配置发射的参数,主要为低噪放大器增益、发射的功率、无线传输的速率。
寄存
器为:
RF_SETUP
9.配置收发状态(这时配置为发射模式),CRC校验模式以及收发状态响应方式。
发射模式的配置就是如此了。
我们从第一行看看他是什
CONFIGTX
调用了函数SPl_Write_Buf(),它的原型是:
_Buf(ucharreg,uchar*pBuf,ucharByTe_Xuin)
么意思。
第一步设置TX的地址,
ucharSPIWrite
ucharstatus,Byte_Count;
CSX=0;
〃卯丈傅薨
status=SPI_RW(reg):
for{Byte-Count=0;
ByTe_Count<
ByTe_Num;
8yte_Count〒十):
SPI_R^'
(*pBuf-+):
-1:
rEturn(staxus);
调用哉用下而时语句逬存的.
SPI_TTite_W(raTE_REG亠TX.ADDR,T^_ADDRESS,TX_ADR_ffW™);
//设彗鏈史
WRITE_REG是写寄存器指令的基地址,TX_ADDR是相对于基地址的偏移量,WRITE_REG
+TX_ADDR就是设置发送地址的寄存器了。
若您不明白这些概念,也没关系,知道是这样使用的就行了。
这两个常量是用宏定义来定义的,原型如下:
^defineWRITE_REG0x20//写奇存器指令
^defineTX^ADDR0x10//发送地址寄存器
TX_ADDRESS就是要设置的地址了,NRF24L01的地址是5个字节的,也就是40位。
TX_ADR_WIDTH就是致命这个地址的长度了。
他们的定义如下:
ucharconstTX.ADDRESS:
TX_ADR_WIDTH]=;
0x34,0x43,0x10,0k10,0k01H打本地地址
5"
岌送迷址寛雯字疔丿即悶位
.・■=•-
^defineTX_ADR_WI&
TH
有这些命令和数据,再结合SPl_Write_Buf()这个函数就可以实现对NRF24L01本地发射
地址的设置了。
由SPl_Write_Buf()这个函数我们可以看到,它的写入方式是:
先设置将要操作的寄存器地址(这里是本地发射地址寄存器),然后再连续写入地址数据的信息,也就是TX_ADDRESS数组中的地址数据。
注意接收端的地址与这个必须一模一样。
那么第二句也是跟第一句同理的,操作的方式一模一样,只是选择的地址和写入的数据不一样而已。
SPI_Vite_Buf(WRrTE_REG-RX_ADDR_P0,RX.ADDRESS,RX_ADK_ffIDTH):
//设S菠农迪辿
如果您想深入了解,那么就是用编译器keil的跟踪功能查看各个寄存器的
意义吧,程序和硬件我们都有配套提供。
后面的寄存器操作使用的函数都是SPI_RW_Reg(),原型如下:
ucharSPI_RW_Reg(ucharreg,ucbarvalue)
ucharstatus:
CS\=0:
status=SPIRW(reg);
SFIRW(value):
CSX=1;
//
CSN拉氐启动SH通信注择要摄诈的哥存蓋
连择飭奇存器中写入数拯
CSN左寻粪止通信
return(status);
可以看到它的功能是选择一个寄存器然后写入这个寄存器的操作命令,是单字节进行的。
那么它是如何操作的呢?
它也是SPl_Write_Buf()类似,先选择寄存器然后向这个寄存器写入命令或数据。
到这呢我想对于彳很多刚学习不久的朋友来说,这些寄存、寄存器的数据或命令都是一些字节数据8位、16位或者其他,总是搞不清楚他们到底是怎么一回事,说实话这些在当时也困扰了我很长时间,这主要是这样的概念我们还没接受导致的,原来老师也总是跟我们将教室的门牌号和教室里学生之间的关系,由于刚接触很难真正理解。
总之简单一句话,如果你想找到在教室101房间的一个同学,那么你就得先找到101这个教室,然后再去找你想找的同学。
程序中的寄存器和寄存器中的数据跟这个也是相同的概念,你要操一
个命令位或者字节,那么你得先定位它的位置(寄存器),才能对它正确无误的操作。
言归正传,我们在操作一个芯片时,对其的控制都是以这种方式进行的:
先选择寄存器然后向这个寄存器写入(或读出)命令(状态)或数据。
以上的这些需要大家慢慢体会了,不明白也不影响我们使用这个NRF24L01的,呵呵!
紧接着就是第三步到第九步了,我想大家又会有疑问了:
为什么寄存器后面写入的数据
要是那样的呢?
这就需要知道他们各个位的意义了。
我们看下图就能明白了。
龜址
也
it位值
类型
00
奇存辭
配科奇胖
7
fVW
默认为
MASK^RXJIR
6
rt
MW
nJ中斷
1:
IRQ引W不駄示屮断
0:
RX_RD屮帧'
Hl打RQ引脚电T为低
MASK^rXJJS
5
n
宙w
1;
IRQ引脚爪聯吓TXDS屮冋
IXDS中斷严E时IRQ引购胞屮为低
MASK
RT一。
4
RW
町W蔽屮1崭MAX^KT
IRQUI脚H订门DS中撕
0:
MAXRT惭产生时JRQJ1脚电半ftt
FN-CRC
3
1
R/W
CRC剔巣FN^AA屮任亞位対高则
LNtRC强迫为品
CRtO
2
(1
ckc桧式
-n-s位CRf桂齡r-]6PCRcfid<
PWR^UP
11
RW
上电Oj'
HEr
E^RMRX
C
ft/W
檢收榄武W坛时權武
01
FN_AAhnhjnircJSlitxkHursl'
^'
便能“『1动应捋”功能
此功JjnRF240l通迅
Eieservtjd
7:
ftw
默认为0
1ENAAP5
51
(tW1数据通道5白动应1?
允许
1ENAA-PJ
;
RAV1ft据通jfl4f|动应符允许
ENAAP3
J5U«
通道3n动应拎允许
ENAA..P2
ft掘逋道2n动应存允许
ENAAP1
RyW
据通道In动应符允许
ENAATO
(tW
故据通道on动应谷^允许
1)2
EN.RXADDR
接收地址允许
Reserved
默认为00
ERX-P5
接收ft撫通道5允许
ERX-P4
据通ifi4允许
ERX.P3
搖牧tt獻■追3允许
ERX-P2
接牧敢铭遇逋2(许
ERX.PI
踐牧《«
通道1允许
CRX.PO
按救通道0允许
03
SETUP-AW
设8地址«
度(阶frft*通道)
0000()
默认为00000
AW
1:
II
搖收/发财地址寃段•00••无效■01-3字节包皮・|0・-»
字卩《度•ir-57nttt
04
SETUPRETR
it^rn动《«
ARD
0000
n妙s发徒时
•0000••尊待25O+86US
•OOOr•,待500*86us
•0010••等袖75O+86US
•1111'
•寻待4OOO・K6w
(MH时何址布-U&
JK发送完成到卜•包敷網开酌发射2树的时何何M)
ARC
3:
0011
LAV
门动«
发讣e
•0000••祭止n动彊发•oooor动nt发次
•0000••自动毗发15次
05
RF-CH
K认为0
RFCH
6:
0000010
KWnRK24L01r作通
06
RF-SETUP
000
R・W
«
认为000
PLLLOCK
PLLLOCKt许,仅应用试模式
RFDR
数獣传输卒:
-O'
-lMbpsT—2Mbps
M=PWR
2:
发射功*:
00'
—-IWDm'
Or—-UdHm10'
-bdBm
■irOdBtn
LNAJICURR
R'
W
低垛声放犬器tft益
07
STATUS
状态崙
认为0
RX-DR
RAV
援收ft据屮斷・•勺接牧刊冇效》据麻住一・HT泊除中斷.
TX-DS
数据发送完成中WhF数据发送完成后产生中
新.如來工作东n动应锌模戌卜••只彳广1搖牧
到应得仃時麻此位》・•vrift除中斷•
MAX-RT
RZW
达対a多次甬:
发中斯•vrw除中斯•如果MAXRT中断产生W必须淸除系统才能进行堆讯・
RX-P-NO
111
R
按枚ftttSMl道1人
008101:
数据通逍号H0:
木使用
HI:
RXFIFO寄存器为空
TX.FUIX
TXHF0寄*»
満标4^
kTXHFO花仔器Uli0:
TXFIFO耒满,仔町用空M.
OR
OBSERVE^TX
发送检测寄存器
PLOS_CNT
[«
包公失计«
[»
•当雪RFCIIwm此爾“》红位宀£
失IS个ftWUQj比斷仔》取利.
ARCCNT
欹发it»
»
-发送新&
据包时此崙“签S位
09
CD
000000
ft波检测
0A
RXADDR^PO
39:
OXE7E7E7E7E7
数据通逍0接收地址-W大长皮:
5个7W(5t写低7忆所歸字nttttlllSKTUPAW设定〉
OB
RX—ADDRJM
OxC2C2C2C2C2
RM
ft撫通道1接牧地址-绘大K度:
5个字W(先0$低字节•所y字"
fttt由SETUPAW设定)
OC
RX-ADDR-P2
0xC3
ft据通逍2接收地址.越低7n»
i设黄•薛7廿部分必須RXADDRPl|39:
8]相等.
(ID
RXADDRP3
0xC4
数据通逍3接收地址.益低字节町设賈.奇字"
部分必RXADDRPU39:
8]和等.
OE
RXADDRP4
—
0xC5
数据通道4接收地址・最低7打町BiR.霜字卩部分必復JjRXADDRP1[39:
8】相等•
OF
RX_ADDIl_P5
0xC6
数据通道5接收地址、最低字肖町设《•岛字肯部分必須峪RXADDRP1[39:
8]相傳.
10
031E7E7E7E7E7
发送地址.(先雪低
仕境强^?
ShockBurst™模虫FKXAUUKP0址相等-
RXPWTO
认为00
7;
欢认为00
RXPWPO
5:
接收数据通道0"
•效&
据宽度(!
刘327W)0:
设K不介法
1字竹冇效&
据室度
32:
327H冇效»
寛度
12
RXPWPI
RXPWP1
接收数据通;
aI仔效&
据宽度(1到327W)
aw不合法
lYHfi边数据世阻衣「盟字M仃敢習曲宽度
13
RXpgP2
ResvR'
td
茨认为帅
FIX=PW=P2
5;
rAv
接收数郭逋道2fr效藪据世叫1到32宁讪
0;
卷世■i;
fr注
17HV遵竝据迓酸
32/327疔仃效绘抓如玄
14
KJiPWpi
RcsvRtd
w
默认为如
RXPW卩3
s;
按ifo竝据通道3仃效故据如讪列32'
5}
0i览胃柝皆乩
1了节fl锻数