PS2无线遥控手柄与STM32单片机通信

服务器 芯片
当手柄上的MODE指示灯没有点亮的时候,游戏摇杆四个方向输出按键键码值;当点击MODE按键后,手柄上的MODE指示灯变亮(红色),此时游戏摇杆四个方向输出AD值。

[[355426]]

PS2无线遥控手柄

接下来要做一个小车玩玩,在网上淘了一个PS2无线遥控手柄,用于控制小车的前进、后退等功能。

 

实物图如下:

 

其中有两个PS2游戏摇杆,对应的驱动原理参见下文:

接收器

与这个手柄配套的还有一个接收器,用于接收PS2无线遥控手柄发送过来的数据

 

该接收器一共有六个引脚,分别定义如下:

引脚 功能描述
GND 电源地
VCC 接收器工作电源,电源范围3~5V
DI/DAT 信号流向:从手柄到主机,此信号是一个8bit的串行数据,同步传送于时钟的下降沿,即信号的读取在时钟由高变低的变化过程中完成。
DO/CMD 信号流向:从主机到手柄,此信号和DI相对,信号是一个8bit的串行数据,同步传送于时钟的下降沿。
CS/SEL 用于提供手柄触发信号。在通讯期间,处于低电平。
CLK 时钟信号,由主机(STM32)发出,用于保持数据同步。

注意:

  1. 当接收器上的绿灯常亮时,证明手柄和接收器配对成功,可以正常进行数据通讯。如果手柄和接收器断开了,按手柄上的START键即可恢复配对;
  2. 当手柄上的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的初始化代码要跟实际相连的GPIO一致。

main.c文件直接使用即可,不用修改了。

结果展示

测试出了所有按键的键码值,留着备用:

 

 

 

 

 

只需要占用4个GPIO口即可实现16个按键的扩展,而且具有无线功能,作为小车的遥控器太适合了。

本文转载自微信公众号「嵌入式从0到1」,可以通过以下二维码关注。转载本文请联系嵌入式从0到1公众号。

 

责任编辑:武晓燕 来源: 嵌入式从0到1
相关推荐

2020-01-10 22:51:30

硬件软件人生第一份工作

2009-04-11 15:12:24

2012-05-10 09:10:46

LinuxPS

2021-12-26 18:30:56

嵌入式ARM链接

2021-07-08 09:15:20

单片机编程状态机编程语言

2021-07-05 08:04:46

Linux运行地址

2021-10-28 08:51:53

GPIO软件框架 Linux

2021-05-06 08:54:39

串口DMASTM32

2021-05-20 07:26:22

DMASTM32数据

2021-10-14 15:48:28

鸿蒙HarmonyOS应用

2021-02-05 08:41:44

STM32网络中断

2021-01-20 09:51:25

STM32网络接口

2021-08-26 06:29:47

STM32DWT数据观察点触发

2021-03-06 21:21:11

STM32单片机追踪库

2021-06-22 10:02:07

单片机语言代码

2013-01-04 10:31:32

单片机网络交换机

2022-10-10 08:24:15

编程数据逻辑语句

2021-12-22 06:56:07

STM32C语言内存

2010-09-08 15:18:54

单片机TCP IP协议栈

2010-06-19 14:10:35

TCP IP协议栈
点赞
收藏

51CTO技术栈公众号