STM32CubeMX 创建CustomHID设备

STM32CubeMX 创建CustomHID设备

  • 简介
  • github
  • STM32CubeMX配置
  • 代码说明
    • 发送
    • 接收
  • 效果

简介

最近工作需求,要做个usb射频接收器,不太想用串口,每次还要选择串口号,有些电脑还需要装驱动,想来想去就不如用USB HID设备进行通讯。github里的不是纯净的Custom HID代码,还加载一些项目代码,比如串口、数据转化之类的。不过下面也会说一下怎么配置。

github

https://github.com/HaHaHaHaHaGe/custom_usbdongle

STM32CubeMX配置

STM32CubeMX 创建CustomHID设备_第1张图片
因为我的芯片是STM32F042F6P6所以需要勾选图中的按钮才可以使用USB功能,否则下面USB按钮是灰色的无法开启
STM32CubeMX 创建CustomHID设备_第2张图片
USB这里保持默认就好

STM32CubeMX 创建CustomHID设备_第3张图片
修改图中所示位置

代码说明

STM32CubeMX 创建CustomHID设备_第4张图片
编写结构体内容,可以复制

/** 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) 
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION	             */
};

STM32CubeMX 创建CustomHID设备_第5张图片
修改传输包大小。0x40为64个字节(最大)
STM32CubeMX 创建CustomHID设备_第6张图片
可以修改时间轮询间隔

发送

extern USBD_HandleTypeDef hUsbDeviceFS;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, USB_Send,64);

直接调用这个函数就可以

接收

STM32CubeMX 创建CustomHID设备_第7张图片
接收需要在上图中使用一个变量标志着是否收到了数据,再使用下面的代码进行读取(记得清空标志)

uint32_t USB_GetData(uint8_t *data,uint32_t dataNum)
{
     
    uint32_t len=0;
    USBD_CUSTOM_HID_HandleTypeDef   *hhid;
  hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;//???????
    
    for(len=0;len<dataNum;len++){
     
        *data=hhid->Report_buf[len];
        data++;
    }
    return dataNum;
}


效果

配合https://blog.csdn.net/weixin_41738734/article/details/103596404的上位机可以读写HID设备

你可能感兴趣的:(有关STM32的一些东西,STM32HID,HID,CustomHID,STM32CubeMX,单片机)