RF24L01+,是工作在2.4~2.5GHz 頻段的,具備自動重發功能,6 個數據傳輸通道,最大無線傳輸速率為2Mbits。MCU 可與該芯片通過SPI 接口訪問芯片的寄存器進行配置,達到控制模塊、通過該模塊實現無線通訊的目的。
優點:不需要建立連接就可以進行收發
PCB管腳
其中各個接口作用如下
在應用中我們需要一對收發,也就是一個主機和一個從機。主機和從機的驅動部分是一樣的(配置文件SPI_NRF.c 文件相同),區別是main函數中調用的模式不同,主機一般是發送模式NRF_TX_Mode();,而從機采用的是接收模式 NRF_RX_Mode();
應用的基本流程
注意事項:
(1)首先要檢查接線,一般配置的是SPI1,然后要對應程序里面的配置來接線
SPI1
SCK = PA5 MISO = PA6 MOSI = PA7
CE = PA4 CSN =PC4 IRQ = PC5
后兩個是作為普通IO口,任意管腳均可
從機部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_RX_Mode(); // 設置為接收模式
(3)while循環里等待接收,判斷接收狀態,并進行接收
#include “stm32f10x.h”#include “bsp_usart1.h”#include “bsp_spi_nrf.h”u8 status; //用于判斷接收/發送狀態u8 rxbuf[4]; //接收緩沖u8 i;
int main(void)
{
/* 串口1初始化 */
USART1_Config();
/*SPI接口初始化*/
SPI_NRF_Init();
printf(“\r\n 這是一個 NRF24L01 無線傳輸實驗 \r\n”);
printf(“\r\n 這是無線傳輸 從機端 的反饋信息\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(); // 設置為接收模式
printf(“\r\n 從機端 進入接收模式\r\n”); while(1)
{
/*等待接收數據*/
status = NRF_Rx_Dat(rxbuf); /*判斷接收狀態*/
switch(status)
{ case RX_DR: for(i=0;i《4;i++)
{
printf(“\r\n 從機端 接收到 主機端 發送的數據為:%d \r\n”,rxbuf[i]);
}break;
case ERROR:
printf(“\r\n 從機端 接收出錯。 \r\n”);break;
}
}
}
主機部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_TX_Mode(); // 設置為發送模式
(3)發送數據,查看發送狀態,否則重發。比如用按鍵中斷來進行一次發送
注:一般都會顯示超時,但是實際接收端有接收到。
初始化和配置與從機相同,除了TX模式
發送部分的代碼:
void EXTI0_IRQHandler(void)
{ int i=0; if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 確保是否產生了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 主機端 沒接收到應答信號,發送次數超過限定值,發送失敗。 \r\n”); break; case ERROR:
printf(“\r\n 未知原因導致發送失敗。 \r\n”); break; case TX_DS:
printf(“\r\n 主機端 接收到 從機端 的應答信號,發送成功! \r\n”);
break;
}
-
mcu
+關注
關注
146文章
17141瀏覽量
351095 -
pcb
+關注
關注
4319文章
23094瀏覽量
397708 -
寄存器
+關注
關注
31文章
5342瀏覽量
120297 -
無線通訊
+關注
關注
5文章
581瀏覽量
40072
發布評論請先 登錄
相關推薦
評論