文号
t72746
阅读
9863
回复
2
收藏
3
STM32制作的摇杆手标(情怀)
2015/07/20
IP:澳大利亚
IMG_6709.jpg
图片镇楼 目前楼主正在用这个东西打坦克世界
因为这个手标没右键 所以有点蛋疼 目前还木有干掉过敌人orz

STM32做HID(人机交互设备)非常方便,自带USB口,还有官方的按键鼠标历程
本程序就是通过修改官方例子而来,删除了无用代码,极其精简

这是电路图,配上STM32最小系统板使用即可
circuit.png
摇杆输出的是模拟电压,因此用到了ADC功能,ADC配置一下就直接用了,并没有用到DMA,因为采样速度不需要辣么高,采样多次之后去掉第一次和最后一次结果再求平均,求平均的时候没用除法而用了位移,因为位移效率比除法高多了,而且位移3位相当于除了2的3次方也就是8

程序在单片机内设初始化之后会检测下ADC_Channel_7,也就是摇杆可能输出的最大电压
ADC_Channel_8和9用于检测垂直和水平方向上的摇杆位移,然后编码发送到USB总线上去

手标的USB HID设备在枚举之后基本只需要定时给主机发送4个字节的数据即可
BYTE1 BYTE2 BYTE3 BYTE4
BYTE1:
       |--bit7:   1   表示   Y   坐标的变化量超出-256   ~   255的范围,0表示没有溢出
       |--bit6:   1   表示   X   坐标的变化量超出-256   ~   255的范围,0表示没有溢出
       |--bit5:   Y   坐标变化的符号位,1表示负数,即鼠标向下移动
       |--bit4:   X   坐标变化的符号位,1表示负数,即鼠标向左移动
       |--bit3:     恒为1
       |--bit2:     1表示中键按下
       |--bit1:     1表示右键按下
       |--bit0:     1表示左键按下

有用的就是最后3个bit 其他的木有用
BYTE2 BYTE3分别是X和Y方向的移动速度,中间值为128(0x80), 1-127为左移动, 129-255为向右移动,值得注意的是0的时候也不移动,而且BYTE1的bit5 bit4没用的感觉?
BYTE4素鼠标滚轮 并木有用到


attachment icon JoyStickMouse.rar 2.57MB RAR 139次下载

程序代码:
参考资料
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
11年5个月前IP:广东
780245
1楼
用情怀打osu略素昂
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的