




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、NRF24L01多路通訊調試成功的關鍵(附基于串口助手的無線通訊工具源代碼)本文檔部分內容摘自網絡,由于按照網上教程調試總不成功,特此分享自己的失敗經驗(紅字加重)。一、收發端共同的設置 1、設置信道工作頻率(收發必須一致) 如:SPI_RW_Reg(WRITE_REG+RF_CH,40); 2、設置發射速率(2mbps或1mbps)和發射功率(收發必須一致); 如:SPI_RW_Reg(WRITE_REG+RF_SETUP,0x0f); /發射速率為2Mbps,發射功率 最大為0dB 二、接收端的設置(最關鍵) 1、 設置頻道0-5,自動ACK應答允許 如: SPI_RW_Reg(WRITE
2、_REG+EN_AA,0x3f); 2、 設置接收通道全部允許 如: SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x3f); 3、向發送地址寄存器寫入本地地址(5byte) 4、向各個頻道的接收地址寄存器寫入接收地址(調試成不成功的關鍵) 頻道0:5個字節的地址 頻道1:5個字節的地址(和頻道0的地址必須不同)頻道2:1個字節的地址(為該通道發射機地址的最后一個字節) 有一個配置為發射模式的24l01要通過該通道與接收機通信,發射機的本地地址為0x37,0xa1,0xb3,0xc9,0xda;則接收機頻道2的地址為(0x37) 頻道3:1個字節的地址(同上) 頻道4:1個字
3、節的地址(同上) 頻道5:1個字節的地址(同上) 5、向每個頻道(用那個寫那個,需要在上面配置允許通道接收和ack)接收數據長度寄存器寫入接收數據寬度(最快均為32) 頻道n:SPI_RW_Reg(WRITE_REG + RX_PW_Pn, RX_PLOAD_WIDTH); 如: 頻道5:SPI_RW_Reg(WRITE_REG + RX_PW_P5, RX_PLOAD_WIDTH); 6、配置為接收模式 如:SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);下面附上我的程序/*頭文件*/#ifndef _NRF24L01_H_#define _NRF24L01_H_sbit
4、 CE = P12;sbit CSN = P13;sbit IRQ = P14;sbit MOSI = P15;sbit MISO = P16;sbit SCK = P17;void NRF24L01_init();/初始化模塊uchar TX_packet(uchar *tx_buf);/返回值判斷是否成功uchar RX_packet(uchar *rx_buf);/返回值判斷是否成功void TX_MODE();/發送模式void RX_MODE();/接收模式/*/ SPI(nRF24L01) commands#define READ_REG 0x00 / Define read co
5、mmand to register#define WRITE_REG 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 FLUSH_TX 0xE1 / Define flush TX register command#define FLUSH_RX 0xE2 / Define flush RX register
6、 command#define REUSE_TX_PL 0xE3 / Define reuse TX payload register command#define NOP 0xFF / Define No Operation, might be used to read status register/*/ SPI(nRF24L01) registers(addresses)#define CONFIG 0x00 / Config register address#define EN_AA 0x01 / Enable Auto Acknowledgment register address#
7、define EN_RXADDR 0x02 / Enabled RX addresses 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#define RF_SETUP 0x06 / RF setup register address#define STATUS 0x07
8、/ Status register address#define OBSERVE_TX 0x08 / Observe TX register address#define CD 0x09 / Carrier Detect register address#define RX_ADDR_P0 0x0A / RX address pipe0 register address#define RX_ADDR_P1 0x0B / RX address pipe1 register address#define RX_ADDR_P2 0x0C / RX address pipe2 register add
9、ress#define RX_ADDR_P3 0x0D / RX address pipe3 register address#define RX_ADDR_P4 0x0E / RX address pipe4 register address#define RX_ADDR_P5 0x0F / RX address pipe5 register address#define TX_ADDR 0x10 / TX address register address#define RX_PW_P0 0x11 / RX payload width, pipe0 register address#defi
10、ne RX_PW_P1 0x12 / RX payload width, pipe1 register address#define RX_PW_P2 0x13 / RX payload width, pipe2 register address#define RX_PW_P3 0x14 / RX payload width, pipe3 register address#define RX_PW_P4 0x15 / RX payload width, pipe4 register address#define RX_PW_P5 0x16 / RX payload width, pipe5 r
11、egister address#define FIFO_STATUS 0x17 / FIFO Status Register register address/*/#endif/*程序*/#include#includedefine.h#includeDELAY.h#includeNRF24L01.huchar code TX_ADDRESS5 = 0,1,1,1,1;uchar code RX_ADDRESS_P05 = 0,1,1,1,1;uchar code RX_ADDRESS_P15 = 1,1,1,1,1;uchar code RX_ADDRESS_P21 = 2;uchar co
12、de RX_ADDRESS_P31 = 3;uchar code RX_ADDRESS_P41 = 4;uchar code RX_ADDRESS_P51 = 5;uchar code Data_width = 1;uchar code Data_rt = 15;uchar SPI_RW(uchar dat) /SPI讀寫指令uchar i;for(i=0;i8;i+)SCK = 0;MOSI = (dat&0x80);dat = 1;SCK = 1;dat |= MISO; SCK = 0;return dat;uchar NRF24L01_read_reg(uchar reg)/讀某個寄存
13、器的狀態uchar value;CSN=0; /拉低CSN,允許操作 SPI_RW(reg); /寫寄存器指令value = SPI_RW(0); /讀寄存器值CSN=1; /拉高CSN,禁止操作return value; /返回寄存器狀態uchar NRF24L01_write_reg(uchar reg,uchar value) /寫向某個寄存器寫指令,并讀出狀態uchar status;CSN=0;/拉低CSN,允許操作 status = SPI_RW(reg);/寫寄存器指令,并讀出寄存器狀態SPI_RW(value);/寫寄存器值CSN=1;/拉高CSN,禁止操作return sta
14、tus;/返回寄存器之前的值uchar NRF24L01_read_buf(uchar reg,uchar *pbuf,uchar n) uchar i,status; CSN=0;/拉低CSN,允許操作 status = SPI_RW(reg);/寫寄存器指令,并讀出寄存器狀態for(i=0;in;i+)pbufi = SPI_RW(0);/從寄存器讀出一字節數據CSN = 1;/拉高CSN,禁止操作return status;uchar NRF24L01_write_buf(uchar reg,uchar *pbuf,uchar n) uchar i,status; CSN=0;/拉低CS
15、N,允許操作 status = SPI_RW(reg);/寫寄存器指令,并讀出寄存器狀態for(i=0;in;i+)SPI_RW(pbufi);/寫一字節數據到寄存器CSN = 1;/拉高CSN,禁止操作return status; void NRF24L01_init()CE = 0; /射頻電路工作使能,高電平工作,低電平停止CSN = 1; /SPI操作高電平允許,低電平禁止SCK = 0; /時鐘拉低,禁止讀寫寄存器IRQ = 1; /中斷復位,等待產生中斷信號NRF24L01_write_reg(WRITE_REG + EN_AA, 0x3f); /所有接受通道允許自動應答NRF24
16、L01_write_reg(WRITE_REG + EN_RXADDR, 0x3f); /接收通道全部打開NRF24L01_write_reg(WRITE_REG + SETUP_AW, 0x03); /設置接收/發射地址寬度為5字節NRF24L01_write_reg(WRITE_REG + SETUP_RETR, Data_rt);/自動發送間隔250+86us,次數15NRF24L01_write_reg(WRITE_REG + RF_CH, 0x00); /設置信道工作為2.4Ghz,收發必須一致NRF24L01_write_reg(WRITE_REG + RX_PW_P0, Data
17、_width);/設置通道0數據字節數NRF24L01_write_reg(WRITE_REG + RX_PW_P1, Data_width);/設置通道1數據字節數NRF24L01_write_reg(WRITE_REG + RX_PW_P2, Data_width);/設置通道2數據字節數NRF24L01_write_reg(WRITE_REG + RX_PW_P3, Data_width);/設置通道3數據字節數NRF24L01_write_reg(WRITE_REG + RX_PW_P4, Data_width);/設置通道4數據字節數NRF24L01_write_reg(WRITE_
18、REG + RX_PW_P5, Data_width);/設置通道5數據字節數NRF24L01_write_reg(WRITE_REG + RF_SETUP, 0x0f); /發送速率為1Mhz,發送功率最大值0dbNRF24L01_write_buf(WRITE_REG + TX_ADDR,TX_ADDRESS,5);/寫本機地地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P0,RX_ADDRESS_P0,5);/寫數據通道0接收機地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P1,RX_ADDRESS_P1,5);/寫
19、數據通道1接收機地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P2,RX_ADDRESS_P2,1); /寫數據通道2接收機地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P3,RX_ADDRESS_P3,1); /寫數據通道3接收機地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P4,RX_ADDRESS_P4,1); /寫數據通道4接收機地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P5,RX_ADDRESS_P5,1); /寫數據通道5接收機地址 void RX_MODE()NRF24L01_write_reg(WRITE_REG + CONFIG, 0x0f);/IRQ收發完成中斷響應,16位CRC,接收模式 CE = 1;void TX_MODE()NRF24L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 宮腔鏡監測管理制度
- 家族群祖墳管理制度
- 應急及安全管理制度
- 錄用與離職管理制度
- 影樓里員工管理制度
- 微課志愿者管理制度
- 心理科浴室管理制度
- 快遞員倉庫管理制度
- 懷柔區禁釣管理制度
- 總工辦日常管理制度
- 【8物(滬科版)】合肥市第四十五中學2023-2024學年八年級下學期期末物理試題
- 國家開放大學(浙江)地域文化(本)作業1-5
- 福建省龍巖市名校中考數學模擬預測題及答案解析
- 會所會員管理制度
- 生計船管理方案
- 湖南省長沙市芙蓉區2022-2023學年一年級下學期期末測試數學試卷
- GB/T 43650-2024野生動物及其制品DNA物種鑒定技術規程
- GB/T 748-2023抗硫酸鹽硅酸鹽水泥
- 改革開放與新時代智慧樹知到期末考試答案2024年
- CorelDRAW實例教程(CorelDRAW 2020)全套教學課件
- 心肌梗死護理教學查房
評論
0/150
提交評論