PS2无线遥控手柄与STM32单片机通信 : x8 K$ c( w1 V% M: a0 C; L
/ g+ S j, ?$ IPS2无线遥控手柄
! x1 v+ h9 V' L' e0 G& m* M/ {接下来要做一个小车玩玩,在网上淘了一个PS2无线遥控手柄,用于控制小车的前进、后退等功能。
7 N. P F' z. Z
$ h: K$ R* U y
8 t7 o8 K, B0 K4 d C实物图如下:$ a0 h$ e( ~! y9 v+ ?- I+ A
其中有两个PS2游戏摇杆,对应的驱动原理参见下文:
# `# d' p: A2 D+ u% |& R1 R: k) K" E6 h: J2 T4 N: G5 S: d8 V
' M9 Q4 e- @; I; d; c8 QPS2游戏摇杆原理及控制实现
8 E% P: G! c' z* }- M0 I# P5 u+ \ F1 F: g- ]
% B% j, m5 d, h
接收器
7 r* ?" G$ o% \9 `; |与这个手柄配套的还有一个接收器,用于接收PS2无线遥控手柄发送过来的数据
7 ^& e7 F9 K: B4 t7 m0 g M. _" n该接收器一共有六个引脚,分别定义如下:
! l3 y8 ]1 \# z0 N; H. }注意:
# X5 N4 e# K% a- O8 I7 {2 ?2 W* o, z
! P% L5 c3 N8 c+ O
当接收器上的绿灯常亮时,证明手柄和接收器配对成功,可以正常进行数据通讯。如果手柄和接收器断开了,按手柄上的START键即可恢复配对;5 [3 G* M! _; n9 T
# s. u B2 }0 G9 c) W+ \2 }1 i) o, ~7 Y5 E5 Y$ P( P
当手柄上的MODE指示灯没有点亮的时候,游戏摇杆四个方向输出按键键码值;当点击MODE按键后,手柄上的MODE指示灯变亮(红色),此时游戏摇杆四个方向输出AD值。
5 A% y" V' ~ r' P1 U
$ q7 V! _4 b; D( @( E8 T& x6 Y. x5 ~' T
硬件连接% |0 W) D. e4 U, [- F1 d; P! |: _9 `
5 k8 |. U. M1 J% a2 y" A; j! a接收器与STM32连接如下:
; D8 Y' x) }0 Z0 R5 @: q, o“注: 使用杜邦线直接与核心板相连即可,这里为了拍照查看方便,选用智能风扇的那个底板与接收器相连。
# s. n" |" ^; e0 ~3 r0 a) e, K+ x1 l程序移植 因为这个手柄通讯协议在手册中写的不详细,咱们就不分析协议部分了,我将商家提供的驱动文件放到了咱们的工程目录中,具体位置如下所示:8 h5 A9 |9 x; I# m
添加驱动文件) N: E7 `, \* B5 P( y
添加工程包含路径
' O4 _+ [% T4 x, P添加pstwo.c文件
# R8 J3 s; M b" [2 c8 F4 V# \修改宏定义* R6 m. @2 L) j* Z' ?
修改GPIO初始化代码3 f7 p. ?2 l6 c( k H# o
上面的宏定义和GPIO的初始化代码要跟实际相连的GPIO一致。
( i9 c- v, C# ?8 W. H
, c# E1 m4 J6 D. ^. X8 B0 _3 _/ U# N0 I
main.c文件直接使用即可,不用修改了。
+ w8 Q1 U. i& _1 f- ~3 E3 a3 i, R
( T6 c' S' s8 P0 N4 G7 p. x/ O6 u5 ]* O5 N1 H* t+ n. ?+ ^
结果展示
$ \+ D+ Y3 H1 O" G$ j测试出了所有按键的键码值,留着备用:3 L# E* ^8 U- w: F
; ~, B% M0 S) v: D" A% E只需要占用4个GPIO口即可实现16个按键的扩展,而且具有无线功能,作为小车的遥控器太适合了。
4 S& X0 N; n( ]7 P, @
! v+ ?% h% P- b3 f; O' T& i: O' G |