STM32利用USB的HID与QT上位机通信

本文介绍了如何使用STM32CubeMX配置USBHID功能,包括设置VIDPID和编写HID报告描述符。通过CUBEMX和官方工具生成报告描述符,然后在单片机端实现USB设备。此外,提到了利用Qt进行上位机HID通信的尝试,并推荐了一个USB_HID测试工具。
摘要由CSDN通过智能技术生成

  之前使用kingst的逻辑分析仪,打开上位机软件,插上带usb的硬件就可以通信,也不需要打开串口什么的,感觉很方便,于是借用一个周末研究下这个技术。本文主要是用于记录自己学习的过程,顺便分享下学习感悟。

首先初略说下大体是怎么回事,就是单片机使用hid功能需要配置VID PID,这两个相当于设备地址,配置好之后上位机根据这两个地址找到你的单片机,就可以通信了,就这么简单。

1.通过CUBEMX配置stm32的usb功能

 图1

 

 图2

 2.填写HID报告描述符,USB_DEVICE/App/下打开usbd_custom_hid_if.c文件中。这个地方有很多要说的,先直接上单片机配置的代码。

__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */
	
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,                    // USAGE (Mouse)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x05, 0x09,                    //     USAGE_PAGE (Button)
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
    0x95, 0x03,                    //     REPORT_COUNT (3)
    0x75, 0x01,                    //     REPORT_SIZE (1)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0x95, 0x01,                    //     REPORT_COUNT (1)
    0x75, 0x05,                    //     REPORT_SIZE (5)
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //     REPORT_SIZE (8)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x06,                    //     INPUT (Data,Var,Rel)
    0xc0,                          //   END_COLLECTION

  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION	             */
};

结构体中的参数个数就是图1中红色圈起来的50,这个要保持一致。然后说下这段代码怎么来的。

自己写报告描述符有点困难,这个不用怕官方会提供工具的。工具截图如下:下载链接

 图3 

 这个工具的使用说明:下载这个工具之后里面有各种报告描述符参考,我是直接拿一个鼠标的来用的。然后另存为.h格式

 图4

 图5

 打开mouse.h文件,拷贝这个文件到你的STM32工程里面即可。

 图6

 然后下载程序到单片机,在电脑上就可以看到你的hid设备.设备VID 和PID都是之前设置的。

 图7

3.上位机实现HID功能,我用的时qt,参考这个大神的Qt USB HID通讯文章,就可以实现通信。上位机部分还在调试。以后调通的再来更新。

4.在这期间遇到一个好用的工具。USB_HID 工具。这个可以和指定的VID PID通信,但是通信内容是固定的,只能用来测试的链路是否是正确的。

这里有大佬调通的例子,亲测有效c

参考文章:STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备)_usb custom hid设备_Leung_ManWah的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在嵌入式里摸爬滚打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值