接下来要做一个小车玩玩,在网上淘了一个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,鸿蒙先告一段落。
大家想要在小车上增添什么功能,在留言区留言给我,你留言,我来安排!