91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51驅(qū)動NRF24L01通信,NRF24L01與TTL轉(zhuǎn)NRF24L01模塊通信

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2026-03-17 14:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NRF24L01

1-主圖.png

一、簡介

NRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部
集成 NORDIC 自己的 Enhanced Short Burst 協(xié)議。可以實現(xiàn)點對點或是 1 對 6 的無線通信。無線通信速度可以達到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預(yù)留 5 個 GPIO,1 個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為 MCU 系統(tǒng)構(gòu)建無線通信功能。

二、引腳功能描述

在這里插入圖片描述
VCC 腳接電壓范圍為2.0V~3.6V 之間,不能在這個區(qū)間之外,超過 3.6V 將會燒毀模塊。推薦電壓 3.3V 左右。除電源 VCC 和接地端,其余腳都可以直接和普通的 5V 單片機 IO口直接相連,無需電平轉(zhuǎn)換。當(dāng)然對3V左右的單片機更加適用了。

程序設(shè)計

一、對 24L01 的程序編程的基本思路如下:

1) 置 CSN 為低,使能芯片,配置芯片各個參數(shù)。(過程見 3.Tx 與 Rx 的配置過程)
配置參數(shù)在 Power Down 狀態(tài)中完成。
2) 如果是 Tx 模式,填充 Tx FIFO。
3) 配置完成以后,通過 CE 與 CONFIG 中的 PWR_UP 與 PRIM_RX 參數(shù)確定 24L01
要切換到的狀態(tài)。
Tx Mode:PWR_UP=1; PRIM_RX=0; CE=1 (保持超過 10us 就可以);
Rx Mode: PWR_UP=1; PRIM_RX=1; CE=1;
4) IRQ 引腳會在以下三種情況變低:
Tx FIFO 發(fā)完并且收到 ACK(使能 ACK 情況下)
Rx FIFO 收到數(shù)據(jù)
達到最大重發(fā)次數(shù)
將 IRQ 接到外部中斷輸入引腳,通過中斷程序進行處理。

二、Tx 與 Rx 的配置過程

1、Tx 模式初始化過程:

1)寫 Tx 節(jié)點的地址 TX_ADDR
2)寫 Rx 節(jié)點的地址(主要是為了使能 Auto Ack) RX_ADDR_P0
3)使能 AUTO ACK EN_AA
4)使能 PIPE 0 EN_RXADDR
5)配置自動重發(fā)次數(shù) SETUP_RETR
6)選擇通信頻率 RF_CH
7)配置發(fā)射參數(shù)(低噪放大器增益、發(fā)射功率、無線速率) RF_SETUP
8 ) 選擇通道 0 有效數(shù)據(jù)寬度 Rx_Pw_P0
9)配置 24L01 的基本參數(shù)以及切換工作模式 CONFIG。

2、Rx 模式初始化過程:

1)寫 Rx 節(jié)點的地址 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ā)射功率、無線速率) RF_SETUP
7)配置 24L01 的基本參數(shù)以及切換工作模式 CONFIG。

三、基本程序函數(shù)

下面主要介紹幾個重要程序函數(shù),其它的程序函數(shù)需要的可以留言獲取
1、nRF24L01+接收模式初始化

void nRF24L01P_RX_Mode(void)
{
	CE = 0;
	nRF24L01P_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 接收設(shè)備接收通道0使用和發(fā)送設(shè)備相同的發(fā)送地址
	nRF24L01P_Write_Reg(WRITE_REG + EN_AA, 0x01);               			// 使能接收通道0自動應(yīng)答
	nRF24L01P_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);           	    	// 使能接收通道0
	nRF24L01P_Write_Reg(WRITE_REG + RF_CH, 40);                 			// 選擇射頻通道0x40
	nRF24L01P_Write_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);  		    // 接收通道0選擇和發(fā)送通道相同有效數(shù)據(jù)寬度
	nRF24L01P_Write_Reg(WRITE_REG + RF_SETUP, 0x0f);            			// 數(shù)據(jù)傳輸率2Mbps,發(fā)射功率0dBm,低噪聲放大器增益(nRF24L01+忽略該位)
	nRF24L01P_Write_Reg(WRITE_REG + CONFIG, 0x0f);              			// CRC使能,16位CRC校驗,上電,接收模式
	nRF24L01P_Write_Reg(WRITE_REG + STATUS, 0xff);  						//清除所有的中斷標(biāo)志位
	CE = 1;                                            						// 拉高CE啟動接收設(shè)備
}

2、nRF24L01+發(fā)送模式初始化

void nRF24L01P_TX_Mode(void)
{
	CE = 0;
	nRF24L01P_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);     // 寫入發(fā)送地址
	nRF24L01P_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 為了應(yīng)答接收設(shè)備,接收通道0地址和發(fā)送地址相同

	nRF24L01P_Write_Reg(WRITE_REG + EN_AA, 0x01);       					// 使能接收通道0自動應(yīng)答
	nRF24L01P_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);   					// 使能接收通道0
	nRF24L01P_Write_Reg(WRITE_REG + SETUP_RETR, 0x0a);  					// 自動重發(fā)延時等待250us+86us,自動重發(fā)10次
	nRF24L01P_Write_Reg(WRITE_REG + RF_CH, 40);         					// 選擇射頻通道0x40
	nRF24L01P_Write_Reg(WRITE_REG + RF_SETUP, 0x0f);    					// 數(shù)據(jù)傳輸率2Mbps,發(fā)射功率0dBm,低噪聲放大器增益(nRF24L01+忽略該位)
	nRF24L01P_Write_Reg(WRITE_REG + CONFIG, 0x0e);     					    // CRC使能,16位CRC校驗,上電
	//CE = 1;
}

3、

/********************************************************
函數(shù)功能:讀取接收數(shù)據(jù)                       
入口參數(shù):rxbuf:接收數(shù)據(jù)存放首地址
返回  值:0:接收到數(shù)據(jù)
          1:沒有接收到數(shù)據(jù)
*********************************************************/
u8 nRF24L01P_RxPacket(u8 *rxbuf)
{
	u8 stat
	state = nRF24L01P_Read_Reg(STATUS);  			              //讀取狀態(tài)寄存器的值    	  
	nRF24L01P_Write_Reg(WRITE_REG+STATUS,state);                  //清除RX_DS中斷標(biāo)志

	if(state & RX_DR)								              //接收到數(shù)據(jù)
	{
		nRF24L01P_Read_Buf(RD_RX_PLOAD,rxbuf,TX_PLOAD_WIDTH);     //讀取數(shù)據(jù)
		nRF24L01P_Write_Reg(FLUSH_RX,0xff);					      //清除RX FIFO寄存器
		return 0; 
	}	   
	return 1;                                                     //沒收到任何數(shù)據(jù)
}

4、

/********************************************************
函數(shù)功能:發(fā)送一個數(shù)據(jù)包                      
入口參數(shù):txbuf:要發(fā)送的數(shù)據(jù)
返回  值:0x10:達到最大重發(fā)次數(shù),發(fā)送失敗 
          0x20:發(fā)送成功            
          0xff:發(fā)送失敗                  
*********************************************************/
u8 nRF24L01P_TxPacket(u8 *txbuf)
{
	u8 state;
	CE=0;													//CE拉低,使能24L01配置
  nRF24L01P_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);	//寫數(shù)據(jù)到TX FIFO,32個字節(jié)
 	CE=1;		    									    //CE置高,使能發(fā)送	   
	
	while(IRQ == 1);										//等待發(fā)送完成
	state=nRF24L01P_Read_Reg(STATUS);  						//讀取狀態(tài)寄存器的值	   
	nRF24L01P_Write_Reg(WRITE_REG+STATUS,state); 			//清除TX_DS或MAX_RT中斷標(biāo)志
	if(state&MAX_RT)			   						    //達到最大重發(fā)次數(shù)
	{
		nRF24L01P_Write_Reg(FLUSH_TX,0xff);					//清除TX FIFO寄存器 
		return MAX_RT; 
	}
	if(state&TX_DS)									        //發(fā)送完成
	{
		return TX_DS;
	}
	return 0XFF;	 									    //發(fā)送失敗
}

通信測試

1、兩個NRF24L01的目標(biāo)地址和接收地址需要設(shè)置成一樣的,
發(fā)送和接收程序下面這個函數(shù)里面的地址必須是一樣的

u8 code TX_ADDRESS[TX_ADR_WIDTH] = {0x11,0x22,0x33,0x44,0x55};  // 定義一個靜態(tài)發(fā)送地址

2、通信頻率需要設(shè)置成一樣的,RF_CH是選擇頻率寄存器,
頻率計算公式是2400+“RF_CH”,單位是MHZ;接收和發(fā)射函數(shù)里面設(shè)置的RF_CH值是40,所以實際通信頻率是2400+40=2.440GHZ
3、數(shù)據(jù)傳輸速率也需要設(shè)置成一樣的,

一、兩個51單片機控制NRF24L01互相通信

1、51單片機和NRF24L01接線

STC89C52RCNRF24L01
VCC3.3V
GNDGND
CSNP1_5
CEP1_4
MOSIP1_3
SCKP1_2
IRQP1_1
MISOP1_0

2、發(fā)送程序

u8 a = 0;

int main(void)
{
	UART_Init();
	nRF24L01P_Init();
	while(1)
	{
		u8 buf[32] = {0};
		buf[0] = 0xAA;
		nRF24L01P_TX_Mode();
		a = nRF24L01P_TxPacket(buf);
		Delay(200);
		UART_SendByte(a);
		buf[0] = 0;
	}
}

3、接收程序

int main(void)
{
	u8 buf[32] = {0};
	nRF24L01P_Init();
	UART_Init();
	nRF24L01P_RX_Mode();
	while(1)
	{
		buf[0] = 0;
		nRF24L01P_RxPacket(buf);
		UartSendStr(buf);
		Delay(200);
		buf[0] = 0;
	}
}

實驗現(xiàn)象
在這里插入圖片描述
下圖,右邊的20是發(fā)送成功標(biāo)志,左邊AA是發(fā)送的數(shù)據(jù)
在這里插入圖片描述

一、51單片機控制NRF24L01與NRF24L01轉(zhuǎn)TTL串口模塊通信

1、NRF24L01轉(zhuǎn)TTL串口模塊
在這里插入圖片描述
接收參數(shù)和發(fā)射參數(shù)需要設(shè)置成一樣的才能通訊
在這里插入圖片描述
2、發(fā)射程序

int a = 0;

int main(void)
{
	UART_Init();
	nRF24L01P_Init();	
	while(1)
	{
		u8 buf[32] = {" NRF24L01 Testrn"};
		nRF24L01P_TX_Mode();
		a = nRF24L01P_TxPacket(buf);
		UART_SendByte(a);
		Delay(200);
	}
}

3、現(xiàn)象
在這里插入圖片描述

總結(jié)

NRF24L01模塊不支持熱插拔,熱插拔會損壞模塊;代碼調(diào)試的過程還有些小BUG,希望得到大佬指點,需要工程的在下方留言

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • TTL
    TTL
    +關(guān)注

    關(guān)注

    7

    文章

    557

    瀏覽量

    74773
  • nRF24L01
    +關(guān)注

    關(guān)注

    17

    文章

    332

    瀏覽量

    75265
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于nRF24L01的通用無線通信模塊設(shè)計

    基于nRF24L01的通用無線通信模塊設(shè)計
    發(fā)表于 01-04 15:25 ?64次下載

    NRF24L01編程心得

    51NRF24L01雙向通信詳細資料及程序,調(diào)試成功
    發(fā)表于 03-22 11:26 ?0次下載

    nRF24L01模塊引腳

    nRF24L01模塊引腳,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-14 18:31 ?0次下載

    NRF24L01程序

    NRF24L01 51,stm32,430程序
    發(fā)表于 12-29 20:56 ?25次下載

    nrf24l01無線模塊傳輸距離分析

    本文對nrf24l01無線模塊傳輸距離進行了分析總結(jié),nRF24L01是一款新型單片射頻收發(fā)器件。介紹了三種不同模式的nrf24l01無線模塊
    發(fā)表于 12-15 13:47 ?3.7w次閱讀

    nRF24L01無線模塊使用教程之經(jīng)典使用程序詳細資料合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是nRF24L01無線模塊使用教程之經(jīng)典使用程序詳細資料合集免費下載。內(nèi)容包括了:NRF24L01參考程序(包含多個實例),nRF24L01無線
    發(fā)表于 10-19 09:29 ?154次下載

    nRF24L01無線2.4G通信模塊的詳細研究資料說明

     承接上文,本節(jié)將從零開始帶你認(rèn)識無線2.4G模塊,了解其控制和通信指令,從而封裝一個nRF24L01底層的驅(qū)動函數(shù),并最終寫一個3-3通信
    發(fā)表于 05-29 17:57 ?23次下載
    <b class='flag-5'>nRF24L01</b>無線2.4G<b class='flag-5'>通信</b><b class='flag-5'>模塊</b>的詳細研究資料說明

    NRF24L01模塊資料和C語言程序和使用與開發(fā)攻略合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是NRF24L01模塊資料和C語言程序和使用與開發(fā)攻略合集免費下載包括了:NRF24L01的從機和主機程序,NRF24L01
    發(fā)表于 10-10 08:00 ?45次下載
    <b class='flag-5'>NRF24L01</b>的<b class='flag-5'>模塊</b>資料和C語言程序和使用與開發(fā)攻略合集免費下載

    nrf24l01是什么模塊_nrf24l01工作原理

    本文首先闡述了nrf24l01概念,其次介紹了nrf24l01的性能參數(shù),最后介紹了nrf24l01的工作原理。
    發(fā)表于 04-24 08:47 ?2.1w次閱讀

    nrf24l01發(fā)射功率測試_nrf24l01可以做什么

    本文主要闡述了nrf24l01發(fā)射功率測試步驟及nrf24l01的應(yīng)用領(lǐng)域。
    發(fā)表于 04-24 08:55 ?8257次閱讀

    基于NRF24L01的AVR雙機通信

    基于NRF24L01的AVR雙機通信
    發(fā)表于 11-15 21:06 ?5次下載
    基于<b class='flag-5'>NRF24L01</b>的AVR雙機<b class='flag-5'>通信</b>

    nRF24L01無線模塊筆記

    nRF24L01無線模塊筆記
    發(fā)表于 11-20 12:21 ?54次下載
    <b class='flag-5'>nRF24L01</b>無線<b class='flag-5'>模塊</b>筆記

    nRF24L01無線通信模塊使用簡介

    nRF24L01無線通信模塊使用簡介(STC51nRF24L01研一課設(shè)做過一個基于nRF24L01
    發(fā)表于 11-23 17:51 ?49次下載
    <b class='flag-5'>nRF24L01</b>無線<b class='flag-5'>通信</b><b class='flag-5'>模塊</b>使用簡介

    使用nRF24L01模塊進行無線射頻通信

    使用nRF24L01模塊進行無線射頻通信
    的頭像 發(fā)表于 08-01 11:18 ?6308次閱讀
    使用<b class='flag-5'>nRF24L01</b><b class='flag-5'>模塊</b>進行無線射頻<b class='flag-5'>通信</b>

    基于nRF24L01的通用無線通信模塊設(shè)計案例

    電子發(fā)燒友網(wǎng)站提供《基于nRF24L01的通用無線通信模塊設(shè)計案例.pdf》資料免費下載
    發(fā)表于 11-06 16:28 ?9次下載
    基于<b class='flag-5'>nRF24L01</b>的通用無線<b class='flag-5'>通信</b><b class='flag-5'>模塊</b>設(shè)計案例