IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32中使用PS2手柄 -> 正文阅读

[嵌入式]STM32中使用PS2手柄

目录

一、硬件介绍

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

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:52:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 17:46:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码