久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 84758|回復: 35
打印 上一主題 下一主題
收起左側

nRF24L01單片機通信的總結--看了就會用了

  [復制鏈接]
跳轉到指定樓層
樓主
ID:70976 發表于 2014-12-26 21:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1周時間,我從一個沒用過STC單片機,不知道什么叫SPI接口的“文盲”,把nRF24L01的整個通信過程弄到完全沒有bug.。興奮之余來小屁一下。給那些正在奮斗著這個牛逼的芯片的小牛們小炫一下。希望有所幫助。屁話少說。正題:

  基本的東西我理解了,那就是:1.用5根線的SPI接口向2401發送數據或指令。2.芯片在每次上電的時候都需要進行一番配置。這些配置數據,就是所謂的指令了。3.配置完成后知道芯片處在哪個模式。并且知道它將要轉向哪個模式。4.通訊協議。5.觀察現象。

  好了,小牛們一定急切想知道自己的程序問題出在哪里了,再小白一點的一定想急切的知道如何配置才能讓它工作。更小白一點的一定想知道這個芯片的各個模式之間是怎么聯系的。又是如何進行相互轉化的。別急,一個一個說。

  要說什么最重要,你們不會想到其實是4.通訊協議。 

  為什么呢,你們又知道在這里的通訊協議是作什么用的呢。 舉個簡單的例子,我剛開始設計的時候,一心想讓一個作為發送模塊,每隔一秒發送一次數據,而另一個則作為接收模塊,不間斷的檢測收到數據沒有。 這就是一個簡單的通訊協議,它是我們的目標。是我們的方向。當然真正的通訊協議絕對不會這么簡單的幾句話。它告訴你,你理想中的模塊應該充當什么角色。是接收?是發送?還是接收完了馬上發送。作為開發階段,當然是越簡單的協議,正確性就越容易驗證,廢話不說,那就按我說的“通訊協議”來設計吧。

  先說發送模式吧。

  要到發送模式,要經歷幾個變化。第1,上電,上電完了芯片其實還是在powerDown模式,因為芯片為了省電,它需要通過軟件來控制開機或關機。powerDown模式就是所謂的待機模式了。這個模式理所當然是最省電的。它除了省電以外還能干嗎呢?配置!對最重要的配置。就是可以通過 SPI口向它發送數據,它是可以接收到的,并且可以正確寫入到指定的寄存器中的。一般我們在初始化中一開始就可以配置了,而此時芯片正是處在這個模式。

  第2.我們的目標是要把它配置的能發送出去數據,而且能被目標設備正確接收。所以這中間涉及的寄存器(當然是2401里自帶的寄存器區了)有:

     1@發送到的目標地址。 說地址其實是虛的,它就相當于一個鑰匙和一把鎖一樣。當你在接收設備里邊規定了一個地址以后,那么接收到的數據只有帶了這個地址的包才會被正確接收。所以說這里的發送目標地址就是接收設備里的本機地址。只要設計時兩個地址相同,就不會接收不到。

     2@接收到的地址。 這個名字起的不是很好哈,有點誤導人。說白了就是一個本機地址了。在純發射機里,它并不是必要的。因為它從來不接收數據~~~這里寫上,是因為:發射模式還有個東西,就是自動應答功能,(當然也是通過配置才能啟用的,不配置則不會自動應答,也就不需要知道本機地址了)。

     3@說到自動應答,那就先說它吧。一般我們會想,發送出一幀數據后是不是應該等待另一方回應個數據呀?想法是好的,但我說了,有通訊協議在控制。因為我們這里只想設計成一直發送而不管對方是否收到。所以自動應答可以不去配置,讓它開機默認即可。但實際上我們的通訊協議可能很復雜,肯定不會是一直在發送。并且,它發送完一幀后,確實應該轉為接收模式來等待對方發送應答數據過來。我們人為的當然可以自己來個模式跳轉,但是有自動應答了,也就是說,當你設定開啟自動應答了,那么在它發送完一包數據后,芯片會立即轉為接收模式了。 《在這里我也仍有一點沒理解,就是,當它收到應答后會變成什么模式呢,是自動再回到發送模式還是停留在接收模式。》 

     4@有自動應答了,那么就不能少了自動重發功能了。為什么呢。首先理解為什么會自動重發,就因為它處在自動應答模式時,通過接收數據來判定上次的數據是否有接收者成功接收了,就像我送出了一封信,如果你沒有回信我是不是會想你可能沒收到信,我需要再發一次。就是這個道理 。自動重發寄存器8位被分成兩個4位的小區域,高4位存的是重發間隔時間,也就是說總共可以設定為16種不同的間隔,在這個間隔時間過后仍沒有回應才再次重發。低4位好說,就是存一個最大重發次數。則最大可以設為15,即重發15次后仍然沒回應那就不理你了,不再重發了。并且還會產生一個中斷呢。最后再講中斷部分。 這里應該注意的是,當自動應答功能禁止時,就沒有自動重發了,不管你設了重發多少次都不管用了。所以是互相影響的。還有就是重發次數設為0次,則相當于禁自動重發了,這不是顯然的么。嘿嘿。

     5@最基本的配置,,頻率。這個芯片不光能以2.4Ghz的載波發射呢,它的帶寬為2.4G----2.512G呢。這中間有一百多M的頻帶,可以劃分成2M一個的信道。這個寄存器中的值就標明你想工作在哪個信道上啦,只有設置為同頻的設備才能接收的到很容易理解吧。比如你設為10信道,則10*2=20M即發送時所用的載波頻率就是2400+20=2420MHz。當然也只有設為2420M的接收設備才能接收的到了。

     6@功率,數據速率。這是什么呢?原來2401里邊也有自動增益控制部分,我們可以設定一個合適的功率來發射數據,第一可以在能耗上有利,另一方面對通信距離的控制也是很重要的。比如我只想在2米內能夠通信,但2401最大的通信距離可以達到上百米,顯然需要降發射功率來降低通信距離。可選的功率值有 0Dbm,-6dBm, -12dBm,-18dBm, 顯然0在這里是最大的發射功率了。開發時盡可能設為0.如果設為0時,接收者都接收不到數據,那肯定是芯片壞了,就不用考慮降低功耗來通信了。這四檔功率,通信距離從遠到近,從幾十米到幾cm.并且在通信過程中還可以動態更改這個功率值,以達到最佳匹配的效果。數據速率是什么呢,剛開始我跟SPI接口的速率搞混了,想著,一個4M的單片機跟芯片通信速率怎么可能到這么高的。其實不是,這個速率就是加在載波上的數據的碼率了。有兩個可選值,1Mb/s,2Mb/s.也就是說,1秒鐘能發送出去多少個高低電平。

     以上這些配置命令之后就可以通過簡單的指令轉向發送模式了。下面就看一下,配置的偽指令吧:

    1. sendCommand(TxAddress_5) .因為地址是3到5字節可選的,這里選擇了5字節的地址

    2. sendCommand(LocalAddress_5),本機地址如果想要開啟自動應答則必需與發射地址相同,即LocalAddress==TxAddress..不開啟則不需要相等。

    3. sendCommand(EnableAutoAck_0),因為芯片自帶了6個通道,可以同時工作同時接收不同的數據,所以這里的自動應答也有相應的6個bit位來分別控制。這里只允許通道0自動應答。

    4. sendCommand(EnableAutoTransmit) .只要上邊一句配置開了自動應答,這句就應答生效。即自動重發.

    5.  sendCommand(RF_CH). 這一句設置發射頻率。即設定信道。一般默認的就是0信道了,也即2.4G的載波。

    6.sendCommand(RF_Power). 設定發射速率,還有發射功率就設成0dBM吧。





    以上這些是發射模式的必要配置了。如果不涉及接收,那么現在就可以轉向發射模式。

    7.sendCommand(Config); 通過 config寄存器中的開機控制位 powerup=1,轉向空閑模式,config^0=0.轉向發射模式。

    8.sendCommand(TxBuffer);  填充發送數據到緩沖區里邊。

    8.CE=1;  這是一個引腳,用來控制從空閑模式向發送或接收模式跳轉的.僅將相應位設為發送或接收模式不行,芯片現在只欠東風了,就是CE=1并保持最少10us時間后。就會開始發送數據了。

    一個幀數據發送完成后會產生中斷。這些中斷是可以屏蔽的,就像單片機的中斷允許控制一樣。控制位在config寄存器中。

    這里還可能產生另一個中斷,就是重發次數達到上限了,你設了重發3次,那么重發3次以后還沒收到應答就產生中斷了。同樣也是可屏蔽的。



 下面說接收模式配置吧。

  待續一下。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:72886 發表于 2015-1-27 21:04 | 只看該作者
還在設計硬件,來看看nrf24l01好調不,看你們寫的都腦大了,樓主繼續啊,請問你的手冊也是英文的嗎?求一個中文的手冊。。謝謝
回復

使用道具 舉報

板凳
ID:68369 發表于 2015-2-26 21:45 | 只看該作者
樓主,想問一下NRF24L01和5V單片機相連要串電阻嗎?串多大?
回復

使用道具 舉報

地板
ID:73002 發表于 2015-3-11 13:11 | 只看該作者
可以學習下。
回復

使用道具 舉報

5#
ID:74852 發表于 2015-3-19 10:50 | 只看該作者
liyongbin10 發表于 2015-2-26 21:45
樓主,想問一下NRF24L01和5V單片機相連要串電阻嗎?串多大?

nrf最大承受電壓只有3.6v,建議還是用一個3.3v的恒壓芯片吧,電路也簡單,加兩個電容就行了
回復

使用道具 舉報

6#
ID:73962 發表于 2015-3-19 20:19 | 只看該作者
挺深入淺出的科普帖子,贊一個!
不知道為啥,沒有續帖了?
期待下文。
回復

使用道具 舉報

7#
ID:37003 發表于 2015-3-24 17:01 | 只看該作者
很好的總結!
回復

使用道具 舉報

8#
ID:72611 發表于 2015-4-4 17:44 | 只看該作者
學習了
回復

使用道具 舉報

9#
ID:84442 發表于 2015-7-1 09:59 | 只看該作者
樓主你好,我用51單片機控制2401,要設置1Mbps,發射功率為4dBm,請問怎么寫程序。
回復

使用道具 舉報

10#
ID:84485 發表于 2015-7-1 16:51 | 只看該作者
非常好
回復

使用道具 舉報

11#
ID:84485 發表于 2015-7-1 16:51 | 只看該作者
非常好
回復

使用道具 舉報

12#
ID:79615 發表于 2015-9-12 00:51 | 只看該作者
哇哇。樓主很好,很好的經驗!
回復

使用道具 舉報

13#
ID:104819 發表于 2016-8-28 10:48 | 只看該作者
非常好
回復

使用道具 舉報

14#
ID:91274 發表于 2016-9-3 11:09 | 只看該作者
學習中
回復

使用道具 舉報

15#
ID:91274 發表于 2016-9-3 11:10 | 只看該作者
沒有其他程序?
回復

使用道具 舉報

16#
ID:154544 發表于 2017-2-28 14:50 | 只看該作者
樓主好棒
回復

使用道具 舉報

17#
ID:169722 發表于 2017-4-11 12:17 | 只看該作者
wxfhw 發表于 2015-3-19 20:19
挺深入淺出的科普帖子,贊一個!
不知道為啥,沒有續帖了?
期待下文。

請問下文在哪?我找不到
回復

使用道具 舉報

18#
ID:188912 發表于 2017-4-12 17:25 | 只看該作者
感謝有思路
回復

使用道具 舉報

19#
ID:193669 發表于 2017-4-25 23:53 | 只看該作者
親,有沒有兩個51之間通信的程序
回復

使用道具 舉報

20#
ID:220453 發表于 2017-7-18 09:46 | 只看該作者
謝謝樓主~
回復

使用道具 舉報

21#
ID:219204 發表于 2017-7-24 22:24 | 只看該作者
樓主快點更啊,我很需要您這種詳細的講解
回復

使用道具 舉報

22#
ID:203249 發表于 2017-9-4 16:39 | 只看該作者
講的很明白,兄弟,上個代碼分享就完美了
回復

使用道具 舉報

23#
ID:161939 發表于 2017-9-4 21:30 | 只看該作者
下一集呢樓主坐等更新啊
回復

使用道具 舉報

24#
ID:221300 發表于 2017-10-24 20:58 | 只看該作者
學子心 發表于 2015-7-1 09:59
**** 作者被禁止或刪除 內容自動屏蔽 ****

24L01最高發射功率只能有0dBm
回復

使用道具 舉報

25#
ID:251314 發表于 2017-11-20 09:20 | 只看該作者
總結的很好,我還像看看   前導碼、同步字這些,怎么就沒什么人問呢?
回復

使用道具 舉報

26#
ID:134294 發表于 2017-11-21 19:49 | 只看該作者
14年的帖子,作者還沒續貼!
回復

使用道具 舉報

27#
ID:256288 發表于 2017-12-1 21:47 | 只看該作者
希望更新
回復

使用道具 舉報

28#
ID:266052 發表于 2017-12-24 15:10 | 只看該作者
謝謝分享
回復

使用道具 舉報

29#
ID:52816 發表于 2018-7-15 16:45 | 只看該作者
謝謝分享
回復

使用道具 舉報

30#
ID:307566 發表于 2018-10-30 22:10 | 只看該作者
牛皮啊,6666謝謝樓主
回復

使用道具 舉報

31#
ID:478236 發表于 2019-3-14 22:20 | 只看該作者
小白表示看不懂,哈哈哈,我是不是沒救了
回復

使用道具 舉報

32#
ID:443731 發表于 2019-10-28 16:42 | 只看該作者
liyongbin10 發表于 2015-2-26 21:45
樓主,想問一下NRF24L01和5V單片機相連要串電阻嗎?串多大?

正常是3.3V,自己計算下唄。不難的
回復

使用道具 舉報

33#
ID:631965 發表于 2019-10-29 12:05 | 只看該作者
安全加密芯片,有意者歡迎咨詢
回復

使用道具 舉報

34#
ID:51142 發表于 2019-10-30 00:17 | 只看該作者
謝謝分享,學習
回復

使用道具 舉報

35#
ID:156302 發表于 2020-1-30 11:32 | 只看該作者
前來學習一下,謝謝分享。雖然好久的帖子了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩福利 | 日韩高清电影 | h网站在线观看 | 九九热九九 | 久久久精品在线 | 精品视频一区二区三区四区 | 午夜丰满寂寞少妇精品 | 做a视频在线观看 | h视频在线观看免费 | 国产精品久久久久久 | 久久久免费电影 | 日本不卡高清视频 | 激情毛片 | 午夜av毛片| 亚洲综合视频 | 91精品国产综合久久精品 | 九九久久精品视频 | 狠狠干美女 | 日本精品一区二区三区视频 | 国产一级在线观看 | 亚洲国产精品网站 | 四虎在线观看 | 亚洲视频免费播放 | 日韩中出 | 黄色免费在线观看网站 | 日本黄色大片免费 | 四虎影院在线播放 | 日韩在线中文字幕 | 欧美日韩在线一区二区 | 亚洲精品中文字幕在线观看 | 久久久久久免费毛片精品 | 欧美视频中文字幕 | 国产一区二区在线免费视频 | 欧洲视频一区二区 | 在线中文字幕视频 | 99re在线视频 | 国产网站在线播放 | 国产一区二区三区精品久久久 | 日日骚网 | 精区3d动漫一品二品精区 | 国产成人小视频 |