当前位置: 首页 > news >正文

STM32F103 CubeMX 使用USB生成键盘设备

STM32F103 CubeMX 使用USB生成键盘设备

  • 基础信息
    • HID8个数组各自的功能
  • 生成代码
  • 代码编写
    • 添加申明信息
    • main 函数编写
    • HID 修改
      • 1. 修改报文描述符
      • 2 修改 "usbd_hid.h" 中的申明文件

基础信息

软件版本:
stm32cubmx:6.2
keil 5

硬件:
stm32F103C8T6最小系统板,如下图所示的最简原理图
在这里插入图片描述

HID8个数组各自的功能

在这里插入图片描述
在这里插入图片描述

生成代码

配置信息的时候,主要配置了外部时钟,debug口,USB这三个。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码编写

添加申明信息

这部分第一个是因为要调用“usbd_hid”中的函数所以引用
另外也需要使用到usb是这个数据

/* USER CODE BEGIN Includes */
# include "usbd_hid.h"extern USBD_HandleTypeDef hUsbDeviceFS;/* USER CODE END Includes */

main 函数编写

这里调用函数:USBD_HID_SendReport,发送数据给电脑。
需要注意的是,如果按键松开了,则需要将按键松开的信息发送过去。否则的话会默认按键一直按下。从而产生多余的信息。


int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USB_DEVICE_Init();uint8_t HID_Buffer[8] = {0};uint8_t HID_Buffer_clean[8] = {0};while (1){HID_Buffer[2] = 0x04;HID_Buffer[3] = 0x05;HID_Buffer[4] = 0x06;HID_Buffer[5] = 0x1C;HID_Buffer[7] = 0x1D;USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, sizeof(HID_Buffer));HAL_Delay(20);USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer_clean, sizeof(HID_Buffer_clean));HAL_Delay(1000);}
}

HID 修改

1. 修改报文描述符

下载 HID Descriptor Tool (DT) HID描述符工具:
官网下载:https://usb.org/sites/default/files/documents/dt2_4.zip
百度网盘:https://pan.baidu.com/s/1ayjdQtc7e9NWwYJqdp0pXA?pwd=4ghb 提取码:4ghb

/*修改usbd_hid.c中的报告设备描述符*/
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{0x05, 0x01, // USAGE_PAGE (Generic Desktop) //630x09, 0x06, // USAGE (Keyboard)0xa1, 0x01, // COLLECTION (Application)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x08, // REPORT_COUNT (8)0x81, 0x02, // INPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x08, // REPORT_SIZE (8)0x81, 0x03, // INPUT (Cnst,Var,Abs)0x95, 0x05, // REPORT_COUNT (5)0x75, 0x01, // REPORT_SIZE (1)0x05, 0x08, // USAGE_PAGE (LEDs)0x19, 0x01, // USAGE_MINIMUM (Num Lock)0x29, 0x05, // USAGE_MAXIMUM (Kana)0x91, 0x02, // OUTPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x03, // REPORT_SIZE (3)0x91, 0x03, // OUTPUT (Cnst,Var,Abs)0x95, 0x06, // REPORT_COUNT (6)0x75, 0x08, // REPORT_SIZE (8)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x65, // LOGICAL_MAXIMUM (101)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)0x81, 0x00, // INPUT (Data,Ary,Abs)0xc0,       // END_COLLECTION
};

2 修改 “usbd_hid.h” 中的申明文件

#include “usbd_hid.h” 文件中的申明文件,修改一下。

#define HID_MOUSE_REPORT_DESC_SIZE    63U

相关文章:

  • 蓝桥杯刷题(十四)
  • 分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
  • 千益畅行 || 共享旅游卡推广运营怎么做?
  • YOLOv8融入低照度图像增强算法---传统算法篇
  • EtherCAT转RS232网关在风电领域的应用
  • 虹科Pico汽车示波器 | 免拆诊断案例 | 2018款东风风神AX7车发动机怠速抖动、加速无力
  • Q_STATIC_ASSERT_X作用
  • 一些常见的与 Vim 相关的文件类型及其描述
  • 服务器呀服务器,一个虚拟专用服务器的使用教程
  • hadoop基本概念
  • 影视类视频片段分割
  • node项目中express的使用
  • pytest和unittest 如何选择?
  • 中文分词库盘点 Python windows
  • openssl AF_ALG引擎使用
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • AHK 中 = 和 == 等比较运算符的用法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java正则表式的使用
  • js 实现textarea输入字数提示
  • JS基础之数据类型、对象、原型、原型链、继承
  • tweak 支持第三方库
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 不上全站https的网站你们就等着被恶心死吧
  • 成为一名优秀的Developer的书单
  • 码农张的Bug人生 - 初来乍到
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用putty远程连接linux
  • 算法-图和图算法
  • 阿里云服务器如何修改远程端口?
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $(selector).each()和$.each()的区别
  • (2)STL算法之元素计数
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)c52学习之旅-流水LED灯
  • (转)ORM
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ... 是什么 ?... 有什么用处?
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .sys文件乱码_python vscode输出乱码
  • /etc/shadow字段详解
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [AIGC] 如何建立和优化你的工作流?
  • [android学习笔记]学习jni编程