一、整体步骤

  1. 使用STM32CubeMX 生成 HID 模版
  2. 自己定义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(&hUsbDeviceFS, (uint8_t *)&mouseHID, sizeof(struct mouseHID_t));

STM32-USB学习系列(四):USB-HID模拟鼠标功能相关推荐

  1. [jQuery学习系列四 ]4-Jquery学习四-事件操作

    [jQuery学习系列四 ]4-Jquery学习四-事件操作 前言: 今天看知乎偶然看到中国有哪些类似于TED的节目, 回答中的一些推荐我给记录下来了, 顺便也在这里贴一下: 一席 云集 听道 推酷 ...

  2. 嵌入式USB开发系列(1):USB简介

    嵌入式USB开发系列(1):USB简介 文章目录 嵌入式USB开发系列(1):USB简介 1. USB的优势 2. USB协议标准 3. USB通信接口 声明 声明:USB资料网站 链接,相关协议和文 ...

  3. Android 手机遥控器添加模拟鼠标功能

    手机遥控器要求有模拟鼠标功能,之前别人做的模拟鼠标是用service加上自己画的图标来实现的,不能像真正鼠标一样方便,而且实现比较难.网上查找资料发现可以通过UInput来实现这个功能. Uinput ...

  4. USB学习6---Linux Android USB软件架构设计

    下面学习针对高通平台的HS-USB(HS:high speed高速)堆栈(stack)软件架构设计和源代码布局的细节. Android HS-USB堆栈基于下面几点: Gadget driver fr ...

  5. Identity Server4学习系列四之用户名密码获得访问令牌

    1.简介 Identity Server4支持用户名密码模式,允许调用客户端使用用户名密码来获得访问Api资源(遵循Auth 2.0协议)的Access Token,MS可能考虑兼容老的系统,实现了这 ...

  6. USB入门系列之四 —— USB的线缆以及插头、插座

    USB是一个标准的协议,因此对线缆.插头.插座等有严格的规范要求.     在最初的标准里,USB接头有4条线:电源,D-,D+,地线.我们暂且把这样的 叫做标准的USB接头吧.后来OTG出现了,又增 ...

  7. 日志库EasyLogging++学习系列(5)—— 辅助配置功能

    正如前面<日志库EasyLogging++学习系列(3)-- 配置功能>文中最后提到的,在某些应用场景下,我们还需要通过其他的一些配置手段来辅助我们完成某些特殊功能,这些辅助配置手段包括设 ...

  8. STM8学习笔记----普通IO口模拟串口功能

    串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能. 要模拟串口首先要清楚串口数据传输过程中的原理. 常用的串口 ...

  9. usb gaghet hid 模拟鼠标键盘的绝对值描述

    调试模拟键盘鼠标花了我接近一周的时间,到处查找资料,结果东平西凑.靠上厕所的灵感,终于调通了, 主要注意的是绝对值坐标和相对坐标的表达不一样 最后在这里找到了答案,感谢21ic tanganrong ...

最新文章

  1. c语言 sysinfo_操作系统:内存分配(C语言 winapi)
  2. 【快速通关】Git快速上手gitee
  3. springboot health检查
  4. 执行 redis-dump 报错:ERROR (Errno::ENOENT): No such file or directory - ps -o rss= -p xxxxx
  5. NVIDIA开源了基于PyTorch的3D深度学习的综合库
  6. 设计字体打包_再也不用熬夜设计字体了!525款世界级绝美PS字体包免费送
  7. 服务器对操作系统有什么要求,服务器对操作系统有什么要求
  8. POJ 2425 A Chess Game(有向图SG函数)题解
  9. 敏捷开发绩效管理之三:个体动力之源——同行压力(松结对编程,师徒制度,跨职能团队,绩效考核)...
  10. 基于javaweb+springboot的在线购书系统网上书店图书商城(前台、后台)(java+Springboot+ssm+mysql+maven)
  11. 海思OSD开发系列(一) SDL_TTF框架移植
  12. 自建网易云音乐解锁代理
  13. python中oserror_[python] 解决OSError:
  14. 什么是光纤?光纤的原理是什么?你能想象没有光纤通讯的世界么?
  15. 当前的安全设置不允许从该位置下载文件。 的解决办法
  16. 超实用!教你用 Python 获取并下载美股数据
  17. Java开发内存16g够用不_讨论!现在的你是否还能用16G手机,内存还够不够用?...
  18. 【ESP8266】ESP8266的MQTT客户端搭建教程(基于NONS_SDK_v2.0)
  19. 3D游戏模型教程系列:3D max安装
  20. Java 中的Lock锁

热门文章

  1. 编写程序实现通过有道或百度翻译url对用户输入数据进行翻译_8亿用户AI有道:超强神经网络翻译技术大解密...
  2. arduino 1 读取电机编码器值
  3. html页面打印+区域,实现web网页指定区域打印的三种方法
  4. MySQL安装一直卡在starting server
  5. 自行车碟刹与V刹的区别以及优缺点
  6. 面试刷题LeetCode经典100道
  7. 手机免流开热点教程(ROOT版)
  8. 大多数人不知道的企业数据分析能力金字塔,你处在哪一级?
  9. TI DSP芯片SCI模块的波特率自适应
  10. springboot集成graphql(一)