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

  之前使用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
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
STM32F407是STMicroelectronics公司推出的一款基于Cortex-M4内核的32位微控制器。QT上位机是一种基于QT框架开发的图形化界面软件,用于与STM32F407等嵌入式系统进行通信和控制。 要在STM32F407和QT上位机之间进行通信,可以使用串口通信或者USB通信。下面以串口通信为例进行说明。 首先,在STM32F407上配置串口通信相关的GPIO引脚和配置串口参数,包括波特率、数据位、停止位等。然后,在STM32F407的代码中编写接收和发送数据的函数。 在QT上位机中,使用QT的串口通信库对串口进行初始化,并设置相应的串口参数。然后,在QT的界面中添加串口接收和发送的按钮或者其他控件。通过编写相关的代码,实现接收和发送数据的功能,可以通过串口收到来自STM32F407的数据,并实现对STM32F407的控制。 在通信过程中,STM32F407发送数据时,将数据发送到串口的发送缓冲区,并通过串口模块发送出去。QT上位机通过串口接收缓冲区接收到STM32F407发送的数据,可以对接收到的数据进行解析和处理。同时,QT上位机也可以通过串口发送数据给STM32F407,实现对STM32F407的控制。 总之,通过在STM32F407上配置串口通信参数,并在STM32F407和QT上位机中编写相应的代码,就可以实现二者之间的通信。这样,可以方便地进行数据传输和控制,提高嵌入式系统的灵活性和交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

在嵌入式里摸爬滚打

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

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

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

打赏作者

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

抵扣说明:

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

余额充值