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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

nRF24L01應用筆記(上)

[復制鏈接]
跳轉到指定樓層
樓主
ID:69862 發(fā)表于 2015-7-24 22:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xiao_yp2014 于 2016-6-7 13:58 編輯



nRF24L01應用筆記(下)               http://www.zg4o1577.cn/bbs/dpj-37581-1.html
     如何快速搞通“NRF24L01”,你造嗎?   http://www.zg4o1577.cn/bbs/dpj-51459-1.html





nRF24L01應用筆記


      nRF24L01Nordic公司生產(chǎn)的一個單芯片射頻收發(fā)器件,是目前應用比較廣泛的一款無線通訊芯片,具體手冊資料網(wǎng)上大把,我就不再重復它的特性什么的了,直接說說它的調試方法,方法供大家參考。
      24L01是收發(fā)雙方都需要編程的器件,這就對調試方法產(chǎn)生了一定的要求,如果兩塊一起調,那么通訊不成功,根本不知道是發(fā)的問題還是收的問題,不隱晦的說,我當時也是沒理清調試思路才浪費了大半天時間看著模塊干瞪眼。正確的方法應該是先調試發(fā)送方,能保證發(fā)送正確,再去調接收,這樣就可以有針對性的解決問題。

      至于怎么去調發(fā)送方,先說下發(fā)送方的工作流程:

      ·配置寄存器使芯片工作于發(fā)送模式后拉高CE端至少10us
      ·讀狀態(tài)寄存器STATUS
      ·判斷是否是發(fā)送完成標志位置位
      ·清標志
      ·清數(shù)據(jù)緩沖

      網(wǎng)上的程序我也看過,大多都是成品,發(fā)送方發(fā)送-等應答-(自動重發(fā))-觸發(fā)中斷。可是這樣的流程就已經(jīng)把接收方給牽涉進來了,就是說一定要接收方正確收到數(shù)據(jù)并且回送應答信號之后發(fā)送方才能觸發(fā)中斷,結束一次完整的發(fā)送?墒沁@跟我們的初衷不相符,我們想單獨調試發(fā)送,完全拋開接收,這樣就要去配置一些參數(shù)來取消自動應答,取消自動重發(fā),讓發(fā)送方達到發(fā)出數(shù)據(jù)就算成功的目的。
  1.       SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);           //失能通道0自動應答
  2.       SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);    //失能接收通道0
  3.       SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);      //失能自動重發(fā)
復制代碼


      (注:以下貼出的寄存器描述由于中文資料上有一個錯誤,故貼出原版英文資料)

有了以上這三個配置,發(fā)送方的流程就變成了發(fā)送-觸發(fā)中斷。這樣就拋開了接收方,可以專心去調試發(fā)送,可是怎么樣才知道發(fā)送是否成功呢,要用到另外兩個寄存器,STATUSFIFO_STATUS。
    這樣就很清晰了,我們可以通過讀取STATUS的值來判斷是哪個事件觸發(fā)了中斷,寄存器4、5、6位分別對應自動重發(fā)完成中斷,數(shù)據(jù)發(fā)送完成中斷,數(shù)據(jù)接收完成中斷。也就是說,在之前的配置下,如果數(shù)據(jù)成功發(fā)送,那么STATUS的值應該為0x2e。這樣就可以作為一個檢測標準,另外一個標準可以看FIFO_STATUS寄存器,第5位的描述:發(fā)送緩沖器滿標志,1為滿,0為有可用空間;第4位的描述:發(fā)送緩沖器空標志,1為空,0為有數(shù)據(jù);同樣可以看到接收緩沖器的對應標志。這樣在數(shù)據(jù)發(fā)送成功后,發(fā)送寄存器當然應該是空的,接收緩沖因為在之前已經(jīng)失能,所以也應該是空,也就是說成功發(fā)送之后的FIFO_STATUS寄存器值應該是0x11。
      有了這兩個檢測標準,我們即使不用接收方也可以確定發(fā)送方是否成功發(fā)送。當發(fā)送方調試成功之后,在程序里讓它一直發(fā)送,然后我們就可以去調試接收方,思路是一樣的,同樣說下接收方工作流程先。

      ·配置寄存器使芯片工作于接收模式后拉高CE端至少130us
      ·讀狀態(tài)寄存器STATUS
      ·判斷是否是接收完成標志位置位
      ·清標志
      ·讀取數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)
      ·清數(shù)據(jù)緩沖

      然后在初始化配置寄存器的時候要和發(fā)送方保持一致,比較重要的是要失能自動應答,使能通道0接收:
  1.       SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);           //失能通道0自動應答
  2.       SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);    //接收要使能接收通道0
復制代碼


      這樣就可以了,接收方就可以進入接收模式去接收數(shù)據(jù)了,這次的調試就會靈活一些,因為是接收數(shù)據(jù),可以在接收方添加一個顯示設備把數(shù)據(jù)直觀的顯示出來,去對照看是否正確,當然還可以使用和發(fā)送方一樣的方法:觀察STATUSFIFO_STATUS的值,對照寄存器描述,接收正確時STATUS的值應該是0x40,對于FIFO_STATUS的情況就多了些,因為數(shù)據(jù)寬度的不同也會造成寄存器的值不一樣,24L01最大支持32字節(jié)寬度,就是說一次通訊最多可以傳輸32個字節(jié)的數(shù)據(jù),在這種情況下,接收成功讀數(shù)據(jù)之前寄存器值應該為0x12,讀數(shù)據(jù)之后就會變成0x11;如果數(shù)據(jù)寬度定義的小于32字節(jié),那么接收成功讀數(shù)據(jù)之前寄存器值應該為0x10,讀數(shù)據(jù)之后就會變成0x11。這個看起來挺復雜,其實很清晰,大家可以試著分析下,對照數(shù)據(jù)手冊分析每個位的狀態(tài)就可以得到結果。

      好了,到這里對nRF24L01的調試基本上就算通了,但是要明白這些只是調試方法,最終的產(chǎn)品如果不加上應答和重發(fā)的話那么數(shù)據(jù)的穩(wěn)定性是很難保證的,所以在基本的通訊建立之后就要把發(fā)送的配置改為:
  1.       發(fā)送:  
  2.              SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);             //使能接收通道0自動應答
  3.              SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);      //使能接收通道0        
  4.              SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);      //自動重發(fā)10次,間隔500us
  5.       接收:
  6.              SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);           //失能通道0自動應答
  7.              SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);    //接收要使能接收通道0
復制代碼





      這樣發(fā)送和接收就進入了一個標準狀態(tài),發(fā)送-等應答-(自動重發(fā))-觸發(fā)中斷;接收-應答-觸發(fā)中斷,一切按部就班,程序里加上自己的應用部分就能實現(xiàn)很多功能了,呵呵,這個帖子就先到這,明白芯片工作原理之后寫程序就有目的性了,下一篇再說說程序中查詢法和中斷法以及具體的程序實例。

評分

參與人數(shù) 1黑幣 +8 收起 理由
stkh + 8 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:110550 發(fā)表于 2016-6-12 16:09 | 只看該作者
非常好,贊一個
回復

使用道具 舉報

板凳
ID:119252 發(fā)表于 2016-8-1 20:02 | 只看該作者
經(jīng)過樓主這么一說,明天就動手NRF24L 買了一直沒敢去碰它,謝謝樓主的教程!
回復

使用道具 舉報

地板
ID:105442 發(fā)表于 2017-1-7 00:30 | 只看該作者
非常好,贊一個
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久午夜片 | 欲色av | 激情网站在线观看 | 久久久精品久久 | 久久国产福利 | 亚洲精品www| 欧美精品成人影院 | 欧美黄色录像 | 久久99深爱久久99精品 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产成人99久久亚洲综合精品 | 国产伦精品一区二区三区四区视频 | 欧美中文字幕在线观看 | 亚洲一区中文字幕在线观看 | 欧美黄视频 | 欧美一区二区三区在线观看 | 国产粉嫩尤物极品99综合精品 | 超碰在线亚洲 | 91精品国产综合久久久久久蜜臀 | 午夜国产在线 | 91在线| 99久久精品国产一区二区三区 | 日韩av免费在线观看 | 日日爽| 在线播放中文字幕 | 精品在线看 | 成人午夜激情 | 亚洲精品久久久久中文字幕欢迎你 | 日韩在线欧美 | 欧美视频 亚洲视频 | 久久久久亚洲精品 | 亚洲二区在线 | 亚洲永久精品国产 | 91新视频| 色婷婷综合久久久中文字幕 | 亚洲成人av一区二区 | 欧美成人a∨高清免费观看 色999日韩 | 伊人网站 | a级在线免费 | 国产成人免费在线观看 | a级片播放 |