接下來要做一個小車玩玩,在網上淘了一個PS2無線遙控手柄,用于控制小車的前進、后退等功能。
實物圖如下:
其中有兩個PS2游戲搖桿,對應的驅動原理參見下文:
PS2游戲搖桿原理及控制實現
與這個手柄配套的還有一個接收器,用于接收PS2無線遙控手柄發送過來的數據
該接收器一共有六個引腳,分別定義如下:
| 引腳 | 功能描述 |
|---|---|
| GND | 電源地 |
| VCC | 接收器工作電源,電源范圍3~5V |
| DI/DAT | 信號流向:從手柄到主機,此信號是一個8bit的串行數據,同步傳送于時鐘的下降沿,即信號的讀取在時鐘由高變低的變化過程中完成。 |
| DO/CMD | 信號流向:從主機到手柄,此信號和DI相對,信號是一個8bit的串行數據,同步傳送于時鐘的下降沿。 |
| CS/SEL | 用于提供手柄觸發信號。在通訊期間,處于低電平。 |
| CLK | 時鐘信號,由主機(STM32)發出,用于保持數據同步。 |
注意:
當接收器上的綠燈常亮時,證明手柄和接收器配對成功,可以正常進行數據通訊。如果手柄和接收器斷開了,按手柄上的START鍵即可恢復配對;
當手柄上的MODE指示燈沒有點亮的時候,游戲搖桿四個方向輸出按鍵鍵碼值;當點擊MODE按鍵后,手柄上的MODE指示燈變亮(紅色),此時游戲搖桿四個方向輸出AD值。
接收器與STM32連接如下:
| 接收器端 | STM32端 |
|---|---|
| GND | GND |
| VCC | 3V3 |
| DI/DAT | PB12 |
| DO/CMD | PB13 |
| CS/SEL | PB14 |
| CLK | PB15 |
“注: 使用杜邦線直接與核心板相連即可,這里為了拍照查看方便,選用智能風扇的那個底板與接收器相連。
因為這個手柄通訊協議在手冊中寫的不詳細,咱們就不分析協議部分了,我將商家提供的驅動文件放到了咱們的工程目錄中,具體位置如下所示:
pstwo.c文件
上面的宏定義和GPIO的初始化代碼要跟實際相連的GPIO一致。
main.c文件直接使用即可,不用修改了。
測試出了所有按鍵的鍵碼值,留著備用:
只需要占用4個GPIO口即可實現16個按鍵的擴展,而且具有無線功能,作為小車的遙控器太適合了。
本實例使用的主芯片是:STM32F103RET6,開發環境為 Keil 5 。
本實例的完整工程及模塊店家提供的資料,在本文留言區置頂消息處獲得。
今天開始正式回歸STM32,鴻蒙先告一段落。
大家想要在小車上增添什么功能,在留言區留言給我,你留言,我來安排!