簡單的NRF2401A單工通信學習筆記
PIAE GROUP 的CAN總線學習板除了讓我們這群菜鳥學習CAN總線外,還設計了與NRF2401無線模塊的接口電路。關于無線模塊,在做畢設的時候就接觸過,那時用的是浦城公司的PT2262/PT2276這樣一對無線編碼收發模塊,由于時間倉促,當時沒怎么玩,只是拿來和單片機做了下測試,最后并沒有和程序聯調,挺遺憾的,這下弄來NRF2401該好好玩玩了。
本文引用地址:http://www.104case.com/article/150976.htm當時PT2262的編碼原理還在Modelsim上仿真了,感覺PT2262的控制還是比較傻瓜型的,就是一個控制端,四個(六個)數據端,是并行傳輸的。當控制端置位后就把數據端的數據編碼發送到PT2272接收。PT2262有一個接收狀態端口接單片機的中斷口,這樣就可以響應并接收數據。而NRF2401的控制可不是這么簡單,它的學習最精髓的地方就是18個配置字的設置。通過這些配置字的設置,決定了NRF2401的工作方式,它與CPU的通信是SPI方式,也就是只要一個數據線和一個時鐘線就可以完成。另外,PT2262/2272是單工通信,而兩個NRF2401是可以互發數據的。
今天算是入了門,弄了個最簡單的實驗。上電后A節點數碼管顯示0,每按下一次中斷按鍵數碼管顯示加一,同時A節點不斷的發送數據到B節點。B節點在數碼管顯示接收到的數據。
先說說A節點發送部分的程序。主函數如下:
void main(void)
{
CPU_init(); //初始化CPU
NRF2401_init(); //初始化NRF2401A
while(1)
{
sending_data(); //RF發送數據
led_display(1,Send_data[0]); //發送數據顯示
}
}
先初始化單片機,主要是設置按鍵中斷口。然后是無線模塊NRF2401的初始化,這個初始化過程包括2401與單片機接口的初始化,還有就是命令字的配置,使2401工作在一個希望的狀態下。初始化后進入主循環,就是發送數據并且顯示發送的數據在數碼管上。發送數據部分是重點,其實也不復雜,只要控制相應的端口為發送模式,然后通過SPI協議往2401寫地址和數據就可以了。除此以外,因為有按鍵,所以還要有一個按鍵中斷的程序。
下面在說一下節點2接收部分的編程。先看主函數:
void main(void)
{
rx_data_buf[0]=0;
TxLED=1; //發射燈滅
RxLED=0; //接收燈亮,默認為接收模式,準備接收數據
NRF2401_init(); //初始化nRF2401A
while(1)
{
while(!DR1); //DR1是NRF2401的接收數據狀態標志位
// 0--沒有接收到數據,1--接收到數據,等待讀出
receive();
led_display(1,rx_data_buf[0]); //顯示接收數據
}
}
這個部分開始也是需要初始化,2401的初始化也是端口的初始化和命令字的配置。然后在主循環里要檢測是否接收數據狀態標志位置位了,如果沒有置位,則程序進入死循環,數碼管不會有顯示;如果置位了,則繼續執行接收數據程序,然后顯示接收的數據。接收數據程序receive()是重點,因為之前接收標志位已經置位了,所以它直接使用SPI方式把接收到的數據從2401讀出即可了。
仔細分析下,似乎并不難,其實動手前還是應該理清下思路,這樣不論對讀別人的程序還是對自己動手寫都是有好處的。
評論