找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8839|回復(fù): 8
收起左側(cè)

眾拳基于STM8的NRF24L01 2.4G無(wú)線模塊實(shí)驗(yàn)詳解 含程序

  [復(fù)制鏈接]
ID:170279 發(fā)表于 2017-11-28 13:18 | 顯示全部樓層 |閱讀模式
TB2XD2NqVXXXXbQXpXXXXXXXXXX_!!85243700.jpg
NRF24L01 簡(jiǎn)介
NRF24L01是NORDIC公司生產(chǎn)的一款無(wú)線通信通信芯片,采用FSK 調(diào)制,集成NORDIC自家的Enhanced Short Burst協(xié)議。可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)或是1對(duì)6的無(wú)線通信。無(wú)線通信速度最高可達(dá)到2Mbps。
芯片特點(diǎn):
2.4G全球開(kāi)放的ISM頻段,免許可證使用。
最高工作速率2Mbps,高校的GFSK調(diào)制,抗干擾能力強(qiáng)。
126個(gè)可選的頻道,滿(mǎn)足多點(diǎn)通信和調(diào)頻通信的需要。
內(nèi)置CRC檢錯(cuò)和點(diǎn)對(duì)多點(diǎn)的通信地址控制。
可設(shè)置自動(dòng)應(yīng)答,確保數(shù)據(jù)可靠傳輸。
采用SPI通信,可以很方便的連接到MCU上面。
NRF24L01 模塊簡(jiǎn)介

1.png

CSN:SPI片選線
SCK:SPI時(shí)鐘線
MOSI:SPI數(shù)據(jù)線(主機(jī)輸出,從機(jī)輸入)
MISO:SPI數(shù)據(jù)線(主機(jī)輸入,從機(jī)輸出)


CE:模式控制線,在CSN為低的情況下,CE協(xié)同CONFIG寄存器共同決定NRF24L01 的狀態(tài)(參照NRF24L01 的狀態(tài)機(jī))


IRQ:中斷信號(hào)線,中斷時(shí)變?yōu)榈碗娖,在以下三種情況變低:Tx FIFO 發(fā)完并且收到ACK(使能ACK情況下)、Rx FIFO 收到數(shù)據(jù)、達(dá)到最

大重發(fā)次數(shù)。


NRF24L01 SPI通訊時(shí)序圖

2.png

空閑狀態(tài)SCK為0,CPOL=0;數(shù)據(jù)在時(shí)鐘第一個(gè)時(shí)間邊沿采集,CPHA=0;
Cn:SPI命令位
Sn:STATUS寄存器位        
Dn:數(shù)據(jù)位( MSB,多字節(jié)傳輸時(shí),低字節(jié)在前)
NRF24L01 工作模式介紹
3.png

其中,收發(fā)模式又有: Enhanced ShockBurst收發(fā)模式和ShockBurst收發(fā)模式,只有Enhanced ShockBurst收發(fā)模式支持自動(dòng)ACK和自動(dòng)重發(fā)。開(kāi)啟自動(dòng)ACK,則默認(rèn)選擇Enhanced模式
Enhanced ShockBurst 模式介紹
Enhanced ShockBurst收發(fā)模式,使用片內(nèi)的先入先出堆棧區(qū),數(shù)據(jù)可以低速?gòu)奈⒖刂破魉腿,高?1Mbps/2Mbps)從芯片發(fā)射,這樣可以盡量節(jié)能。與射頻協(xié)議相關(guān)的所有高速信號(hào)處理都在片內(nèi)進(jìn)行,這種做法有3大好處:
1,節(jié)能;
2,低的系統(tǒng)費(fèi)用(低速微處理器也能進(jìn)行高速射頻發(fā)射);
3,數(shù)據(jù)在空中停留時(shí)間短,抗干擾性高;
    在Enhanced ShockBurst收發(fā)模式下,NRF24L01自動(dòng)處理字頭和CRC校驗(yàn)碼。在接收數(shù)據(jù)時(shí),自動(dòng)把字頭和CRC校驗(yàn)碼移去。在發(fā)送數(shù)據(jù)時(shí),自動(dòng)加上字頭和CRC校驗(yàn)碼,在發(fā)送模式下,置CE為高,至少10us,將使能發(fā)送過(guò)程。
Enhanced ShockBurst模式:發(fā)送方要求終端設(shè)備在接收到數(shù)據(jù)后有應(yīng)答信號(hào),以便發(fā)送方檢測(cè)有無(wú)數(shù)據(jù)丟失,一旦丟失則重發(fā)數(shù)據(jù)。重發(fā)數(shù)據(jù)設(shè)置在地址為 0X04 的數(shù)據(jù)重發(fā)設(shè)置寄存器 用于設(shè)置其重發(fā)次數(shù)及設(shè)置在未收到應(yīng)答信號(hào)后等待重發(fā)的時(shí)間。
    在接收模式下,最多可以接收6路不通的數(shù)據(jù)。每一個(gè)數(shù)據(jù)通道使用不同的地址,但是共用相同的頻道。也就是說(shuō)6 個(gè)不同的NRF24L01 設(shè)置為發(fā)送模式后可以與同一個(gè)設(shè)置為接收模式的NRF24L01 進(jìn)行通訊,而設(shè)置為接收模式的NRF24L01可以對(duì)這6 個(gè)發(fā)射端進(jìn)行識(shí)別。數(shù)據(jù)通道0 是唯一的一個(gè)可以配置為40 位自身地址的數(shù)據(jù)通道。1~5 數(shù)據(jù)通道都為8 位自身地址和32 位公用地址(由通道1設(shè)置)。所有的數(shù)據(jù)通道都可以設(shè)置為Enhanced ShockBurst 模式。

4.png

在接收端,確認(rèn)收到數(shù)據(jù)后記錄地址,并以此地址為目標(biāo)地址發(fā)送應(yīng)答信號(hào)。

在發(fā)送端,通道0被用作接收應(yīng)答信號(hào),因此通道0的接收地址要與發(fā)送地址端地址相等,以確保接收到正確的應(yīng)答信號(hào)。


Enhanced ShockBurst 發(fā)送模式

初始化過(guò)程:
1)寫(xiě)Tx 節(jié)點(diǎn)的地址 TX_ADDR
2)寫(xiě)Rx 節(jié)點(diǎn)的地址(主要是為了使能Auto Ack) RX_ADDR_P0
3)使能AUTO ACK EN_AA
4)使能PIPE 0 EN_RXADDR
5)配置自動(dòng)重發(fā)次數(shù) SETUP_RETR
6)選擇通信頻率 RF_CH  頻率計(jì)算公式:2400+RF_CH  (Mhz)
7)配置發(fā)射參數(shù)(低噪放大器增益、發(fā)射功率、無(wú)線速率) RF_SETUP
8)配置24L01 的基本參數(shù)以及切換工作模式 CONFIG。


發(fā)送流程:
1. 把地址和要發(fā)送的數(shù)據(jù)按時(shí)序送入NRF24L01;
2. 配置CONFIG寄存器,使之進(jìn)入發(fā)送模式;
3. 微控制器把CE置高(至少10us),激發(fā)Enhanced ShockBurstTM發(fā)射;
4. Enhanced ShockBurstTM發(fā)射:
①給射頻前端供電;
②射頻數(shù)據(jù)打包(加字頭、CRC校驗(yàn)碼);
③ 高速發(fā)射數(shù)據(jù)包;
④發(fā)射完成,NRF24L01進(jìn)入空閑狀態(tài)。


Enhanced ShockBurst 接收模式
初始化過(guò)程:
1)寫(xiě)Rx 節(jié)點(diǎn)的地址 RX_ADDR_P0
2)使能AUTO ACK EN_AA
3)使能PIPE 0 EN_RXADDR
4)選擇通信頻率 RF_CH
5)選擇通道0 有效數(shù)據(jù)寬度 RX_PW_P0
6)配置發(fā)射參數(shù)(低噪放大器增益、發(fā)射功率、無(wú)線速率) RF_SETUP
7)配置24L01 的基本參數(shù)以及切換工作模式 CONFIG。

接收流程:
1. 配置接收地址和要接收的數(shù)據(jù)包大。
2. 配置CONFIG寄存器,使之進(jìn)入接收模式,把CE置高。
3. 130us后,NRF24L01進(jìn)入監(jiān)視狀態(tài),等待數(shù)據(jù)包的到來(lái);
4. 當(dāng)接收到正確的數(shù)據(jù)包(正確的地址和CRC校驗(yàn)碼),NRF2401自動(dòng)把字頭、地址和CRC校驗(yàn)位移去;
5. NRF24L01通過(guò)把STATUS寄存器的RX_DR置位(STATUS一般引起微控制器中斷)通知微控制器;
6. 微控制器把數(shù)據(jù)從FIFO讀出(0X61指令);
7. 所有數(shù)據(jù)讀取完畢后,可以清除STATUS寄存器。NRF2401可以進(jìn)入四種主要的模式之一;


NRF24L01-SPI指令
5.png

寄存器介紹
6.png

7.png

8.png

9.png

10.png

11.png

12.png

13.png

14.png

15.png

單片機(jī)源程序如下:
  1. /***********************************************************************
  2. *   作    者: 劉洋 張殿東
  3. *   版    本: V1.0
  4. *   日    期: 2016-05-03   
  5. *
  6. *   IAR開(kāi)發(fā)環(huán)境    版本 V2.20.1
  7. *   ST庫(kù)函數(shù)       版本 V2.2.0
  8. ***********************************************************************/

  9. #include "pbdata.h"//引入自定義公共頭文件

  10. void BSP_Configuration(void);//硬件初始化函數(shù)聲明

  11. /***********************************************************************
  12. *   函 數(shù) 名: main
  13. *   功能說(shuō)明: c程序入口
  14. *   形    參:無(wú)
  15. *   返 回 值: 錯(cuò)誤代碼(無(wú)需處理)
  16. ***********************************************************************/
  17. int main(void)
  18. {
  19.   BSP_Configuration();//硬件驅(qū)動(dòng)初始化函數(shù)
  20.   
  21.   NRF24L01_Demo3();  
  22. }
  23. /***********************************************************************
  24. *   函 數(shù) 名: BSP_Configuration
  25. *   功能說(shuō)明: 初始化硬件設(shè)備。只需要調(diào)用一次。該函數(shù)配置CPU寄存器和外設(shè)的寄存器并初始化一些全局變量。
  26. *   形    參:無(wú)
  27. *   返 回 值: 無(wú)
  28. ***********************************************************************/
  29. void BSP_Configuration(void)
  30. {  
  31.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//時(shí)鐘速度為內(nèi)部16M,1分頻,
  32.   UART1_Congfiguration();//調(diào)用RS232串口1初始化函數(shù)
  33.   LED_Init();//調(diào)用LED初始化函數(shù)
  34.   SPI_Configation();
  35.   NRF24L01_Init();
  36.   rim();//打開(kāi)總中斷
  37. }

  38. /*斷言函數(shù):它的作用是在編程的過(guò)程中為程序提供參數(shù)檢查*/
  39. #ifdef USE_FULL_ASSERT
  40. ……………………

  41. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

【眾拳】劍齒虎開(kāi)發(fā)板2.4G無(wú)線實(shí)驗(yàn)程序下載:
眾拳劍齒虎NRF24L01 2.4G無(wú)線模塊實(shí)驗(yàn)程序.zip (1.82 MB, 下載次數(shù): 198)

實(shí)驗(yàn)資料下載:
NRF24L01 2.4G無(wú)線模塊實(shí)驗(yàn)資料.zip (3.9 KB, 下載次數(shù): 156)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:134294 發(fā)表于 2017-11-30 17:29 | 顯示全部樓層
感謝!正在學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

ID:218002 發(fā)表于 2018-8-27 13:52 | 顯示全部樓層

感謝,學(xué)習(xí)學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

ID:32574 發(fā)表于 2018-8-30 16:31 | 顯示全部樓層
謝謝老師分享,正在研究nrf24l01。
還想請(qǐng)教老師個(gè)問(wèn)題:如果想用電腦輸入并發(fā)送類(lèi)似001#-zt,則001#終端返回應(yīng)答信號(hào)zt,并在終端指示燈閃爍提示需要怎么入手。

謝謝!

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:418504 發(fā)表于 2018-10-31 14:19 | 顯示全部樓層
謝謝老師分享,現(xiàn)在要用到這個(gè)模塊奈何真心不知怎么下手 超贊
回復(fù)

使用道具 舉報(bào)

ID:418504 發(fā)表于 2018-10-31 14:20 | 顯示全部樓層
真心很好 太棒了
回復(fù)

使用道具 舉報(bào)

ID:183532 發(fā)表于 2019-7-30 09:30 | 顯示全部樓層
及時(shí)雨
回復(fù)

使用道具 舉報(bào)

ID:969296 發(fā)表于 2022-4-28 17:02 | 顯示全部樓層
while (SPI_RF_IRQ!=0);//等待發(fā)送完成
回復(fù)

使用道具 舉報(bào)

ID:969296 發(fā)表于 2022-4-28 17:03 | 顯示全部樓層
這里卡住了,怎么回事,樓主及大神請(qǐng)不吝賜教!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表