目录
一、硬件介绍
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(); //完成并保存配置
}
三、测试