原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄
最新第二版看这里 https://blog.csdn.net/u010438192/article/details/103528287
某鱼102元购入原装土星日产手柄(二手)
原装为9针接口,为了在电脑上玩热血格斗,连技用,要求速度快,所以改了USB,USB上报率达到了HID最快1000HZ
丝毫感觉不出任何延时。
准备硬件:
土星原装手柄一个
带USB的STM32核心板一块,作者选的(STM32F407VET6)
核心板作者买的下图这种:
5V转3.3V LDO一片 ,电解电容2片 或者直接买AMS1117-3.3模块
1.5K电阻一个
USB线一条(0.5米-1米)
硬件连接见下图
SS手柄接口定义如下图,作者是剪掉了插头,然后万用表找出每根线,直接焊接到STM32核心板上
https://gamesx.com/controldata/saturn.htm (ss手柄引脚定义)
pin1和pin6 实际是通的,用万用表量过,这两根线其中有一根供电就OK,作者是两根都供了5V
SS手柄按键读取:
整个手柄13个按键需要4个周期读取。
第1个周期 选择线 S0 S1 分别置位 0 0 可以读取出 Z Y X R的状态
第2个周期 选择线 S0 S1 分别置位1 0 可以读取出 B C A St的状态
第3个周期 选择线 S0 S1 分别置位 0 1 可以读取出 Up Dn Lt Rt的状态
第4个周期 选择线 S0 S1 分别置位 1 1 可以读取出 L的状态
作者测试,每个周期之间必须延时50us以上才可以,要不然会时许错乱,导致读出错误的值。
代码实现如下:
uint8_t key_Z,key_Y,key_X,key_R;
uint8_t key_B,key_C,key_A,key_St;
uint8_t key_Up,key_Dn,key_Lt,key_Rt;
uint8_t key_L;#define SCAN_DELAY_TIME 50 //usvoid scan_saturn(void)
{//s0 s1 0 0HAL_GPIO_WritePin(GPIOD,S0_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,S1_Pin,GPIO_PIN_RESET);delay_us(SCAN_DELAY_TIME);key_Z = HAL_GPIO_ReadPin(GPIOD,D0_Pin);key_Y = HAL_GPIO_ReadPin(GPIOD,D1_Pin);key_X = HAL_GPIO_ReadPin(GPIOD,D2_Pin);key_R = HAL_GPIO_ReadPin(GPIOD,D3_Pin);//s0 s1 1 0HAL_GPIO_WritePin(GPIOD,S0_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,S1_Pin,GPIO_PIN_RESET);delay_us(SCAN_DELAY_TIME);key_B = HAL_GPIO_ReadPin(GPIOD,D0_Pin);key_C = HAL_GPIO_ReadPin(GPIOD,D1_Pin);key_A = HAL_GPIO_ReadPin(GPIOD,D2_Pin);key_St = HAL_GPIO_ReadPin(GPIOD,D3_Pin);//s0 s1 0 1HAL_GPIO_WritePin(GPIOD,S0_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,S1_Pin,GPIO_PIN_SET);delay_us(SCAN_DELAY_TIME);key_Up = HAL_GPIO_ReadPin(GPIOD,D0_Pin);key_Dn = HAL_GPIO_ReadPin(GPIOD,D1_Pin);key_Lt = HAL_GPIO_ReadPin(GPIOD,D2_Pin);key_Rt = HAL_GPIO_ReadPin(GPIOD,D3_Pin);//s0 s1 1 1HAL_GPIO_WritePin(GPIOD,S0_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,S1_Pin,GPIO_PIN_SET);delay_us(SCAN_DELAY_TIME);key_L = HAL_GPIO_ReadPin(GPIOD,D3_Pin); }
HID相关代码由STM32 CUBE生成,然后改
#define HID_FS_BINTERVAL 0x00U //改为00
usbd_hid.c 枚举成游戏控制器,按键13个 (这项工作由作者的朋友帮忙完成,在这里感谢他)。
最终枚举成功后发现,把SS的数据发给USB
电脑开着机插USB 可以正常枚举成功,但是只要电脑关机后,插USB 再开机,
会出现枚举失败的情况,所以每次电脑开机必须手动插拔一下才可以。
无奈代码里做了判断,如果发现枚举失败,就把D+ 拉低一段时间以模拟手动插拔一下。
最终完美解决,和XBOX ONES PS4手柄比起来,还是喜欢用这个SS手柄玩热血格斗。
完整代码如下:
https://download.csdn.net/download/u010438192/11961661
https://github.com/liuyuf78fk/Sega-Saturn-Contro-TO-USB
原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄相关推荐
- 原装世嘉土星手柄(Sega Saturn)转USB小板,软硬件全开源
上次用模块制作了一个SS手柄转USB的控制器, 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄_f78fk_liuyu的博客-CSDN博客_土星手柄接口 使用良好 ...
- ThinkPad X1 Tablet键盘改USB接口
ThinkPad X1 Tablet键盘改USB接口记 起因 用USB独立键盘,打字的同时又要去用鼠标的感觉实在糟糕,就算是有一个好的机械键盘也是如此.能不能有一个像笔记本那样既有按键又有触摸板在下方 ...
- 世嘉土星和世嘉MD手柄定义,如何自制土星和MD手柄
世嘉土星手柄定义,如何自制世嘉土星手柄 来源 Gamesx 土星手柄的控制板非常简单,两个74153芯片组合成一个定制的世嘉芯片,两条选择线用于轮询四组四个按钮,如果要制作自己的土星控制器,只需把两个 ...
- 世嘉土星模拟器GIRI GIRI Loader的使用教程
本教程适用于世嘉土星模拟器GIRI GIRI和该模拟器的前端,里面引用了一些别人提供的资料,希望对大家有帮助... 1)世嘉土星的结构-- CPU:日立SH2 RISC 32BIT 28.6MHz C ...
- 世嘉土星系统memory mapping システムの使用するメモリのマッピングについて
世嘉土星在设计的时候参考了linux,但由于导入工具链过程中发现,由于增加土星的MMU,内存地址管理器,会显著增加成本,且使用OS会导致技能performance的下降,所以自己通过链接器DLT方式, ...
- html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...
Android版iPhone版PC版 Android版 winkawaks使用手版本:版 / 大小: 9.8MBhttp://30tqyb.com/zuixinban/1504480.html 查看详 ...
- ps2口键盘改usb计算机设置,轻松把PS2键盘、鼠标接口改造成USB接口
马上注册,获取阅读精华内容及下载权限 您需要 登录 才可以下载或查看,没有帐号?注册 x 轻松把PS/2键盘.鼠标接口改造成USB接口 首先谈谈为什么要抛弃PS/2,很简单就是因为USB端口绝对的方便 ...
- ps2口键盘改usb计算机设置,PS2接口键盘、鼠标改为USB接口
市面上有PS2toUSB的转接口卖,打开以后发现所谓的转接口就是PS2和USB针脚直接互联就能够用了!在实验以前要说一声,PS2接口键盘.鼠标改为USB接口会出现不能使用的状况(缘由是缺乏驱动),通常 ...
- 爆改YOLOV7的detect.py制作成API接口供其他python程序调用(超低延时)
一.前言 YOLO系列框架凭借其超高的运行流畅度和不俗的准确率,一直被广泛地应用到各个领域. 刚刚推出不久的YOLOV7在5 FPS到160 FPS范围内的速度和精度达到了新的高度,并在GPU V10 ...
最新文章
- deno使用rust_如何在Deno和Oak中使用MySQL
- sklearn.inspection.permutation_importance 衡量特征重要性的方法比随机森林自带的rf.feature_importance 如何
- 如何正确实施人工智能
- 微信小程序把玩(十九)radio组件
- 教小学妹学算法:搜索算法解决迷宫问题
- javafx 和swing_集成JavaFX和Swing(修订版)
- 推荐程序员的求爱技巧
- POJ 2287 - Tian Ji -- The Horse Racing(贪心)
- dubbo 异步调用
- 【英语学习】【Daily English】U10 Education L03 She's planning to study abroad
- js html 拼接,JavaScript concat() 方法
- 如何在手机上使用TensorFlow
- C语言逐行读取文件内容
- 星巴克——最单纯的SNS应用
- Atitit atttilax创造的新概念与模式 xaas xaaK
- 服装行业电子商务的概述
- hadoop面试题(全)
- Jmeter HTTP Proxy Server 代理录制 IE无法录制到请求的问题解决
- 锂离子电池电压与容量的关系及容量计算方法
- 开源FPGA开发板-OpenICE 介绍及抽奖