# ps2_handle_lib **Repository Path**: Vaine0/ps2_handle_lib ## Basic Information - **Project Name**: ps2_handle_lib - **Description**: No description available - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-11 - **Last Updated**: 2021-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ps2手柄V2.0 ## 一、前言 目前版本只在stm32f407及stm32f103上使用, 若使用103则需要更改.h文件中的时钟频率 ## 二、配置说明 目前共有两种实现,一种使用GPIO口模拟spi通信,非常灵活,随便四个IO口即可使用;另一种使用HAL库spi函数,可能有更高的稳定性。 ### 1. GPIO版 1. 配置引脚 - 随便四个io口(大概); - Maximum output speed 设为 High; - User label 一定要设置好; ![引脚配置](imgs/IO_config.png) - 接线:DAT->DI; CMD->DO; CS->CS; CLK->CLK; VCC->5V; 到这里应该就可以用了。。。 ### 2. HAL库版 1. 配置引脚 - 使用软件spi,分别配置spi1的MI、MO、CLK引脚。并设置spi参数。(波特率要低一点) ![引脚配置](imgs/spi_config.png) - 配置片选引脚,输出速度设为High,user label要写对。 ![片选引脚配置](imgs/spi_cs_config.png) - 接线:DAT->MI; CMD->MO; CS->CS; CLK->CLK; VCC->5V; 配置完成。 ## 三、调用说明 具体通信协议可见[PS2解码通讯手册](/PS2解码通讯手册.pdf) 1. void PS2_Init(void); 直接在其它初始化之后调用即可,如果有需要也可进行重新设置。 - config[3]: 0x00代表绿灯模式,此时摇杆和按键作用相同,摇杆按自带按键无用;0x01代表红灯模式,此时手柄为正常模式。 - config[4]: 0x03为不可更改模式,此时不可通过手柄MODE键更改红绿灯模式;0xEE为可更改模式。 - vibration_on[]: 需要开启震动时使用。 2. uint8_t PS2_RedLight(void); - 检查当前手柄模式,返回0为红灯模式;返回1为绿灯模式或连接失败。 3. uint8_t PS2_DataKey(void); - 返回0表示无按键按下,否则返回键值; - 键值对应表在ps2_handle.h中 ```c // These are our button constants #define PSB_SELECT 1 #define PSB_L3 2 #define PSB_R3 3 #define PSB_START 4 #define PSB_PAD_UP 5 #define PSB_PAD_RIGHT 6 #define PSB_PAD_DOWN 7 #define PSB_PAD_LEFT 8 #define PSB_L2 9 #define PSB_R2 10 #define PSB_L1 11 #define PSB_R1 12 #define PSB_GREEN 13 #define PSB_RED 14 #define PSB_BLUE 15 #define PSB_PINK 16 #define PSB_TRIANGLE 13 #define PSB_CIRCLE 14 #define PSB_CROSS 15 #define PSB_SQUARE 16 ``` 4. uint8_t PS2_AnologData(uint8_t button); - 返回模拟值 ```c // These are stick values #define PSS_RX 5 #define PSS_RY 6 #define PSS_LX 7 #define PSS_LY 8 ``` 5. void PS2_Vibration(uint8_t motor1, uint8_t motor2); - 震动后必须加延时(>100ms); - motor1: right motor, 0x00->OFF, else->ON; - motor2: left motor, 0x40 < motor2 < 0xFF;