单片机学习小组
登录
直播中
刘丽菲
7年用户
938经验值
私信
关注
如何使用USB-HID模拟鼠标功能来控制鼠标的移动?
开启该帖子的消息推送
HID
STM32
鼠标
如何使用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));
一、整体步骤
使用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));
举报
更多回帖
rotate(-90deg);
回复
相关问答
HID
STM32
鼠标
求一个串口转
USB
HID
键盘
鼠标
方案
2022-07-08
950
求用单片机
模拟
键盘
鼠标的
功能
2013-09-04
2327
求用单片机
模拟
键盘
鼠标的
功能
2013-09-04
3399
计算机不能识别PIC是
鼠标
2019-09-27
1046
CH573
模拟
USB
鼠标
如何
控制
屏幕指针的绝对坐标?
2022-08-25
553
请问资料里的PS2
鼠标
实验能用不?
2019-07-11
1285
请问ch9329
USB
鼠标
怎么实现拖拽文件
功能
呢?
2022-10-11
406
用AT89C52+CH375做主机读
鼠标
,如何得到
鼠标的
数据?
2022-06-30
649
鼠标的
动作原理是什么?
2023-11-07
259
请问CH552G可以同时
模拟
CH341和
鼠标
设备吗?
2022-06-08
1467
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分