2.4G無線通訊模組NRF24L01在Cortex M上的使用
阿新 • • 發佈:2019-02-20
NRF24L01模組是一個用2.4GHz通訊的模組,輸出功率頻道選擇和協議的設定可以通過SPI 介面進行設定。幾乎可以連線到各種微控制器晶片,並完成無線資料傳送工作。
NRF24L01的一個特點是極低的電流消耗:當工作在發射模式下發射功率為0dBm 時電流消耗為11.3mA ,接收模式時為12.3mA,掉電模式和待機模式下電流消耗更低。經過幾天的除錯,我實現了兩臺裝置Cortex M裝置的通訊。
學習筆記
- 由於NRF24L01本身的不超過10Mhz時鐘限制限制,應該至少對時鐘72Mhz 的SPI進行8分頻。
- 在給NRF24L01寫入資料時,給晶片CSN引腳低電平,先發送要寫入暫存器的位置,再發送要寫入的值,如果寫入成功,會收到0xFF,最後將CSN引腳置高。
- 在讀取NRF24L01暫存器時,給晶片CSN引腳低電平,先發送要讀出暫存器的位置,再發送0xFF,則會收到這個位置對應暫存器的資料;不斷髮送0xFF就可以依次收到下一個暫存器的資料,最後將CSN引腳置高。
- 配置好地址暫存器地址後,可以呼叫NRF24L01_RxPacket(Buf)來接收資料或者NRF24L01_TxPacket(Buf)來發送資料。資料的長度為32個uint8,即32個位元組。具體的操作就不在此贅述了。
- 如果要進行一對多的通訊,需要把每個Slave的傳送暫存器配置與Master的接受暫存器相同,而且在傳送的資料中要指明自己是哪一個Slave。Master則可以遍歷Slave的接受暫存器來與每個Slave通訊。
NRF24L01無線晶片測試:
在這個測試中,我用了一個Cortex-M4配置成為Master,一個Cortex-M3配置成為Slave,Master每100ms向Slave傳送一次資料,如果收到了這段資料Slave就嘀一聲。暫時沒有對傳輸速度,功耗進行測試
測試結果:
在無障礙物的空曠地區,Slave和Master相距30米可以保持資料穩定傳輸,超過40米資料有少量的丟失,超過50米就基本收不到資料了。
在有障礙物的室內,傳輸距離就大大降低了。