STM32中使用PS2手柄

发布时间:2025-12-09 17:18:45 浏览次数:4

目录

一、硬件介绍

1、PS2手柄

2、PS2和STM32单片机控制板连接

 二、程序设计

1、遥控手柄按键ID识别和命名

 2、创建STM32程序工程

(1)工程创建

 (2)Main程序

(3)PS2_Init()

(4)PS2_SetInit()

三、测试

四、工程下载连接


一、硬件介绍

1、PS2手柄

PS2无线手柄为2.4GHz无线通讯。常规的PS手柄如下,分为手柄和接收器

接收器的引进信号分布和说明如下:

 该接收器的引脚可以使用杜邦线直接跟单片机,不过使用杜邦线插拔不方便,建议使用成品的接收器。

2、PS2和STM32单片机控制板连接

 

PS2接收器和单片机引脚连接

 二、程序设计

1、遥控手柄按键ID识别和命名

(1)绿色字体为ID识别号

(2)红色字体为按键在程序中变量命名

(3)X和Y为的坐标系为单个摇杆的位置坐标系,摇杆在中间位置(静止无操作)坐标值为(128,128)

 2、创建STM32程序工程

(1)工程创建

使用STM32读取MPU6050陀螺仪_Big_潘大师的博客-CSDN博客的工程,继续接下来的PS2工作。

在APP中添加PS2用户程序(网上直接找到的或者淘宝商家也提供测试)

ps2.h代码

 (2)Main程序

#include "system.h"#include "SysTick.h"#include "SysDelay.h"#include "led.h"#include "i2c.h"#include "mpu6050.h"#include "usart.h"#include "ps2.h"int PS2_LX,PS2_LY,PS2_RX,PS2_RY,PS2_KEY;int main(){u8 count=0;u16 i=0;SystemInit(); //系统初始化SysDelay_Init(72);//自定义延时函数初始化LED_Init();USART1_Config();//串口1初始化,上位机USART3_Config();//串口3初始化-接蓝牙i2cInit();//IIC初始化SysDelay_ms(10);//10毫秒延时MPU6050_Init(); //MPU6050 DMP陀螺仪初始化PS2_Init();//PS2驱动端口初始化PS2_SetInit(); //ps2配置初始化,配置“红绿灯模式”,并选择是否可以修改PS2_KEY=0;delay_ms(1000);while(1){/*LED灯闪烁*/if(i%500==0){led1=!led1;}//2毫秒执行一次——串口打印if(i%2000==0){count++;printf("count:%d \r\n",count);printf("Pitch: %.2f ,Roll: %.2f,Yaw: %.2f \r\n",Pitch,Roll,Yaw);//Pitch,Roll,Yaw数据传到串口printf("PS2按键:%d \r\n",PS2_KEY); //打印按键的值printf("PS2左边x轴:%d \r\n",PS2_LX); //打印左边X轴的值printf("PS2左边y轴:%d \r\n",PS2_LY); //打印左边y轴的值printf("PS2右边x轴:%d \r\n",PS2_RX); //打印右边X轴的值printf("PS2右边y轴:%d \r\n",PS2_RY); //打印右边y轴的值}//20毫秒执行一次if(i%20==0){//获取摇杆数值PS2_LX=PS2_AnologData(PSS_LX); PS2_LY=PS2_AnologData(PSS_LY);PS2_RX=PS2_AnologData(PSS_RX);PS2_RY=PS2_AnologData(PSS_RY);//获取按键值PS2_KEY=PS2_DataKey();}/*获取MPU6050角度状态*///在串口数据发送之后MPU6050_Pose();//Pitch翻滚,Roll俯仰,Yaw偏航SysDelay_ms(1);//1毫秒延时i++;}}

(3)PS2_Init()

手柄引脚初始化

void PS2_Init(void){RCC->APB2ENR|=1<<2; //使能PORTA时钟GPIOA->CRL&=0XFFFF000F; //PA1 2 3推挽输出 GPIOA->CRL|=0X00003330; GPIOA->CRL&=0XFFFFFFF0; GPIOA->CRL|=0X00000008; //PA0 设置成输入,默认下拉 }

(4)PS2_SetInit()

手柄配置初始化

void PS2_SetInit(void){PS2_ShortPoll();PS2_ShortPoll();PS2_ShortPoll();PS2_EnterConfing();//进入配置模式PS2_TurnOnAnalogMode(); //红绿灯配置模式,并选择是否保存//PS2_VibrationMode(); //开启震动模式PS2_ExitConfing(); //完成并保存配置}

三、测试

 

四、工程下载连接

https://download.csdn.net/download/panjinliang066333/86758071

 

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477