nRF24L01無線通信模塊使用手冊12_第1頁
nRF24L01無線通信模塊使用手冊12_第2頁
nRF24L01無線通信模塊使用手冊12_第3頁
nRF24L01無線通信模塊使用手冊12_第4頁
nRF24L01無線通信模塊使用手冊12_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、深圳市德普施科技有限公司nRF24L01無線通信模塊使用手冊一、模塊簡介該射頻模塊集成了NORDIC公司生產的無線射頻芯片nRF24L01:1支持2.4GHz的全球開放ISM頻段,最大發(fā)射功率為0dBm22Mbps,傳輸速率高3功耗低,等待模式時電流消耗僅22uA4多頻點(125個),滿足多點通信及跳頻通信需求5在空曠場地,有效通信距離:25m(外置天線)、10m(PCB天線)6工作原理簡介:發(fā)射數據時,首先將nRF24L01配置為發(fā)射模式,接著把地址TX_ADDR和數據TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫

2、入一次即可,然后CE置為高電平并保持至少10s,延遲130s后發(fā)射數據;若自動應答開啟,那么nRF24L01在發(fā)射數據后立即進入接收模式,接收應答信號。如果收到應答,則認為此次通信成功,TX_DS置高,同時TX_PLD從發(fā)送堆棧中清除;若未收到應答,則自動重新發(fā)射該數據(自動重發(fā)已開啟),若重發(fā)次數(ARC_CNT)達到上限,MAX_RT置高,TX_PLD不會被清除;MAX_RT或TX_DS置高時,使IRQ變低,以便通知MCU。最后發(fā)射成功時,若CE為低,則nRF24L01進入待機模式1;若發(fā)送堆棧中有數據且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數據且CE為高,則進入待機模式2。接收數據時

3、,首先將nRF24L01配置為接收模式,接著延遲130s進入接收狀態(tài)等待數據的到來。當接收方檢測到有效的地址和CRC時,就將數據包存儲在接收堆棧中,同時中斷標志位RX_DR置高,IRQ變低,以便通知MCU去取數據。若此時自動應答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1。二、模塊電氣特性參數數值單位供電電壓5V最大發(fā)射功率0dBm最大數據傳輸率2Mbps電流消耗(發(fā)射模式,0dBm)11.3mA電流消耗(接收模式,2Mbps)12.3mA電流消耗(掉電模式)900nA溫度范圍-40+85三、模塊引腳說明管腳符號功能方向1GND電源地

4、2IRQ中斷輸出O3MISOSPI輸出O4MOSISPI輸入I5SCKSPI時鐘I6NC空7NC空8CSN芯片片選信號I9CE工作模式選擇I10+5V電源四、模塊與AT89S52單片機接口電路VCCP1.0P1.1CNCNP1.2P1.3P1.4P3.2GNDAT89S52MCU模塊+5VCECSNCNCNSCKMOSIMISOIRQGNDNrf24L01通訊模塊注:上圖為示意連接,可根據自己實際需求進行更改;使用AT89S52MCU模塊時,請將Nrf24L01通訊模塊每個端口(MOSI、SCK、CSN和CE)接4.7K的排阻上拉到VCC增強其驅動能力(如下圖:)。若使用其它單片機與Nrf24

5、L01通訊模塊相連時請串聯2K電阻。五、工作模式控制工作模式由CE和PWR_UP、PRIM_RX兩寄存器共同控制:模式PWR_UPPRIM_RXCEFIFO寄存器狀態(tài)接收模式111-發(fā)射模式1011數據存儲在FIFO寄存器中,發(fā)射所有數據發(fā)射模式10012數據存儲在FIFO寄存器中,發(fā)射一個數據待機模式II101TX FIFO為空待機模式I1-0無正在傳輸的數據掉電模式0-注1:進入此模式后,只要CSN置高,在FIFO中的數據就會立即發(fā)射出去,直到所有數據數據發(fā)射完畢,之后進入待機模式II。注2:正常的發(fā)射模式,CE端的高電平應至少保持10us。24L01將發(fā)射一個數據包,之后進入待機模式I。

6、六、數據和控制接口通過以下六個引腳,可實現模塊的所有功能:IRQ(低電平有效,中斷輸出)CE(高電平有效,發(fā)射或接收模式控制)CSN(SPI信號)SCK(SPI信號)MOSI(SPI信號)MISO(SPI信號)通過SPI接口,可激活在數據寄存器FIFO中的數據;或者通過SPI命令(1個字節(jié)長度)訪問寄存器。在待機或掉電模式下,單片機通過SPI接口配置模塊;在發(fā)射或接收模式下,單片機通過SPI接口接收或發(fā)射數據。1SPI指令所有的SPI指令均在當CSN由低到高開始跳變時執(zhí)行;從MOSI寫命令的同時,MISO實時返回24L01的狀態(tài)值;SPI指令由命令字節(jié)和數據字節(jié)兩部分組成。SPI命令字節(jié)表指令

7、名稱指令格式(二進制)字節(jié)數操作說明R_REGISTER000A AAAA15讀寄存器。AAAAA表示寄存器地址。W_REGISTER001A AAAA15寫寄存器。AAAAA表示寄存器地址,只能在掉電或待機模式下操作。R_RX_PAYLOAD0110 0001132在接收模式下讀132字節(jié)RX有效斷氣。從字節(jié)0開始,數據讀完后,FIFO寄存器清空。W_TX_PAYLOAD1010 0000132在發(fā)射模式下寫131字節(jié)TX有效數據。從字節(jié)0開始。FLUSH_TX1110 00010在發(fā)射模式下,清空TX FIFO寄存器。FLUSH_RX1110 00100在接收模式下,清空RX FIFO寄存

8、器。在傳輸應答信號時不應執(zhí)行此操作,否則不能傳輸完整的應答信號。REUSE_TX_PL1110 00110應用于發(fā)射端。重新使用上一次發(fā)射的有效數據,當CE=1時,數據將不斷重新發(fā)射。在發(fā)射數據包過程中,應禁止數據包重用功能。NOP1111 11110空操作??捎糜谧x狀態(tài)寄存器。2SPI時序SPI讀寫時序見下面兩圖。在寫寄存器之前,一定要進入待機模式或掉電模式。其中,CnSPI指令位;Sn狀態(tài)寄存器位;Dn數據位(低字節(jié)在前,高字節(jié)在后;每個字節(jié)中高位在前)SPI讀時序SPI寫時序七、寄存器內容及說明地址(十六進制)寄存器位復位值類型說明00CONFIG配置寄存器Reserved70R/W默認

9、為0MASK_RX_DR60R/W可屏蔽中斷RX_RD1:中斷產生時對IRQ沒影響0:RX_RD中斷產生時,IRQ引腳為低MASK_TX_DS50R/W可屏蔽中斷TX_RD1:中斷產生時對IRQ沒影響0:TX_RD中斷產生時,IRQ引腳為低MASK_MAX_RT40R/W可屏蔽中斷MAX_RT1:中斷產生時對IRQ沒影響0:MAX_RT中斷產生時,IRQ引腳為低EN_CRC31R/WCRC使能。如果EN_AA中任意一位為高,則EN_CRC為高。CRCO20R/WCRC校驗值:0:1字節(jié)1:2字節(jié)PWR_UP10R/W0:掉電 1:上電PRIM_RX00R/W0:發(fā)射模式 1:接收模式01EN_

10、AA Enhanced ShockBurst使能“自動應答”功能Reserved7:600R/W默認為00ENAA_P551R/W數據通道5自動應答使能位ENAA_P441R/W數據通道4自動應答使能位ENAA_P331R/W數據通道3自動應答使能位ENAA_P221R/W數據通道2自動應答使能位ENAA_P111R/W數據通道1自動應答使能位ENAA_P001R/W數據通道0自動應答使能位02EN_RXADDR接收地址允許Reserved7:600R/W默認為00ERX _P550R/W數據通道5接收數據使能位ERX _P440R/W數據通道4接收數據使能位ERX _P330R/W數據通道3

11、接收數據使能位ERX _P220R/W數據通道2接收數據使能位ERX _P111R/W數據通道1接收數據使能位ERX _P001R/W數據通道0接收數據使能位03SETUP_AW設置地址寬度(所有數據通道)Reserved7:2000000R/W默認為00000AW1:011R/W接收/發(fā)射地址寬度:00:無效01:3字節(jié)10:4字節(jié)11:5字節(jié)04SETUP_RETR自動重發(fā)ARD7:40000R/W自動重發(fā)延時時間:0000:250us0001:500us1111:4000usARC3:00011R/W自動重發(fā)計數:0000:禁止自動重發(fā)0001:自動重發(fā)1次1111:自動重發(fā)15次05R

12、F_CH射頻通道Reserved70R/W默認為0RF_CH6:00000010R/W設置工作通道頻率06RF_SETUP射頻寄存器Reserved7:5000R/W默認為000PLL_LOCK40R/W鎖相環(huán)使能,測試下使用RF_DR31R/W數據傳輸率:0:1Mbps1:2MbpsRF_PWR2:111R/W發(fā)射功率:00:-18dBm01:-12dBm10:-6dBm11:0dBmLNA_HCURR01R/W低噪聲放大器增益07STATUS狀態(tài)寄存器Reserved70R/W默認值為0RX_DR60R/W接收數據中斷位。當收到有效數據包后置1。寫1清除中斷TX_DS50R/W發(fā)送數據中斷

13、。如果工作在自動應答模式下,只有當接收到應答信號后置1。寫1 清除中斷MAX_RT40R/W重發(fā)次數溢出中斷。寫1清除中斷。如果MAX_RT中斷產生,則必須清除后才能繼續(xù)通訊RX_P_NO3:1111R接收數據通道號:000-101:數據通道號110:未使用111:RX FIFO寄存器為空TX_FULL00RTX FIFO寄存器滿標志位08OBSERVE_TX發(fā)送檢測寄存器PLOS_CNT7:40R數據包丟失計數器。當寫RF_CH寄存器時,此寄存器復位。當丟失15個數據包后,此寄存器重啟。ARC_CNT3:00R重發(fā)計數器。當發(fā)送新數據包時,此寄存器復位。09CD載波檢測Reserved7:1

14、000000RCD00R0ARX_ADDR_P039:0E7E7E7E7E7R/W數據通道0接收地址。最大長度為5個字節(jié)。0BRX_ADDR_P139:0C2C2C2C2C2R/W數據通道1接收地址。最大長度為5個字節(jié)。0CRX_ADDR_P27:0C3R/W數據通道2接收地址。最低字節(jié)可設置,高字節(jié)必須與RX_ADDR_P139:8相等0DRX_ADDR_P37:0C4R/W數據通道3接收地址。最低字節(jié)可設置,高字節(jié)必須與RX_ADDR_P139:8相等0ERX_ADDR_P47:0C5R/W數據通道4接收地址。最低字節(jié)可設置,高字節(jié)必須與RX_ADDR_P139:8相等0FRX_ADDR_

15、P57:0C6R/W數據通道5接收地址。最低字節(jié)可設置,高字節(jié)必須與RX_ADDR_P139:8相等10TX_ADDR39:0E7E7E7E7E7R/W發(fā)送地址。在ShockBurstTM模式,設置RX_ADDR_P0與此地址相等來接收應答信號11RX_PW_P0Reserved7:600R/W默認為00RX_PW_P05:00R/W數據通道0接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)12RX_PW_P1Reserved7:600R/W默認為00RX_PW_P15:00R/W數據通道1接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)13RX_PW_P2Reserved7:60

16、0R/W默認為00RX_PW_P25:00R/W數據通道2接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)14RX_PW_P3Reserved7:600R/W默認為00RX_PW_P35:00R/W數據通道3接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)15RX_PW_P4Reserved7:600R/W默認為00RX_PW_P45:00R/W數據通道4接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)16RX_PW_P5Reserved7:600R/W默認為00RX_PW_P55:00R/W數據通道5接收數據有效寬度:0:無效1:1個字節(jié)32:32個字節(jié)17FIFO_STA

17、TUSFIFO狀態(tài)寄存器Reserved70R/W默認為0TX_REUSE60R若TX_REUSE=1,則當CE置高時,不斷發(fā)送上一數據包。TX_REUSE通過SPI指令REUSE_TX_PL設置;通過W_TX_PALOAD 或 FLUSH_TX復位TX_FULL50RTX_FIFO寄存器滿標志1:寄存器滿0:寄存器未滿,有可用空間TX_EMPTY41RTX_FIFO寄存器空標志1:寄存器空0:寄存器非空Reserved3:200R/W默認為00RX_FULL10RRX FIFO寄存器滿標志1:寄存器滿0:寄存器未滿,有可用空間RX_EMPTY01RRX FIFO寄存器空標志1:寄存器空0:寄

18、存器非空N/ATX_PLD255:0XWN/ARX_PLD255:0XR八、模塊編程控制1ShockBurstTM發(fā)射模式設置PRIM_RX為低。通過SPI接口,將接收節(jié)點地址(TX_ADDR)和有效數據(TX_PLD)寫入模塊,寫TX_PLD時,CSN必須一直置低。置CE為高,啟動發(fā)射。CE高電平持續(xù)時間至少為10us。ShockBurstTM發(fā)射模式:系統(tǒng)上電啟動內部16MHz時鐘數據打包數據發(fā)射若啟動了自動應答模式(ENAA_P0=1),則模塊立即進入接收模式(NO_ACK已設置)。如果接收到應答信號,則表示發(fā)射成功,TX_DS置高且TX FIFO中的有效數據被移出;如果沒有接收到應答信

19、號,則自動重發(fā)(自動重發(fā)已設置);如果自動重發(fā)次數超過最大值(ARC),MAX_RT置高,在TX FIFO中的數據不被移出。當MAX_RT和TX_DS置高時,IRQ激活。只有重新寫狀態(tài)寄存器(STATUS)才能關閉IRQ。如果重發(fā)次數達到最大后,仍沒有接收到應答信號,在MAX_RT中斷清除之前,不會再發(fā)射數據。PLOS_CNT計數器會增加,每當有一個MAX_RT中斷產生。如果CE置低,則系統(tǒng)進行待機模式I,否則發(fā)送TX FIFO寄存器中的下一個數據包。當TX FIFO中的數據發(fā)射完,CE仍為高時,系統(tǒng)進入待機模式II。在待機模式II下,CE置低,則進入待機模式I。2ShockBurstTM接收

20、模式設置PRIM_RX為高,配置接收數據通道(EN_RXADDR)、自動應答寄存器(EN_AA)和有效數據寬度寄存器(RX_PW_PX)。置CE為高,啟動接收模式。130us后,模塊檢測空中信號,接收到有效的數據包后(地址匹配、CRC檢驗正確),數據儲存在RX FIFO中,RX_DR置高。如果啟動了自動應答功能,則發(fā)送應答信號。MCU置CE為低,進入先機模式I。MCU可通過SPI接口將數據讀出模塊準備好進入發(fā)射模式或接收模式或待機模式。九、RF通道頻率RF通道頻率指的是nRF24L01所使用的中心頻率,該頻率范圍從2.400GHz到2.525GHz,以1MHz區(qū)分一個頻點,故有125個頻點可使

21、用。由參數RF_CH確定,公式為:F0 = 2400 + RF_CH(MHz)十、示例程序接收模塊與發(fā)射模塊大部分程序代碼相同,如下:1SPI命令和寄存器配置頭文件API.h(根據第六、七兩點編寫)#ifndef _BYTE_DEF_#define _BYTE_DEF_typedef unsigned char BYTE;#endif / SPI命令#define READ_REG0x00 /讀第0個寄存器#define WRITE_REG0x20 /寫第0個寄存器#define RD_RX_PLOAD0x61 /在接收模式下使用,讀有效數據#define WR_TX_PLOAD0xA0 /在

22、發(fā)送模式下使用,寫有效數據#define FLUSH_TX 0xE1 /在發(fā)送模式下使用,清TX FIFO寄存器#define FLUSH_RX 0xE2 /在接收模式下使用,清RX FIFO寄存器#define REUSE_TX_PL 0xE3 /發(fā)送方使用,重復發(fā)送最后的數據#define NOP 0xFF /空操作,用于讀狀態(tài)寄存器STATUS的值/ nRF24L01寄存器地址#define CONFIG 0x00 /配置寄存器,8bit#define EN_AA 0x01 /自動應答設置寄存器,8bit#define EN_RXADDR 0x02 /接收地址設置寄存器,8bit#def

23、ine SETUP_AW 0x03 /地址寬度設置寄存器,8bit#define SETUP_RETR 0x04 /自動重復發(fā)送設置寄存器,8bit#define RF_CH 0x05 /RF通道寄存器,8bit#define RF_SETUP 0x06 /RF設置寄存器,8bit#define STATUS 0x07 /狀態(tài)寄存器,8bit#define OBSERVE_TX 0x08 /發(fā)送觀測寄存器,8bit#define CD 0x09 /載波檢測寄存器,8bit,#define RX_ADDR_P0 0x0A /接收地址數據通道0,40bit#define RX_ADDR_P1 0x

24、0B#define RX_ADDR_P2 0x0C#define RX_ADDR_P3 0x0D#define RX_ADDR_P4 0x0E #define RX_ADDR_P5 0x0F #define TX_ADDR 0x10 /發(fā)送地址.發(fā)送方使用,40bit#define RX_PW_P0 0x11 /通道0接收的有效數據字節(jié)長度(1-32字節(jié)),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 FIF

25、O_STATUS 0x17 /FIFO狀態(tài)寄存器,8bit2SPI操作頭文件(與單片機的接口設置在此頭文件中)#defineuchar unsigned char#defineTX_ADR_WIDTH 5 /地址長度為5個字節(jié)#defineTX_PLOAD_WIDTH 20 /數據長度為20個字節(jié)uchar const TX_ADDRESSTX_ADR_WIDTH = 0xE7,0xE7,0xE7,0xE7,0xE7;char rx_bufTX_PLOAD_WIDTH;/接收緩沖區(qū)ucharflag;/標志位int test12;#defineCEP0_0/芯片使能:Chip Enable#d

26、efine CSN P0_1/片選信號:Chip Select Not#define SCK P1_2/串行時鐘信號:Serial Clock#defineMOSI P0_3/主發(fā)從收:Master In Slave Out#define MISO P0_4/主收從發(fā):Master Out Slave In#defineIRQ P3_2/中斷查詢:Interrupt Requestuchar bdata sta;sbitRX_DR= sta6;sbitTX_DS= sta5;sbitMAX_RT= sta4;uchar SPI_RW(uchar byte)/寫一個字節(jié)到nRF24L01,并返回

27、此時nRF24L01的狀態(tài)及數據uchar bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) /先寫字節(jié)的高位,再寫低位 MOSI = (byte & 0x80); /MOSI取byte最高位 byte = (byte 1); /byte左移一位 SCK = 1; /SCK從高到低時開始寫入 byte |= MISO; /獲取MISO位.從MOSI寫命令的同時,MISO返回nRF24L01的狀態(tài)及數據 SCK = 0; return(byte);uchar SPI_RW_Reg(BYTE reg, BYTE value)/將字節(jié)value寫入寄存器reguch

28、ar status; CSN = 0; /CSN為0時,才能進行SPI讀寫 status = SPI_RW(reg); /選擇寄存器reg SPI_RW(value); /寫字節(jié)value到該寄存器 CSN = 1;/終止SPI讀寫 return(status);BYTE SPI_Read(BYTE reg)/讀寄存器reg狀態(tài)字BYTE reg_val; CSN = 0; /CSN為0時,才能進行SPI讀寫 SPI_RW(reg); /選擇寄存器reg reg_val = SPI_RW(0); /寫0,什么操作也不進行,僅僅為了讀寄存器狀態(tài) CSN = 1; /終止SPI讀寫 return(

29、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并返回其狀態(tài)字 for(byte_ctr=0;byte_ctrbytes;byte_ctr+) pBufbyte_ctr = SPI_RW(0); /從寄存器讀數據 CSN = 1; /終止SPI讀寫 return(status); /返回狀態(tài)值ucha

30、r 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并返回其狀態(tài)字 for(byte_ctr=0; byte_ctrbytes; byte_ctr+) SPI_RW(*pBuf+);/寫數據到寄存器 CSN = 1; /終止SPI讀寫 return(status); /返回狀態(tài)值/接收模式初始化:設置RX地址,RX數據寬度,RF通道,速率,

31、低噪聲放大器增益/設置完之后,將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); / 自動重發(fā)延時:500us + 86us;重發(fā)次數:10次 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_A

32、DDRESS, 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,要與發(fā)送的一致 SPI_RW_R

33、eg(WRITE_REG + RF_SETUP, 0x0F); /速率為2Mbps,發(fā)送功率為0dBm,低噪聲放大器增益為1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); /PRIM_RX=1,接收方;PWR_UP=1;CRC檢驗字為2字節(jié);/發(fā)送模式初始化:設置發(fā)送地址,設置發(fā)送的數據,設置接收方地址,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(

34、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

35、+ RF_CH, 40);SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); void show_status(void)/顯示狀態(tài)寄存器的值 test0 = SPI_Read(EN_AA);/0x01 test1 = SPI_Read(EN_RXADDR);/0x01 test2 = SPI_Read(SETUP_AW);/0x03,5個字節(jié) test3 = SPI_Read(SETUP_RETR);/0x1a test4 = SPI_Read(RF_CH);/0x28 test5 = SPI_Read(RF_SETUP);/0x0f test6 = SPI_Re

36、ad(RX_ADDR_P2); test7 = SPI_Read(RX_ADDR_P3); test8 = SPI_Read(RX_ADDR_P4); test9 = SPI_Read(RX_ADDR_P5); test10 = SPI_Read(RX_PW_P0);/0x14 test11 = SPI_Read(STATUS);void init_io(void)CE = 0;/待機CSN = 1;/SPI禁止讀寫SCK = 0;void Inituart(void)/設置串口工作模式TMOD |= 0x20;/定時器1工作在方式2,8位自動重裝模式TL1 = 0xfd;/波特率為9600T

37、H1 = 0xfd;SCON = 0x50;/模式1,8位數據TR1 = 1;/啟動定時器1TI=1;void init_int0(void)/外部中斷設置EA=1;/允許全局中斷ES=1; /開串行口中斷EX0=1;/允許外部中斷0void delay_ms(unsigned int x)/毫秒級延時 unsigned int i,j; i=0; for(i=0;ix;i+) j=108; while(j-); 3發(fā)送模塊主函數(向接收模塊發(fā)射數據“abcdefg”,中斷方式)void main(void)int i;init_io();/IO端口設置Inituart();/串口設置init

38、_int0();/外部中斷0設置for(i=0;i7;i+)/待發(fā)的數據tx_buf,發(fā)送的數據為”abcdefg”七個字母tx_bufi = a+i;while(1)CE = 0;/Standby-1模式TX_Mode();/發(fā)送設置CE = 1;/啟動發(fā)送模式delay_ms(20);CE = 0;/Standby-1模式delay_ms(1000);/中斷函數/如果RX_DR=1,則讀取數據,之后清除標志位;/如果TX_DS或MAX_RT為1,則僅清除中斷標志位void ISR_int0(void) interrupt 0sta=SPI_Read(STATUS);/讀狀態(tài)寄存器STATU

39、Sif(RX_DR)/如接收到數據,則中斷SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/讀取接收的數據flag=1;/標志位置高if(MAX_RT)/重發(fā)中斷達到最大數SPI_RW_Reg(FLUSH_TX,0);/清除TX FIFO寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除RX_DR,TX_DS和MAX_RT中斷標志位4接收模塊主函數(接收并在串口輸出,同時輸出狀態(tài)寄存器的值,使用查詢方式)void main(void)int i;init_io();/IO端口設置Inituart();/串口設置init

40、_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;i7;i+)printf(%c ,rx_bufi);/通過串口發(fā)送接收到的數據printf(n);show_status();/輸出狀態(tài)寄存器的值,可不用此操作for(i=0;i12;i+)printf(%x ,testi);printf(n);dela

41、y_ms(10);if(MAX_RT)/重發(fā)中斷達到最大數SPI_RW_Reg(FLUSH_TX,0);/清除TX FIFO寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除RX_DR,TX_DS和MAX_RT中斷標志位最近項目基本都做完了,閑著沒事了,過來整理下博客,分享下自己的程序!這是幾個月前調通的程序,24L01無線收發(fā)芯片,mcu用的是msp430f2274!該程序花費了我大量心血!算是我學起單片機來攻克的第一塊芯片吧!注釋相當詳細!#include#define uint unsigned int#define uchar unsigned char/n

42、RF24L01的數據寬度,地址寬度,以及數據定義#define TX_ADR_WIDTH 4#define RX_PLOAD_WIDTH 4#define TX_PLOAD_WIDTH 4uchar TX_ADDRESS=0xe7,0xe7,0xe7,0xe7;uchar data4=zhou;uchar rx_buf4;/引腳定義2274#define CSN_HIGH P3OUT|=BIT1/P3.1控制SPI使能#define CSN_LOW P3OUT&=BIT1#define CE_HIGH P3OUT|=BIT2/P3.2控制芯片發(fā)射使能#define CE_LOW P3OUT&=

43、BIT2#define IRQ P3IN&BIT3/讀取P3.3的值*/ /*模擬SPI方式*/ #define MOSI_HIGH P3OUT|=BIT4 #define MOSI_LOW P3OUT&=BIT4 #define MISO P3IN&BIT5 #define SCK_HIGH P3OUT|=BIT0 #define SCK_LOW P3OUT&=BIT0/24L01寄存器地址#define CONFIG 0X00/配置寄存器地址#define EN_AA 0X01/自動應答寄存器地址#define EN_RXADDR 0X02/接收地址使能#define SETUP_AW 0

44、X03/設置地址寬度#define SETUP_RETR 0X04/建立自動重發(fā)#define RF_CH 0X05/射頻通道#define RF_SETUP 0X06/射頻寄存器#define STATUS 0X07/狀態(tài)寄存器#define OBSERVE_TX 0X08/發(fā)送檢測寄存器#define CD 0X09/載波檢測#define RX_ADDR_P0 0X0A/數據通道0接收地址#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/發(fā)送地址寄存器地址#define RX_PW_P0 0X11/接收地址通道0有效數據寬度#define RX_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論