|
STM32中2.4G無線通信例程
按照如下方式在電路板上安排的管腳
8 7
6 5
4 3
2 1
各管腳如下定義:
8.IRQ 7.MISO
6.MOSI 5.SCK
4.CSN 3.CE
2.VCC 1.GND
具體說明:
3.CE 芯片的模式控制線。在 CSN 為低的情況下,CE 協(xié)同NRF24L01 的CONFIG 寄存器共同決定NRF24L01 的狀態(tài)(參照NRF24L01 的狀態(tài)機(jī))。
4.CSN 為芯片的片選線 CSN 為低電平芯片工作
5.SCK 為芯片控制的時鐘線(SPI時鐘)
6.MOSI 為芯片控制數(shù)據(jù)線(Master output slave input) 主輸出 從輸入
7.MISO 芯片控制數(shù)據(jù)線 (Master input slave output) master 碩士 主人 船長 slave 從屬奴隸 主輸入 從輸出
8.IRQ 中斷信號引腳。中斷時變?yōu)榈碗娖剑碞RF24L01內(nèi)部發(fā)生中斷時IRQ 引腳從高電平變?yōu)榈碗娖。引腳會在以下三種情況變低:Tx FIFO 發(fā)完并且收到ACK(使能ACK情況下)、Rx FIFO 收到數(shù)據(jù)、達(dá)到最大重發(fā)次數(shù)。
中斷:
nRF24L01 的中斷引腳(IRQ)為低電平觸發(fā),當(dāng)狀態(tài)寄存器中TX_DS(數(shù)據(jù)發(fā)送完成中斷位)、RX_DR(接收數(shù)據(jù)中斷位) 或MAX_RT(達(dá)到最多次重發(fā)中斷位)為高時觸發(fā)中斷。當(dāng)MCU 給中斷源寫‘1’時,中斷引腳被禁止。可屏蔽中斷可以被IRQ 中斷屏蔽。通過設(shè)置可屏蔽中斷位為高,則中斷響應(yīng)被禁止。默認(rèn)狀態(tài)下所有的中斷源是被禁止的。
在寫寄存器之前一定要進(jìn)入待機(jī)模式或掉電模式
單片機(jī)源程序如下:
- /* 下載程序后,首先要按下按鍵K_UP或者K_DOWN,按鍵K_UP是接收,K_DOWN是發(fā)送,兩塊開發(fā)板
- 只能一個作為發(fā)送一個作為接收,否則兩個都為接收或者發(fā)送將進(jìn)入死循環(huán)。接收的時候
- 指示燈閃爍 24L01的最大SPI時鐘為10Mhz因此在設(shè)定SPI時鐘的時候要低于10M*/
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "button.h"
- #include "lcd_driver.h"
- #include "gui.h"
- #include "nrf24l01.h"
- void lcd_display() //LCD初始化顯示
- {
- TFT_ClearScreen(BLACK);
- GUI_Show12ASCII(10,10,"PRECHIN",GREEN,BLACK);
- GUI_Show12ASCII(10,30,"123456",GREEN,BLACK);
- GUI_Show12ASCII(10,50,"NRF24L01 Test!",GREEN,BLACK);
- GUI_Show12ASCII(10,70,"2015-11-13",GREEN,BLACK);
- GUI_Show12ASCII(10,90,"K_UP:RX_Mode K_DOWN:TX_Mode",GREEN,BLACK);
-
- }
- void data_pros() //數(shù)據(jù)處理函數(shù)
- {
- u8 key;
- static u8 mode=2; //模式選擇
- u8 rx_buf[33]="123456 ";
- static u16 t=0;
- while(1) //等待按鍵按下進(jìn)行選擇發(fā)送還是接收
- {
- key=keyscan(0);
- if(key==K_UP_PRESS) //接收模式
- {
- mode=0;
- GUI_Show12ASCII(10,140,"RX_Mode",RED,BLACK);
- GUI_Show12ASCII(10,160,"Received Data:",RED,BLACK);
- GUI_Show12ASCII(120,160," ",RED,BLACK);
- break;
- }
- if(key==K_DOWN_PRESS) //發(fā)送模式
- {
- mode=1;
- GUI_Show12ASCII(10,140,"TX_Mode",RED,BLACK);
- GUI_Show12ASCII(10,160,"Send Data: ",RED,BLACK);
- GUI_Show12ASCII(120,160," ",RED,BLACK);
- break;
- }
- }
-
- if(mode==0) //接收模式
- {
- NRF24L01_RX_Mode();
- while(1)
- {
- if(NRF24L01_RxPacket(rx_buf)==0) //接收到數(shù)據(jù)顯示
- {
- rx_buf[32]='\0';
- GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
- break;
- }
- else
- {
- delay_ms(1);
- }
- t++;
- if(t==1000)
- {
- t=0;
- led1=~led1; //一秒鐘改變一次狀態(tài)
- }
- }
- }
- if(mode==1) //發(fā)送模式
- {
-
- NRF24L01_TX_Mode();
- while(1)
- {
- if(NRF24L01_TxPacket(rx_buf)==TX_OK)
- {
- GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
- break;
- }
- else
- {
- GUI_Show12ASCII(120,160,"Send Data Failed ",RED,BLACK);
-
- }
- }
- }
- }
- int main(void)
- {
- u8 i=0;
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- uart_init(9600);
- TFT_Init();
- led_init();
- button_init();
- NRF24L01_Init();
- lcd_display();
- while(NRF24L01_Check()) //檢測NRF24L01是否存在
- {
- GUI_Show12ASCII(140,50,"Error ",RED,BLACK);
- }
- GUI_Show12ASCII(140,50,"Success",RED,BLACK);
- while(1)
- {
- data_pros();
- i++;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
2.4G無線通信應(yīng)用.7z
(4.16 MB, 下載次數(shù): 318)
2021-11-4 05:18 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|