单片机学习小组
直播中

刘丽菲

7年用户 938经验值
私信 关注

如何使用USB-HID模拟鼠标功能来控制鼠标的移动?

如何使用USB-HID模拟鼠标功能来控制鼠标的移动?

回帖(1)

张雯雯

2022-2-22 09:51:29
一、整体步骤




  • 使用STM32CubeMX 生成 HID 模版
  • 自己定义mouseHID 结构体,然后通过发送鼠标报文控制鼠标的移动


二、STM32CubeMX 配置


芯片:STM32F407VG













  • 使用USB的时候,STM32的堆空间需要设置大一点






  • 建议:将选择对应的外设生成C文件




三、USB HID报文相关内容


1、鼠标报文


鼠标发送给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 -- 滚轮变化。

2、键盘报文


键盘发送给PC的数据每次8个字节
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8
定义分别是:

BYTE0 --(0 = OFF,1 = ON,CONSTANT为保留位)
       |--bit0:   NUM LOCK
       |--bit1:   CAPS LOCK
       |--bit2:   SCROLL LOCK
       |--bit3:   COMPOSE
       |--bit4:   KANA
       |--bit5:   CONSTANT
       |--bit6:   CONSTANT  
       |--bit7:   CONSTANT
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 -- 这六个为普通按键

3、对应的鼠标报文结构体以及鼠标报文的使用


/* 鼠标报文结构体 */
struct mouseHID_t {
      uint8_t buttons;
      int8_t x;
      int8_t y;
      int8_t wheel;
  };

/* 发送鼠标报文(一直发送该报文,鼠标会水平向右移动) */
  struct mouseHID_t mouseHID;
  mouseHID.buttons = 0;
  mouseHID.x = 10;
  mouseHID.y = 0;
  mouseHID.wheel = 0;
  USBD_HID_SendReport(&hU***DeviceFS, (uint8_t *)&mouseHID, sizeof(struct mouseHID_t));

举报

更多回帖

发帖
×
20
完善资料,
赚取积分