1. 程式人生 > >關於NRF24L01模組使用的部分個人總結

關於NRF24L01模組使用的部分個人總結

1.首先,NRF24L01是一個基於2.4GHZ的射頻模組,增強型的具有更好的穩定性。

2.NRF使用的是SPI協議來進行操作,所以,需要理解SPI的幾個輸入輸出口,再加以正確的時序操作,即可以操作NRF

3.對NRF的操作,總體上的是,使用SPI的六根線,IRQ,MISO,MOSI,SCK,CSN,CE對NRF中的暫存器進行操作以及狀態的轉換。

4.SPI傳輸一組資料是使用交換的方式,即,通過時鐘訊號,一位一位的,在MOSI和MISO兩個埠中讀取,再交換資料的過程,當然,這是在時鐘訊號SCK的跳變下進行的,高電平到來,MOSI中資料被送出,下降沿到來,MISO中資料為從機發送過來的,依次進行八次交換,就可以交換一個位元組的資料了。

5.對NRF中的暫存器進行讀取的話,思想:讀取NRF中某個暫存器中的一個位元組資料,而讀取的話,有一個SPI指令,專門讀取暫存器的,格式Read_cmd= 0x00 + 需要讀取的暫存器地址,具體的還是要見NRF的中文手冊,有專門的一張表,說明了對NRF各種操作的命令字。

6.對NRF中的暫存器進行寫的話,思想和讀取差不多,只要傳入需要的引數即可,與此同時也可以返回暫存器中的狀態暫存器的狀態,這樣可以知道當前NRF的工作狀態。

7.那麼,會讀寫操作以後,就要進行對NRF中專門收發的RX_FIFO和TX_FIFO暫存器操作了,在讀寫操作時,CSN先要置0,讀寫完了再置1,也就是說,讀寫需要先片選使能該模組。讀寫的時候,就是呼叫一個位元組讀寫的方法進行一定長度的資料的讀寫,推薦使用地址長度為5個位元組長度,資料長度4個位元組長度。

8.在設定模式時,需要先把CE置0,使其進入待機模式,最後再置1。

9.傳送模式配置具體的一些配置見下:

/*首先配置傳送地址,需要寫命令到傳送地址暫存器中,然後寫入地址,再寫入地址的寬度

引數一:寫暫存器,寫入到傳送地址暫存器,表示要對其操作

         引數二:寫入地址,收發地址相同,通道0的地址為5個位元組大小可以隨意改變

         引數三:寫入的地址長度,為5個位元組長度

         */

         SPI_Write_TxFIFO(W_REGISTER + TX_ADDR,TxAddr, TX_ADDR_WITDH);

         /*

     然後寫入需要使用0通道作為接收端的應答通道,接收端在接收到資料後,記錄該地址,然後通過0通道回覆應答,

所以,0通道的地址需要和傳送端的傳送地址相同,這樣才能保證接收到接收方發來的應答訊號

         引數一:寫暫存器,寫入到通道0暫存器中

         引數二:寫入通道0的地址,地址和傳送端地址相同,保證接收到應答訊號

         引數三:地址長度,為5個位元組長度

         */ 

         SPI_Write_TxFIFO(W_REGISTER + RX_ADDR_P0,TxAddr, TX_ADDR_WITDH);

         /*緊接著可以開始寫入資料了

         引數一:還是寫暫存器,寫入到寫暫存器中,表示開始寫資料了

         引數二:需要寫入的資料

         引數三:需要寫入的資料長度,長度為4個位元組

         */

        SPI_Write_TxFIFO(W_TX_PAYLOAD,TxData,TX_DATA_WITDH);

              /*接下來需要配置各個暫存器,比如應答方式等,主要配置頭開始的六個暫存器*/

//通過寫一個位元組就可以設定各個暫存器,所以不使用SPI_Write_TxFIFO();函式

SPI_Write_NRF(W_REGISTER+ EN_AA, 0x01);//使能通道0,通道0自動應答允許,要是不需要自動應答,則置0x00

              SPI_Write_NRF(W_REGISTER+ EN_RXADDR, 0x01);//允許通道0

              //SPI_Write_NRF(W_REGISTER+ SETUP_AW, TX_DATA_WITDH);

SPI_Write_NRF(W_REGISTER+ SETUP_RETR, 0x1a);//設定自動重發,,自動重發十六次

              SPI_Write_NRF(W_REGISTER+ RF_CH, 0x40);//設定通道頻率是0!!!

         SPI_Write_NRF(W_REGISTER + RF_SETUP, 0x07);//射頻暫存器使用000 0 11 1,採用1Mbps  0dBm,

              SPI_Write_NRF(W_REGISTER+ CONFIG, 0x0e);//設定CRC檢驗使能有效,十六位iCRC校驗,上電,發射模式

10.  一個比較有用的是檢測應答訊號,這是一個檢驗是否成功傳送過的重要標誌,一旦接受到應答,或者是重發次數已經達到了最大值,都可以觸發中斷,也就是以下幾位:

/*狀態暫存器的4 5 6位,詳見中文手冊P17*/

unsigned charbdata sta;   //狀態標誌,bdata是允許對一個八位的資料,如sta的每一位進行操作,相當如IO口

sbit RX_DR=sta^6;//接收資料中斷,當接收到有效資料後置一,寫1清除中斷

sbit TX_DS=sta^5;//傳送資料中斷,自動工作方式下,只有當收到應答訊號以後此位才為1,寫1清除中斷

sbit MAX_RT=sta^4;//達到最多次重發中斷,如果它的中斷產生,則需要清除後,系統才能進行通訊

使用的是置1清除中斷,也就是說,傳送完一次,無論是傳送成功還是傳送達到最大次數,都會產生中斷,這種中斷是需要清除的,以保證下一次的正常傳送操作。

11. 接收具體配置如下:

  //引數一:寫入命令到通道0接收暫存器中,使用的地址和傳送地址相同,才能保證正確的傳輸

         SPI_Write_TxFIFO(W_REGISTER + RX_ADDR_P0,TxAddr, TX_ADDR_WITDH);//寫給NRF告訴它,現在準備接受通道0的資料

         /*接下來設定各個暫存器,使NRF工作在接受模式下!*/

         SPI_Write_NRF(W_REGISTER + EN_AA, 0x01);//使能通道0,通道0自動應答允許,要是不需要自動應答,則置0x00

              SPI_Write_NRF(W_REGISTER+ EN_RXADDR, 0x01);//允許通道0

              //地址寬度,不知要不要寫,感覺應該是要寫的

              //SPI_Write_NRF(W_REGISTER+ SETUP_AW, 0x03);//設定地址寬度,000000XX,因為使用五個地址寬度,所以XX = 11,即0x03

              SPI_Write_NRF(W_REGISTER+ RF_CH, 0x40);//設定通道頻率是0!!!收發雙方必須保持一致

              SPI_Write_NRF(W_REGISTER+ RX_PW_P0,RX_DATA_WITDH);//設定接收通道0的資料寬度,寬度需要和發射端一樣寬??

         SPI_Write_NRF(W_REGISTER + RF_SETUP, 0x07);//射頻暫存器使用000 0 11 1,採用1Mbps  0dBm,

         SPI_Write_NRF(W_REGISTER + CONFIG, 0x0f);//設定CRC檢驗使能有效,十六位iCRC校驗,上電,接收模式

11.大概的NRF操作就是以上的幾步,一次可以傳輸四個位元組的資料,當連續的傳輸,就可以做到對一定的資料進行收集處理工作了。雖然我也是在別人程式的基礎上,加以理解以後根據NRF的中文手冊編寫的程式,但是,我還是除錯了三天,理解程式碼和最後有效的差距還是很大的,需要經過近乎絕望的除錯,還要以防模組的燒壞,我已經十分小心了,還是燒壞了一個NRF模組,它對於電壓還是很敏感的,使用時千萬要小心。

12.講一下除錯步驟:①首先除錯傳送端,單純的傳送,不管接收端,這時候要把自動重發和校驗關閉,要是傳送成功,讀取status狀態暫存器中內容就可以判斷是否正確傳送了,如果正確傳送了,status中的內容應該是2EH,這是根據NRF的資料手冊得出的值,具體可以見手冊。而傳送端成功以後,就讓傳送端一直髮送資料,去除錯接收端,接收端的話,要是正確接收了,status中應該是40H,這樣,NRF基本就通了,這裡除錯的時候可以藉助串列埠除錯工具,看到status暫存器中的值,串列埠是除錯的好方法。

13.希望這些經驗能夠讓我更加有信心在嵌入式方向邁進!

相關推薦

關於NRF24L01模組使用的部分個人總結

1.首先,NRF24L01是一個基於2.4GHZ的射頻模組,增強型的具有更好的穩定性。 2.NRF使用的是SPI協議來進行操作,所以,需要理解SPI的幾個輸入輸出口,再加以正確的時序操作,即可以操作N

linux部分個人總結命令

絕對路徑用"/"表示 檢視當前程序:ps ps -ef|grep pid:檢視指定程序的資訊 終止程序:kill-9 pid 執行退出:exit 檢視當前路徑:pwd 怎麼清屏:clean 退出當前命令:ctrl+c 執行睡眠:ctrl+z 掛起當前程序:fg ls列出指定目錄 l

Mybatis部分 個人總結

Mybatis部分; 一、JDBC程式設計有哪些不足之處:Mybatis是如何解決這些問題的? 1.資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用資料庫連線池可以解決此問題 解決:在SqlMapConfig.xml中配置資料庫連線池,使用連線池管理資料庫

個人總結_5.6

今天 總結 個人總結 -s 功能 family 全面 spa size 昨天幹了什麽:   窗口框架 今天幹了什麽:   swing組件,邊學邊寫 困難:   設計布局,功能想不全面個人總結_5.6

個人總結4-dbutils總結

基本 user 步驟 昨天 基礎 問題 頁面 發現 個人總結 昨天學習了dbutils的使用方法,簡化了使用的步驟,可以使用三四步就可以寫出來,queryRunner的使用方法有了簡單的了解,目前可以使用dbutils實現最簡單的增刪改查。 今天

個人階段個人總結07

bootstrap 發布 不能 數據 連接 dbutil 設計 使用 ots 昨天做了什麽?利用學習的bootstrap的知識,進行主界面和各個界面的前段的編寫,進行了美化的處理,完成了前端的設計。 今天準備做什麽?進行後端消息的發布界面的後臺的的程序的設計。 遇到了什麽困

第八屆山東省ACM大學生程序設計競賽個人總結

我們 斐波那契 實現 結果 。。 學校 合數 工作 們的 因為省賽,從開學緊張到5月7號。心思也幾乎全放在ACM的訓練上。因為我還是校臺球協會的會長,所以臺協還有一些事情需要忙,但是我都給延遲了。老會長一直在催我辦校賽,但我一直說 等等吧,因為校賽只能在周六

個人總結_5.10

span 調試 什麽 理解 程序 font 個人 昨天 鬧鐘 昨天幹了什麽   查找鬧鐘代碼 今天幹了什麽   完善代碼 困難    搜到的代碼不理解,程序調試不成功個人總結_5.10

個人作業3——個人總結(Alpha階段)

服務 不同 做到 用戶需求 用例 多語 n) 安排時間 想想 一、問題集錦 【問題一】在本書對於師生關系的講解中提到,最理想的師生關系是“健身教練/健身學員”。我認為“老師/學生”本來就是一種明確的關系,老師授業解惑,學生學習吸收。而再將這種關系比喻為健身教練與學員,難到

個人作業3——個人總結(Alpha階段)

view 做成 名詞 估算 支持多語言 擴展 常用模塊 不同的 日誌 1.說到軟件工程作業,很多同學都曾經苦惱過,想放棄。可是,當你堅持寫完的時候,突然間心情大好,發現原來自己能做得到。我也是這樣,缺乏自信心了,沒有人在後面推一把,就很難前進。框架吧,是用來打破的。我們不能

個人作業3--個人總結(Alpha階段)

target 愛好 項目 leader 平衡 構建 個人總結 spa 發的 我們也算是經過了一次軟件開發的人了,在Alpha階段過程和結果都不太理想,我們在寫事後諸葛亮會議的時候也感慨了很多,在小組會議的時候也討論了很多,為了完成這次作業,我又翻了翻《構建之法》這本書。這本

個人作業3——個人總結

空閑 流程 正在 想法 管理工具 它的 應付 多語 做了 一、問題 1.在《構建之法》這本書的2.1.2這一小節我看到了一句這樣的話“單元測試必須由最熟悉代碼的人(程序的作者)來寫”,可是在整個alpha版本階段中我們的代碼編寫和測試代碼的編寫都是由不同的人來完成,編寫代碼

個人作業3——個人總結(Alphe)

收獲 系統 吐槽 不同的 申請 過時 數學 sel exce 小結: 1、軟件工程的第一階段終於結束了,說實話,每個人的課程都很緊張,在這麽緊張的時期我們都每周抽出一些時間來開個小會總結或者計劃軟件工程的相關任何非常難得,大家的態度都誠懇認真,我亦是如此,只是我的能力有限,

個人作業3—個人總結(Alpha階段)

覆蓋率 總結 分配 further .cn 用戶 100% 兩個人 代碼覆蓋率 一、個人總結 在Alpha階段,我們團隊通過合作的方式,完成了之前覺得不大可能會完成的事(至少在我看來是這樣的),大家其實之前的寫代碼能力都不太好,這期間大家都是邊學邊做,邊做邊學,最後跌跌撞撞

第二階段個人總結03

出了 匹配 還需要 差距 以及 穩定 編寫 代碼 角度 昨天幹了什麽:   已經根據設計的方案基本編寫出了代碼,還需要測試其穩定性 今天準備幹什麽:   改進個人主頁面,與登錄界面做出相應的差別,從用戶的短期刺激和長期使用來考慮界面的模式以及所涉及的內容 遇到什麽困難:  

第二階段個人總結04

似的 自己 網上 聊天功能 相關 自己的 個人主頁 適合 簡單 昨天幹了什麽:   改進了個人主頁(與登錄界面區分開來),主要優點簡單明了,便於用戶長期使用 今天準備幹什麽:   查詢相應的網上聊天功能,了解實時聊天的實現方法(類似於聊天室),看看能不能嵌入到網站的功能上

個人總結

溝通能力 問題 充足 宋體 相對 自己 編程 發現 連接 軟件工程概論課程建議 對於17周的軟件工程概論的學習,我感覺我有了很大的收獲,我覺得這段時間對我來說學習了一個軟件工程師的成長過程,問我學到了很多東西,學會了團隊的開發

第二階段沖刺-個人總結04

新項目 學習 開始 嘗試 編寫 函數 沒有 環境 編譯環境 昨天幹了什麽: 嘗試編寫新項目,查閱資料視頻學習 今天準備幹什麽: 繼續根據視頻以及資料學習。 嘗試開始一些功能。 遇到困難沒有: 對函數與技術的不熟悉。   編譯環境的更新。

軟件工程——個人總結

流程 工程 個人 lec 你們 初學 編輯 pan 美化 團隊名稱 樂遊計劃 團隊項目 · 基於微信系統平臺的運動會報名系統 1.學習和使用的新軟件 Enterprise Architect(各種用例圖、類圖繪制的軟件) DW 新浪雲的共享sq

JVM個人總結

模糊 bsp 如果 垃圾收集 深入理解java 一段時間 com 類加載 .com 看了深入理解JAVA虛擬機已經有一段時間了 發現很多東西如果不總結 腦子裏總是沒有一條線貫穿起來,也比較模糊混亂,所以還是有必要利用邏輯思維圖總結下。 JVM看了下 大致比較重要的分內