对于我这么一个用CubeMX懒得编驱动的新手,这两天搞PS2手柄实在是想。。。。
所以直接出一个硬件SPI+Data解析的文,方便大家直接使用!!!!!!
PS2 由手柄与接收器两部分组成,手柄主要负责发送按键信息。接通电源并打开手柄开关时,手柄与接收器自动配对连接,在未配对成功的状态下,接收器绿灯闪烁,手柄上的灯也会闪烁,配对成功后,接收器上绿灯常亮,手柄上灯也常亮,这时可以按“MODE”键,选择手柄发送模式。
红灯模式:遥杆输出模拟值; 绿灯模式:遥杆对应上面四个按键,只有四个极限方向对应。接收器和主机(单片机)相连,实现主机与手柄之间的通讯。当主机想读手柄数据时,将会拉低 CS 线电平,并发出一个命令“0x01”;手柄会回复它的 ID“0x41=模拟绿灯,0x73=模拟红灯”;在手柄发送 ID 的同时,主机将传送 0x42,请求数据;随后手柄发送出 0x5A,告诉主机“数据来了”。数据格式及意义如图
那么!直接开始
CubeMX配置(开时钟、生成工程什么简单的就不说了)
如上图,打开任意SPI即可,配置严格遵循上图,可能你会发现你的Baud Rate不是250KBit/s,这就需要你调整你的时钟频率,试凑法给调到250KBit/s!这很重要!!!!
接下来就是接收器接线了,VCC/GND就不说了,额外的是,你需要一个输出引脚来连接接收器的CS引脚,我这里用的PA4(你随意)
(额外的)PA4>>CS、SCK>>CLK、MISO>>DAT、MOSI>>CMD,不要连错哦!!!
上代码:
ps2.h
#ifndef PS2_PS2_H_
#define PS2_PS2_H_
#include "main.h"
#include "delay.h"
/*
硬件spi
*/
typedef struct
{
uint8_t A_D; //模拟(红灯)为1 数字(无灯)为0
int8_t