NRF24L01驅動代碼下載:[http://download.csdn.net/detail/ieczw/7029597](http://download.csdn.net/detail/ieczw/7029597)
NRF24L01調試了近一個星期!多多少少有點浪費感情,因為由于板子的問題害的我一直無法調通,后來又找了兩塊板子,立馬搞好!當然我的程序很大成分上是參考老一輩革命家的;但是在這之間,由于板子的問題,迫使我對NRF24L01的datasheet進行了一番研究!
NRF24L01與控制器的通信采用的SPI通信協議,這個協議具體細節大家可能都懂,不懂的可以之間百度;他們的通信模型是這樣的:

NRF*之間基本上可以互相通信,只要你地址設置的沒有問題!他有六個通道,每一個通道都有自己的緩沖區,這六個通道可以同時跟不同的NRF進行通信,但是通信的兩個之間的TX_ADDR和RX_ADDR一定要相同;

這幅圖能夠充分的說明這個問題;Point1 to Point2,Point1和Point2的通道地址一定要一樣;具體的設置在下面這個寄存器里面配置:

NRF24L01有RX模式,TX模式,Standby-I模式,Standby-II模式,掉電模式;他們之間的模式轉換如下圖:

這張圖看著可能沒有一點感覺,比較亂,下面這張可能會比較清晰一點:

只要我們想切換到什么模式就可以根據這個對寄存器進行配置;不過在配置的過程中,一點要注意適當的延時,我這次也被這個延時糾結了半天;

從Standy Mode轉化到Tx/Rx mode 我這次就是可能延時的比較長,導致初始化一直沒有成功,我剛開始一直的想法是,只要我等待的時間越長,他就越容易實現我的配置;看來這種觀念需要改正下;
為了讓整個傳輸穩定和快速,我可以可以設置自動應答模式;但是他只適合單通道模式:

當發送方把數據發送給接收方,接收方會有一個短暫的延時大致130us,然后會高速發送方我接收了;然后接收方會產生一個中斷信號,當發送方沒有接收到這個ACk,他就會一直卡在這里;
說到他的中斷,他有三種中斷模式,一種是接收中斷,二是發送完成中斷,三發送超時中斷;具體我們可以看STATU寄存器:

我們一般判斷的主要是[6:4],RX_DR是接收到中斷標志位,TX_DS發送完成中斷標志位,MAX_RT超過最大發送次數標志位;這三位是可讀可寫的;寫1的時候是清除中斷標志位;這里還有一個預留位,我們一般不用,但是有時候我可以用他來測試看看是否寫寄存器成功;當然,其他寄存器的預留位也可以來測試是否控制器與NRF模塊通信是否正常。
另外還有FIFO_STATUS寄存器,他主要是檢測FIFO寄存器的狀態:

說這么久了,忘記說這個FIFO寄存器,也就是數據寄存器,他有32個Byte,所以我們在設置裝載數據的大小時,只能最大設置為32byte;當然可以小于32byte;在接收模式下,如果接收完畢,我們最好把FIFO寄存器清空了,可以看FLUSH_RX寄存器,不過理論上,只要把數據讀走,他都會自動清空;但是為了以防萬一,還是清空了好;

這幾個是比較重要的寄存器,要寫寄存器的話,必須以W_REGISTER為基地址+命令地址進行寫操作;讀的話同樣的方法;但是一般不寫R_REGISTER,因為AAAAA=5bit Register Map Address,正好R_Register的高三位為0,所有Register Map Address的高三位都為0,所以我們可以不用寫了;但是對于寫操作,高三為為001,故我們一般定義W_REGISTER為0x20,然后與Command與操作;即可;
R_RX_PAYLOAD與W_TX_PAYLOAD作為發送和接收的緩沖區;
有什么不懂得,我們可以留言繼續進行討論,我覺得datasheet說的真的是太清晰了,有點地方你沒有看懂,我估計是你沒有找到。
請各位多多指教!
- 前言
- 【菜鳥入門】stm32的第一個程序--LED
- 【菜鳥入門】stm32 之 掃描按鍵
- 【菜鳥入門】stm32 之 中斷按鍵
- 【菜鳥入門】stm32 之 USART
- 【菜鳥入門】stm32 之 iic
- 【菜鳥入門】stm32 之 eeprom
- 【菜鳥入門】stm32 之 pwm
- 【菜鳥入門】stm32 之 ADC 模數轉換
- 【菜鳥入門】stm32 之 實時時鐘
- 【菜鳥入門】stm32 之 DMA
- 【菜鳥入門】stm32 之 DAC
- 【STM庫應用】stm32 之 USART
- 中斷源去抖辦法
- stm32 啟動代碼應用技巧
- 【STM庫應用】stm32 之 IIC應用
- 【STM庫應用】stm32 之 中斷按鍵初始化(注意事項)
- 關于結構體初始化
- 【STM庫應用】stm32 之 TIM (詳解一 通用定時器)
- 【STM庫應用】stm32 之 TIM (詳解二 脈沖寬度、周期測量)
- 【stm32庫應用】SD驅動移植(基于SDIO外設)
- SD卡fat文件系統移植
- stm32 DMA初始化選項研究
- stm32 靈活靜態存儲控制器(FSMC)(NORFLASH\PSRAM)
- 【stm32+uC/OS-II】ucosii移植簡單詳細步驟
- STM32 加入調試信息來調試代碼
- NRF24L01 無線通信模塊使用