|
本帖最后由 胡勝朋 于 2020-2-25 10:25 編輯
利用普中的51開發板和stm32f1開發板,其中51的開發板只做為發射端,stm32的開發板只作為接收端,另外在網上的很多NRF的例程,都是有自動應答(即在發送端發送完數據完成,接收端接收到數據之后會返回給發送端數據,來表示自己已經接收到數據),在我的代碼中我將這些刪掉很多代碼,因為我在剛開始學的時候,特別怕麻煩,一看到官方的代碼,就頭大,所以我是51發數據,51開發板上提供了四個獨立按鍵,k1~k4,我是按下一個按鍵,就給32發送一個數據,(如果不按的話,就不發送)k1~k4,分別發送上(up)下(down)左(left)右(right),那么怎么樣判斷32是否接收到數據,在32的循環中,我將數據區的值,顯示在液晶屏上,如果接受到了數據,那么就會顯示,up,down,left,right其中一個,具體是哪個,取決于你按下的按鍵就可以了,另外32接受到數據之后,我沒有讓它返回給發送端一個值,也就是說發射端并不知道對方是否接收到,不過我親測,一按下就可以接收到,另外在32的代碼中,我將每一個功能的函數,都寫成一個自定義函數,這樣在主函數中就會顯得簡潔,看起來舒服些。 nRF24L01是由NORDIC生產的工作在2.4GHz~2.5GHz的ISM 頻段的單片無線收發器芯片,輸出功率頻道選擇和協議的設置可以通過SPI 接口進行設置,發射數據時,首先將nRF24L01配置為發射模式:接著把接收節點地址TX_ADDR和有效數據TX_PLD按照時序由SPI口寫入nRF24L01緩存區,TX_PLD必須在CSN為低時連續寫入,而TX_ADDR在發射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發射數據;若自動應答開啟,那么nRF24L01在發射數據后立即進入接收模式,接收應答信號(自動應答接收地址應該與接收節點地址TX_ADDR一致)。如果收到應答,則認為此次通信成功,TX_DS置高,同時TX_PLD從TXFIFO中清除;若未收到應答,則自動重新發射該數據(自動重發已開啟),若重發次數(ARC)達到上限,MAX_RT置高,TXFIFO中數據保留以便再次重發;MAX_RT或TX_DS置高時,使IRQ變低,產生中斷,通知MCU。最后發射成功時,若CE為低則nRF24L01進入空閑模式1;若發送堆棧中有數據且CE為高,則進入下一次發射;若發送堆棧中無數據且CE為高,則進入空閑模式2。
在32的開放板上,我主要實現的功能是1:利用超聲波模塊測出障礙物的距離,并顯示在液晶屏上
2:利用ds18b20模塊測環境溫度,并顯示在液晶屏上
3:測出32開發板芯片內部的溫度,并顯示在液晶屏上
4:NRF的狀態是否存在,存在顯示success,不存在顯示error
5:顯示NRF接收到的值
注:完整的功能是:1:能夠進行超聲波避障的小車 2:自動尋跡的小車,3:通過51來遙控的小車,具體是避障還是尋跡還是遙控,可以通過NRF在51開發板上選擇,不過由于時間緊,缺少一些小零件,沒有完全實現,但是主要功能已經完成,我會盡快更新。本工程的代碼以壓縮包的形式上傳在附件中,另外有功能實現的效果圖(圖片的形式),以及所用到的模塊的使用方法(PPT的形式)。
|
-
-
-
-
-
-
-
合集.7z
2020-2-24 18:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2.62 MB, 下載次數: 116, 下載積分: 黑幣 -5
評分
-
查看全部評分
|