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