RF24L01+,是工作在2.4~2.5GHz 頻段的,具備自動重發(fā)功能,6 個(gè)數(shù)據(jù)傳輸通道,最大無線傳輸速率為2Mbits。MCU 可與該芯片通過SPI 接口訪問芯片的寄存器進(jìn)行配置,達(dá)到控制模塊、通過該模塊實(shí)現(xiàn)無線通訊的目的。
具體細(xì)節(jié)參考《《野火STM32--2.4G無線傳輸》》
優(yōu)點(diǎn):不需要建立連接就可以進(jìn)行收發(fā)
PCB管腳
其中各個(gè)接口作用如下
在應(yīng)用中我們需要一對收發(fā),也就是一個(gè)主機(jī)和一個(gè)從機(jī)。主機(jī)和從機(jī)的驅(qū)動部分是一樣的(配置文件SPI_NRF.c 文件相同),區(qū)別是main函數(shù)中調(diào)用的模式不同,主機(jī)一般是發(fā)送模式NRF_TX_Mode();,而從機(jī)采用的是接收模式 NRF_RX_Mode();
應(yīng)用的基本流程
注意事項(xiàng):
(1)首先要檢查接線,一般配置的是SPI1,然后要對應(yīng)程序里面的配置來接線
SPI1
SCK = PA5 MISO = PA6 MOSI = PA7
CE = PA4 CSN =PC4 IRQ = PC5
后兩個(gè)是作為普通IO口,任意管腳均可
從機(jī)部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_RX_Mode(); // 設(shè)置為接收模式
(3)while循環(huán)里等待接收,判斷接收狀態(tài),并進(jìn)行接收
#include “stm32f10x.h”#include “bsp_usart1.h”#include “bsp_spi_nrf.h”u8 status; //用于判斷接收/發(fā)送狀態(tài)u8 rxbuf[4]; //接收緩沖u8 i;
int main(void)
{
/* 串口1初始化 */
USART1_Config();
/*SPI接口初始化*/
SPI_NRF_Init();
printf(“\r\n 這是一個(gè) NRF24L01 無線傳輸實(shí)驗(yàn) \r\n”);
printf(“\r\n 這是無線傳輸 從機(jī)端 的反饋信息\r\n”);
printf(“\r\n 正在檢測NRF與MCU是否正常連接。。。\r\n”); /*檢測NRF模塊與MCU的連接*/
status = NRF_Check();
if(status == SUCCESS)
printf(“\r\n NRF與MCU連接成功\r\n”);
else
printf(“\r\n 正在檢測NRF與MCU是否正常連接。。。\r\n”);
NRF_RX_Mode(); // 設(shè)置為接收模式
printf(“\r\n 從機(jī)端 進(jìn)入接收模式\r\n”); while(1)
{
/*等待接收數(shù)據(jù)*/
status = NRF_Rx_Dat(rxbuf); /*判斷接收狀態(tài)*/
switch(status)
{ case RX_DR: for(i=0;i《4;i++)
{
printf(“\r\n 從機(jī)端 接收到 主機(jī)端 發(fā)送的數(shù)據(jù)為:%d \r\n”,rxbuf[i]);
}break;
case ERROR:
printf(“\r\n 從機(jī)端 接收出錯。 \r\n”);break;
}
}
}
主機(jī)部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_TX_Mode(); // 設(shè)置為發(fā)送模式
(3)發(fā)送數(shù)據(jù),查看發(fā)送狀態(tài),否則重發(fā)。比如用按鍵中斷來進(jìn)行一次發(fā)送
注:一般都會顯示超時(shí),但是實(shí)際接收端有接收到。
初始化和配置與從機(jī)相同,除了TX模式
發(fā)送部分的代碼:
void EXTI0_IRQHandler(void)
{ int i=0; if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 確保是否產(chǎn)生了EXTI Line中斷??! { for(i=0;i《4;i++)
txbuf[i]+=1;
printf(“\r\n exit \r\n”);
status = NRF_Tx_Dat(txbuf);
switch(status)
{ case MAX_RT:
printf(“\r\n 主機(jī)端 沒接收到應(yīng)答信號,發(fā)送次數(shù)超過限定值,發(fā)送失敗。 \r\n”); break; case ERROR:
printf(“\r\n 未知原因?qū)е掳l(fā)送失敗。 \r\n”); break; case TX_DS:
printf(“\r\n 主機(jī)端 接收到 從機(jī)端 的應(yīng)答信號,發(fā)送成功! \r\n”);
break;
}
-
mcu
+關(guān)注
關(guān)注
146文章
17202瀏覽量
351934 -
pcb
+關(guān)注
關(guān)注
4324文章
23136瀏覽量
398886 -
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120802 -
無線通訊
+關(guān)注
關(guān)注
5文章
586瀏覽量
40195
發(fā)布評論請先 登錄
相關(guān)推薦
評論