STM32 HAL库 使用 USB HID 配置

STM32 CubeMax 配置

我这里使用的是HS接口但使用的是内部FS核。
在这里插入图片描述

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

修改USB描述符

在 usbd_custom_hid_if.c 的 CUSTOM_HID_ReportDesc_HS 或 CUSTOM_HID_ReportDesc_FS

__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_HS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 1 */
		0x05,0x8c, /* USAGE_PAGE (ST Page) */
    0x09,0x01, /* USAGE (Demo Kit) */
    0xa1,0x01, /* COLLECTION (Application) */

    // The Input report
    0x09,0x03, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x81,0x02, // INPUT (Data,Var,Abs)

    // The Output report
    0x09,0x04, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x91,0x02, // OUTPUT (Data,Var,Abs)
  /* USER CODE END 1 */
   0xC0    /*     END_COLLECTION             */
};

修改HID设备PID VID

在 usbd_desc.c 中修改

#define USBD_VID     123
#define USBD_LANGID_STRING     1033
#define USBD_MANUFACTURER_STRING     "STM32"
#define USBD_PID_HS     33222
#define USBD_PRODUCT_STRING_HS     "HID name"
#define USBD_CONFIGURATION_STRING_HS     "Custom HID Config"
#define USBD_INTERFACE_STRING_HS     "Custom HID Interface"

#define USB_SIZ_BOS_DESC            0x0C

修改HID报告间隔

在 usbd_customhid.h 中

#ifndef CUSTOM_HID_HS_BINTERVAL
#define CUSTOM_HID_HS_BINTERVAL                      0x01U
#endif /* CUSTOM_HID_HS_BINTERVAL */

#ifndef CUSTOM_HID_FS_BINTERVAL
#define CUSTOM_HID_FS_BINTERVAL                      0x01U
#endif /* CUSTOM_HID_FS_BINTERVAL */

修改USB报告长度

在 usbd_conf.h 中

#define USBD_MAX_NUM_INTERFACES     1U
/*---------- -----------*/
#define USBD_MAX_NUM_CONFIGURATION     1U
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ     512U
/*---------- -----------*/
#define USBD_DEBUG_LEVEL     0U
/*---------- -----------*/
#define USBD_LPM_ENABLED     0U
/*---------- -----------*/
#define USBD_SELF_POWERED     1U
/*---------- -----------*/
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE     64U
/*---------- -----------*/
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     33U
/*---------- -----------*/
#define CUSTOM_HID_HS_BINTERVAL     0x1U

在usbd_conf.h中

#define CUSTOM_HID_EPIN_ADDR                 0x81U
#define CUSTOM_HID_EPIN_SIZE                 0x40U

#define CUSTOM_HID_EPOUT_ADDR                0x01U
#define CUSTOM_HID_EPOUT_SIZE                0x40U

在 usbd_customhid.h 中

#ifndef USBD_CUSTOMHID_OUTREPORT_BUF_SIZE
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE            0x40U
#endif /* USBD_CUSTOMHID_OUTREPORT_BUF_SIZE */

#ifndef USBD_CUSTOM_HID_REPORT_DESC_SIZE
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE             33U
#endif /* USBD_CUSTOM_HID_REPORT_DESC_SIZE */

发送和接收

HID报文每次收发必须为64字节

发送

在 usbd_customhid.c 中定义的函数

uint8_t USBD_CUSTOM_HID_SendReport(USBD_HandleTypeDef *pdev,
                                   uint8_t *report, uint16_t len);
extern USBD_HandleTypeDef hUsbDeviceHS;//声明外部定义的USB句柄
USBD_CUSTOM_HID_SendReport(&hUsbDeviceHS,usbtx,64);//将usbtx数组中的64字节数据发出去

接收

在 usbd_custom_hid_if.c 中

static int8_t CUSTOM_HID_OutEvent_HS(uint8_t event_idx, uint8_t state)
{
  /* USER CODE BEGIN 10 */
  UNUSED(event_idx);
  UNUSED(state);
	//获取接收指针
	USBD_CUSTOM_HID_HandleTypeDef     *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)(hUsbDeviceHS.pClassData);
 	//将数据copy到接收缓存
	for(int i=0;i<64;i++) 
	{
			usbrx[i]=hhid->Report_buf[i];	
	} 
	//处理,或者在其他地方处理
	processData();
    /* Start next USB packet transfer once data processing is completed */
  if (USBD_CUSTOM_HID_ReceivePacket(&hUsbDeviceHS) != (uint8_t)USBD_OK)
  {
    return -1;
  }

  return (USBD_OK);
  /* USER CODE END 10 */
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
stm32f407是意法半导体(STMicroelectronics)推出的一款强大的ARM Cortex-M4微控制器系列。Custom HID是指自定义人机接口设备(Human Interface Device),它是基于USB接口的一种通信协议。下面是关于stm32f407 custom hid的回答: stm32f407 custom hid是将stm32f407微控制器应用于自定义的HID设备开发中。通过使用stm32f407的丰富外设和强大计算能力,我们可以实现各种自定义的HID设备功能,例如游戏手柄、键盘、鼠标、音频设备等。 stm32f407的主要特点是具有高性能、低功耗和丰富的外设接口。它具有一个ARM Cortex-M4内核,最高主频可以达到168MHz,支持硬件浮点运算,使其能够处理复杂的数据操作。此外,stm32f407还具有大容量的Flash存储器和SRAM,可以存储和处理大量数据。 stm32f407还提供了多种外设接口,包括USB、SPI、I2C、UART等。通过USB接口,我们可以将stm32f407配置HID设备,以便与计算机或其他设备进行通信。通过自定义HID协议,我们可以定义设备的输入和输出报告格式,实现特定的功能需求。 在进行stm32f407 custom hid开发时,首先需要熟悉stm32f407的硬件特性和外设接口,了解USBHID协议的相关知识。其次,需要使用适当的开发工具和软件,如STCubeMX和HAL库,来配置和编程stm32f407。通过编写相应的固件代码,我们可以实现自定义的HID设备功能。 总之,stm32f407 custom hid可以满足各种自定义HID设备的开发需求。通过充分利用stm32f407的性能和外设接口,我们可以实现高性能、低功耗的自定义HID设备,并与计算机或其他设备进行可靠的通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

renjkun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值