区块链技术博客
www.b2bchain.cn

STM32CubeMX创建CustomHID设备

这篇文章主要介绍了STM32CubeMX创建CustomHID设备的讲解,通过具体代码实例进行16364 讲解,并且分析了STM32CubeMX创建CustomHID设备的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=16364

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

使用STM32CubeMX创建一个HID设备

  • 准备工作
  • 一、CubeMX配置
  • 二、代码修改
    • 1.修改报文描述符内容
    • 2.USB打印功能


准备工作

STM32CubeMX、keil、一块支持USB外设的ST芯片

一、CubeMX配置

1.1 第一步打开USB外设,参数保持默认即可,内容如下图所示:

STM32CubeMX创建CustomHID设备

1.2 接下来是配置USB_Device相关参数

STM32CubeMX创建CustomHID设备

STM32CubeMX创建CustomHID设备
确认无误后生成代码即可。到这里我们只是有了这个设备,但是直接连到电脑上是不会被识别到的,接下来就要修

改报文描述符等内容。

二、代码修改

1.修改报文描述符内容

描述符内容如下(想了解设备描述符怎么来的可以去看《圈圈教你玩usb》这本书里面说的很详细):

     0x06, 0x00, 0xff,              // USAGE_PAGE (Vendor Defined Page 1) 表示一个报文标签之类的用途类页     0x09, 0x01,                    // USAGE (Vendor Usage 1) 表示一个报告ID标志     0xa1, 0x01,                    // COLLECTION (Application) 表示应用集合,要以下面最后的0xc0结束它       0x09, 0x01,                    //   USAGE (Vendor Usage 1)功能的一个卷标志     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)  表示每个传输数据限定为0     0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255) 表示每个传输数据的最大值限定为255     0x95, 0x40,                    //   REPORT_COUNT (64)  每次发送的数据长度,这里是64位     0x75, 0x08,                    //   REPORT_SIZE (8)   同下REPORT_SIZE     0x81, 0x02,                    //   INPUT (Data,Var,Abs) 表示USB要输入数据到PC的功能       0x09, 0x01,                    //   USAGE (Vendor Usage 1) 每个功能的一个卷标志     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)    表示每个传输数据限定为0     0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)    表示每个传输数据的最大值限定为255     0x95, 0x40,                    //   REPORT_COUNT (64) 每次接收的数据长度,这里是64位     0x75, 0x08,                    //   REPORT_SIZE (8)        传输字段的宽度为8bit,表示每个传输的数据范围为0~ffff ffff     0x91, 0x02,                    //   OUTPUT (Data,Var,Abs) 表示USB设备要接收PC的数据的功能     0xc0                           // END_COLLECTION  结束标志      

将其复制到usbd_custom_hid_if.c文件中的

CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE]数组内即可,

随后对usbd_conf.h和usbd_customhid.h的以下内容进行修改:

#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE      64  #define USBD_CUSTOM_HID_REPORT_DESC_SIZE       34  #define CUSTOM_HID_EPIN_SIZE                  0x40  #define CUSTOM_HID_EPOUT_SIZE              0x40 

修改完之后就已经可以正常使用了,但是有些朋友可能会发现,这通信速率实在是不敢恭维。接下来就说一下如何

修改通信速率打开usbd_customhid.c文件

找到以下内容
STM32CubeMX创建CustomHID设备
其默认位20ms我们只需要将其变小即可,最小可以为0x01。

到这里所有的工作都已经完成了,接下里便是接收和发送部分的内容

2.USB打印功能

在讲解打印功能之前,要先学习一下USB的接收以及发送函数,当USB接收完一包数据之后会自动调用文件

usbd_custom_hid_if.c中的static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)函数

这里面的内容需要我们根据实际情况进行调整,其中接收到的数据存放在hhid->Report_buf中;

STM32CubeMX创建CustomHID设备
发送函数uint8_t USBD_CUSTOM_HID_SendReport (USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len)

存在于usbd_customhid.c文件中。

打印代码的话可以参考以下内容:

#include <stdarg.h>  void usb_printf(const char *format, ...) {     va_list args; 	uint8_t USB_HID_TxBuff[100] = {0}; 	     va_start(args, format); 	/* 将参数格式化输出到数组 */     vsnprintf((char *)USB_HID_TxBuff, 64, (char *)format, args);      va_end(args);     USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, USB_HID_TxBuff, 64); } 

到此,USB-HID设备我们已经调试修改完毕,接下来编译下载代码即可。

*觉得有帮助的朋友可以关注一下博主,后续会给大家分享更多有趣的内容。

本文转自互联网,侵权联系删除STM32CubeMX创建CustomHID设备

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » STM32CubeMX创建CustomHID设备
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们