秒秒钟学会STM32 USB HID复合设备开发,键盘、鼠标、游戏设备
本帖最后由 bigfanofloT 于 2017-5-31 12:27 编辑严 正 声 明:本文出自机智云开发者社区,转载请注明出处,http://club.gizwits.com/thread-4986-1-1.html
Copyright@2017 bigfanofloT
视频:
QQ飞车测试:
http://player.youku.com/player.php/sid/XMjUyOTY3NDkwOA==/v.swf
坦克世界测试:
http://player.youku.com/player.php/sid/XMjUyOTY5NTEyNA==/v.swf
硬件:带USB控制器的STM32都可以,我这里使用的是Nucleo-L476RG,芯片是STM32L476RG,支持USB2.0全速模式,其中
PA12---->USB_DP
PA11---->USB_DM
软件:使用STM32CubeMX配置
直接用USB线连接到电脑USB即可,按照USB规范,USB线里面的绿线为DP(D+),白线为DM(D-),全速设备是要在DP线加上拉1.5K电阻的,由于
USB HID设备数据格式,参考如下:
对于单个设备:
鼠标发送给PC的数据每次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表示左键按下;
BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量;
BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量 ;
BYTE4 -- 滚轮变化。
BYTE1的4-7全为0的时候,BYTE2 BYTE3的正负表示鼠标移动方向 。
键盘发送给PC的数据每次8个字节 :
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8
定义分别是:
BYTE1 --
|--bit0: Left Control是否按下,按下为1;
|--bit1: Left Shift是否按下,按下为1;
|--bit2: Left Alt 是否按下,按下为1;
|--bit3: Left GUI 是否按下,按下为1 ;
|--bit4: Right Control是否按下,按下为1 ;
|--bit5: Right Shift 是否按下,按下为1;
|--bit6: Right Alt 是否按下,按下为1;
|--bit7: Right GUI 是否按下,按下为1;
BYTE2 -- 暂不清楚,有的地方说是保留位 ;
BYTE3--BYTE8 -- 这六个为普通按键 ;
上个图吧:
fearless 发表于 2017-4-23 20:27
楼主成功发送鼠标和键盘的指令么?还是说只是电脑识别到了而已。求回复
看视频效果就知道了 希望是用的STM32L4的硬件I2C ,我在F1 2 4 7 L0 L1 上都用硬件I2C驱动了MPU6050 9150 等等,就差L4上面实现了 很不错啊 谢谢分享
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢 初学者来学习。 我要学USB 谢谢,先学习学习! 好贴 学习了 好东西,学习学习! xxxx谢谢谢谢谢谢 还是要了解一下usb的各个描述符 很棒:lol 作为年轻人,我要学习一个 真希望多些这样帖子:) 学习一下多个USB设备复合设备:) :loveliness::loveliness:学习来了。。。 Paderboy 发表于 2017-2-26 09:24
学习来了。。。
大神早:loveliness::loveliness: 酷酷酷酷酷酷酷酷 学习一下多个USB设备复合设备 厉害了我的哥 感谢分享