最新第二版看这里 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格斗手柄相关推荐

  1. 原装世嘉土星手柄(Sega Saturn)转USB小板,软硬件全开源

    上次用模块制作了一个SS手柄转USB的控制器, 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄_f78fk_liuyu的博客-CSDN博客_土星手柄接口 使用良好 ...

  2. ThinkPad X1 Tablet键盘改USB接口

    ThinkPad X1 Tablet键盘改USB接口记 起因 用USB独立键盘,打字的同时又要去用鼠标的感觉实在糟糕,就算是有一个好的机械键盘也是如此.能不能有一个像笔记本那样既有按键又有触摸板在下方 ...

  3. 世嘉土星和世嘉MD手柄定义,如何自制土星和MD手柄

    世嘉土星手柄定义,如何自制世嘉土星手柄 来源 Gamesx 土星手柄的控制板非常简单,两个74153芯片组合成一个定制的世嘉芯片,两条选择线用于轮询四组四个按钮,如果要制作自己的土星控制器,只需把两个 ...

  4. 世嘉土星模拟器GIRI GIRI Loader的使用教程

    本教程适用于世嘉土星模拟器GIRI GIRI和该模拟器的前端,里面引用了一些别人提供的资料,希望对大家有帮助... 1)世嘉土星的结构-- CPU:日立SH2 RISC 32BIT 28.6MHz C ...

  5. 世嘉土星系统memory mapping システムの使用するメモリのマッピングについて

    世嘉土星在设计的时候参考了linux,但由于导入工具链过程中发现,由于增加土星的MMU,内存地址管理器,会显著增加成本,且使用OS会导致技能performance的下降,所以自己通过链接器DLT方式, ...

  6. html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...

    Android版iPhone版PC版 Android版 winkawaks使用手版本:版 / 大小: 9.8MBhttp://30tqyb.com/zuixinban/1504480.html 查看详 ...

  7. ps2口键盘改usb计算机设置,轻松把PS2键盘、鼠标接口改造成USB接口

    马上注册,获取阅读精华内容及下载权限 您需要 登录 才可以下载或查看,没有帐号?注册 x 轻松把PS/2键盘.鼠标接口改造成USB接口 首先谈谈为什么要抛弃PS/2,很简单就是因为USB端口绝对的方便 ...

  8. ps2口键盘改usb计算机设置,PS2接口键盘、鼠标改为USB接口

    市面上有PS2toUSB的转接口卖,打开以后发现所谓的转接口就是PS2和USB针脚直接互联就能够用了!在实验以前要说一声,PS2接口键盘.鼠标改为USB接口会出现不能使用的状况(缘由是缺乏驱动),通常 ...

  9. 爆改YOLOV7的detect.py制作成API接口供其他python程序调用(超低延时)

    一.前言 YOLO系列框架凭借其超高的运行流畅度和不俗的准确率,一直被广泛地应用到各个领域. 刚刚推出不久的YOLOV7在5 FPS到160 FPS范围内的速度和精度达到了新的高度,并在GPU V10 ...

最新文章

  1. deno使用rust_如何在Deno和Oak中使用MySQL
  2. sklearn.inspection.permutation_importance 衡量特征重要性的方法比随机森林自带的rf.feature_importance 如何
  3. 如何正确实施人工智能
  4. 微信小程序把玩(十九)radio组件
  5. 教小学妹学算法:搜索算法解决迷宫问题
  6. javafx 和swing_集成JavaFX和Swing(修订版)
  7. 推荐程序员的求爱技巧
  8. POJ 2287 - Tian Ji -- The Horse Racing(贪心)
  9. dubbo 异步调用
  10. 【英语学习】【Daily English】U10 Education L03 She's planning to study abroad
  11. js html 拼接,JavaScript concat() 方法
  12. 如何在手机上使用TensorFlow
  13. C语言逐行读取文件内容
  14. 星巴克——最单纯的SNS应用
  15. Atitit atttilax创造的新概念与模式 xaas xaaK
  16. 服装行业电子商务的概述
  17. hadoop面试题(全)
  18. Jmeter HTTP Proxy Server 代理录制 IE无法录制到请求的问题解决
  19. 锂离子电池电压与容量的关系及容量计算方法
  20. 开源FPGA开发板-OpenICE 介绍及抽奖

热门文章

  1. 秋冬心血管疾病高发,牢记这几个身体异常症状!
  2. 对接环信踩坑记(环信客服+IMSDk即时通信)
  3. 吐槽大会 之博客园两个月使用体验
  4. 批处理文件rd \s\q **是什么意思?
  5. linux驱动程序的测试,Linux驱动学习笔记(4)字符设备驱动测试
  6. MATLAB计算二阶系统单位阶跃响应及在for循环中在图像加图例
  7. 东鹏饮料如何站稳千亿市值?
  8. layui之动态树形菜单
  9. 前端学习--Bable的使用步骤
  10. 云服务器如何共享文件夹,云服务器如何设置共享文件夹