STM32Cubeide/STM32F103CubeMX生成自定义HID设备

2023-10-27

前面时钟啥的不管了,USB 48Mhz时钟

USB选择Device USB_FS
在这里插入图片描述
设置参数,34是配置HID作为电脑识别用的,必须是34
64是数据收发用的,HID最大一次64,可以自定义
在这里插入图片描述
这两个是电脑识别之后的硬件ID,不知道什么讲究,不用改

这样就可以生成了
最后是usbd_custom_hid_if.c文件里,这里就是上面的34,数组长度是34
这个数组只要修改对了,电脑就能识别出来,不然会带叹号,没数据

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */
		0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       
		0x09, 0x01,            /* USAGE (Demo Kit)               */    
		0xa1, 0x01, /* COLLECTION (Application) */ 
		/* 6 */ 

		// The Input report 
		0x09,0x03, // USAGE ID - Vendor defined 
		0x15,0x00, // LOGICAL_MINIMUM (0) 
		0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255) 
		0x75,0x08, // REPORT_SIZE (8) 
		0x95,64, // REPORT_COUNT :SendLength 
		0x81,0x02, // INPUT (Data,Var,Abs) 
		//19
		// The Output report 
		0x09,0x04, // USAGE ID - Vendor defined 
		0x15,0x00, // LOGICAL_MINIMUM (0) 
		0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255) 
		0x75,0x08, // REPORT_SIZE (8) 
		0x95,64, // REPORT_COUNT:ReceiveLength 
		0x91,0x02, // OUTPUT (Data,Var,Abs) 
		//32
		// The Feature report
		/* 45 */ 
		//#endif
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION	             */
};

描述符定义了usb传输数据的格式。

usbd_customhid.h文件中,更改收发数据长度和延时
在这里插入图片描述
因为这里自己就有宏定义判断,且不属于用户可更改的区域,因此直接在main.h修改

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
#define CUSTOM_HID_EPIN_SIZE   0x40    //接收的长度
#define CUSTOM_HID_HS_BINTERVAL  0x01U          //延时
#define CUSTOM_HID_EPOUT_SIZE  0x40   //发送的长度
/* USER CODE END EC */

设备管理器里
在这里插入图片描述
然后做个简单的数据发送

unsigned char usb_rx_data[64]={0};
unsigned char usb_tx_data[64]={0};
unsigned char usb_rx_flag=0;

while (1)
	{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
			usb_tx_data[0]++;
			usb_tx_data[63]++;
			if(USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64) == USBD_OK)
			{
				PB_T(0);
			}
    /* USER CODE BEGIN 3 */
  }


打开Bus Hound 看一下数据
首先打开 Devices ,勾选,可以插拔一下看看是几号
在这里插入图片描述
勾选之后点Capture,点开RUN,数据就出来了
在这里插入图片描述
接收:
会调用usbd_custom_hid_if.c的回调函数
CUSTOM_HID_OutEvent_FS

/**
  * @brief  Manage the CUSTOM HID class events
  * @param  event_idx: Event index
  * @param  state: Event state
  * @retval USBD_OK if all operations are OK else USBD_FAIL
  */
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{
  /* USER CODE BEGIN 6 */
extern unsigned char usb_rx_data[];
extern unsigned char usb_rx_flag;
USBD_CUSTOM_HID_HandleTypeDef *hhid;
hhid = (USBD_CUSTOM_HID_HandleTypeDef *)hUsbDeviceFS.pClassData;
strncpy(usb_rx_data,hhid->Report_buf,64);
usb_rx_flag = 1;
  return (USBD_OK);
  /* USER CODE END 6 */
}

主函数添加

			if(usb_rx_flag>0)
			{
				PB_T(0);
				usb_rx_flag=0;
				strncpy(usb_rx_data,usb_tx_data,64);
				USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64); 
			}

在这里插入图片描述
在这里插入图片描述
选择 interrupt Out
写入数据长度 写入数据
点击Run
在这里插入图片描述
Capture能看到数据

但是这里我只有第一次有数据,后面收不到了,不知道为啥

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32Cubeide/STM32F103CubeMX生成自定义HID设备 的相关文章

  • USB 传输数据

    我正在尝试通过 USB 发送和接收数据 我的设备 Acer Iconia A500 拥有连接到设备所需的一切 一切都很好并且工作正常 但是当我尝试发送和接收数据时 它的行为并不像预期的 这是我的代码 for this is the main
  • 使用 python 检测 Windows 10 上的 USB 设备插入

    我无法获取以下代码检测USB设备插入 http timgolden me uk python win32 how do i detect device insertion html在我的 Windows 10 64 位 计算机上使用 Pyt
  • 发现多个 USB-IrDA 设备,打开并连接每个设备的套接字

    对于任何优秀的套接字程序员 是否可以使用套接字枚举通过 USB 端口连接到 PC 的多个活动 IrDA 设备 如果是这样 怎么办 这确实是我的主要问题 帖子的其余部分完善了细节并描述了我所尝试的内容 我正在使用 Microsoft SDK
  • 无法使用 Android Studio、Windows 7 连接到 Samsung Galaxy Tab S

    我有一台漂亮的新三星 Galaxy Tab S 我正在尝试将其与 Android Studio 连接 我已在平板电脑上启用 USB 调试 并通过执行 SAMSUNG USB Driver for Mobile Phones v1 5 45
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • Ubuntu 10.1下如何识别多个USB串口适配器

    我正在 Ubuntu 10 1 下从多个相同的 USB 串行适配器读取数据 有时 它们的 dev tty 路径会发生变化 例如 如果在启动时连接了其他 USB 设备 我需要一种通过任何此类更改重复引用同一适配器的方法 据 udevadm 称
  • 如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

    我正在编写一个 DLL 库 该库使用 VB NET 中的 winusb 连接到 USB 设备 由于它是一个 DLL 所以我没有窗口 而且我的库的用户也可能没有窗口 例如命令行应用程序 我见过的检测设备连接和分离的示例都使用RegisterD
  • 如何在PyUsb中绑定/取消绑定USB设备?

    我需要在 python 脚本上打开 关闭多个 USB 设备 我可以使用 PyUsb 绑定和取消绑定 USB 设备吗 我可以使用 shell 命令来做到这一点 关闭电源 echo device nuber gt sys bus usb dri
  • 使用Python直接向USB发送信号

    如何使用 Python 将 USB 端口连接设置为高或低 这可用于定制 USB 设备 例如 假设我有一个 LED 连接到 USB 端口 数据线 现在通过代码我想闪烁它或控制它 现在 这可以通过使用任何微控制器 Arduino Raspber
  • Silverlight 能否访问可访问 USB 端口的 .Net 库?

    我们有一个 Net 库 可以通过 USB 端口访问一些自定义硬件 我读到 Silverlight 包含 Net 运行时的子集 所以 我的问题是 这个子集足以让 Net 库运行吗 不可以 您不能使用从 Silverlight 内部访问 USB
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 适用于 Android 的 USB 主机

    I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device nexus
  • USBInterfaceOpen总是报kIOReturnExclusiveAccess错误

    最近我遇到了这个问题 很头疼 我已经在这个问题上花了一个星期了 但仍然失败 希望您能帮我把这块石头踢开 非常感谢 我的问题 我们公司为iPhone生产USB存储设备 实际上这个存储设备中有一个SDCard 现在 我们想要开发一个 Mac 应
  • 在 Linux (libusb-1.0) 上访问 USB 设备?

    我正在编写一个小程序 使用 Linux 上的 libusb 1 0 与特定 USB HID 产品 由供应商和产品 ID 标识 进行通信 现在 我必须以 root 身份运行该程序 因为 libusb 需要对 USB 设备节点的写访问权限 有没
  • USB 端口速度 Linux [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何以编程方式确定运行 Linux 内核的嵌入式设备中的 USB 端口速度 你可以阅读 sys bus usb devices usb s
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • Android 两次请求 USB 许可

    我有一个运行 Android 4 0 4 的开发板 并将其用作 USB 配件 当我关闭板上的应用程序然后通过 USB 插入 Android 手机时 板会提示 连接此 USB 设备时打开 AppName 当我触摸 确定 时 应用程序启动并再次

随机推荐

  • day01Git

    1 Git介绍 1 1版本控制 理解 无论是代码编写 还是文档编写 我们都会遇到对文档内容反复修改的情况 1 2开发中存在的问题 理解 程序员小明负责的模块就要完成了 就在即将提交发布之前的一瞬间 电脑突然蓝屏 硬盘光荣下岗 几个月来的努力
  • 【前端】Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据、抽取到hook

    文章目录 目标 过程与代码 监听窗口的滚动 窗口上事件监听的移除 封装到一个hook 回调函数法 不推荐 返回值法 推荐 效果 总代码 修改或添加的文件 hooks的useScroll home content 参考 本项目博客总结 前端
  • C++QT入门

    C QT 文章目录 C QT 1 QT概述 1 1 什么是QT 1 2 QT的发展史 1 3 支持的平台 1 4 QT版本 1 5 Qt 的下载与安装 1 6 QT的优点 1 7 成功案例 2 创建QT项目 2 1 使用向导创建 2 2 手
  • vue2尚品汇学到得新知识

    vue滚动条 写到router路由中 回到最顶部 scrollBehavior to from savedPosition return y 0 2 引入一个模块后 先在路由router中 import然后再在注册路由写信息 path后看看
  • 【dev on wsl2】wsl2 with vscode简单配置

    wsl2 with vscode简单配置 正文开始 Assassin 目录 wsl2 with vscode简单配置 1 安装wsl2 1 1 安装方式选择 1 2 命令行安装 2 搭配vscode 2 1 新建用户 远程连接vscode
  • C++,类中的构造函数、拷贝构造函数、拷贝赋值函数、析构函数

    类的简介 类是一种将抽象转换为用户定义类型的C 工具 它将数据表示和操纵数据的方法组合成一个整洁的包 一般来说 类规范由两个部分组成 类声明 以数据成员 成员属性 的方式描述数据部分 以成员函数 被称为方法 的方式描述公有接口 类方法定义
  • element-ui嵌套弹框遮罩层解决

    1 element ui嵌套弹框遮罩层解决
  • QNX 如何制作目标系统,制作系统镜像,烧写系统文件

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 author 锋影 e mail 174176320 qq com 制作目标系统的方法如下 以CF卡为例 1 格式化CF卡 2 用dinit传系
  • JenKins + Svn + Maven 自动化构建部署

    也许很多小伙伴会疑问 什么是Jenkins Jenkins是一个功能强大的应用程序 允许持续集成和持续交付项目 无论用的是什么平台 这是一个免费的源代码 可以处理任何类型的构建或持续集成 集成Jenkins可以用于一些测试和部署技术 Jen
  • Python __name__属性和 dir() 函数

    name 属性 一个模块被另一个程序第一次引入时 其主程序将运行 如果我们想在模块被引入时 模块中的某一程序块不执行 我们可以用 name 属性来使该程序块仅在该模块自身运行时执行 if name main print 程序自身在运行 el
  • SpringBoot笔记

    目录 开发准备 导出 常用注解 导出excel到指定位置 导出excel到指定web 导入 将指定位置Excel导入并显示至web 使用ExcelWriter基于模板导出 开发准备 1 导入依赖
  • (记录贴)Docker日志位置及docker日志日期时间精确查询

    docker logs since 2020 07 30T10 14 00 until 2020 07 30T10 15 00 tomcat80 这条代码可以通过2个时间来查询指定范围的时间日志 since起始时间 你要从什么时候开始查询
  • 华为机试---路灯

    题目描述 一条长l的笔直的街道上有n个路灯 若这条街的起点为0 终点为l 第i个路灯坐标为a i 每盏灯可以覆盖到的最远距离为d 为了照明需求 所有灯的灯光必须覆盖整条街 但是为了省电 要是这个d最小 请找到这个最小的d 输入描述
  • tensorflow运行出错 ERROR:root:Internal Python error in the inspect module

    导入模块 运行出现以下错误 使用pip install tensorflow 默认安装的是tensorflow 2 0 往下拉可以看到各种 ImportError DLL load failed 找不到指定的模块 查看官网可以看到相关说明
  • 交叉编译实践-Qt应用程序交叉编译【用cmake工具编译】

    获取更多干货技能 点击 这里 小编文章列表 主页左侧扫码关注公众号 上篇介绍了交叉编译的基本原理 以及交叉编译一个简单的HelloWorld程序 这篇将介绍如何交叉编译Qt程序 由于Qt程序依赖的底层以及第三方的相关库太多
  • 浅谈RPC,gRPC和RESTful

    RPC 远程过程调用 Remote Procedure Call RPC 是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一个地址空间 通常为一个开放网络的一台计算机 的子程序 而程序员就像调用本地程序一样 无需额外地为这个交互
  • SpringBoot中使用lombok

    集成 IDE安装Plugins插件 gt lombok 添加maven依赖
  • 什么是AECQ?

    AECQ是车规验证标准 是克莱斯勒 福特和通用汽车为建立一套通用的零件资质及质量系统标准而设立了汽车电子委员会 AEC AEC 是 Automotive Electronics Council 汽车电子协会 之略 是主要汽车制造商与美国的主
  • 二进制转十进制的程序

    include
  • STM32Cubeide/STM32F103CubeMX生成自定义HID设备

    前面时钟啥的不管了 USB 48Mhz时钟 USB选择Device USB FS 设置参数 34是配置HID作为电脑识别用的 必须是34 64是数据收发用的 HID最大一次64 可以自定义 这两个是电脑识别之后的硬件ID 不知道什么讲究 不