天天看點

stm32——自定義HID裝置

一、開發環境

硬體平台:stm32f767

軟體平台:keil5,cubmx

二、cubemx建立工程

1、配置RCC

stm32——自定義HID裝置

2、USB_OTG_FS,選擇Device_Only模式

stm32——自定義HID裝置

 3、Middleware——USB_DEVICE

stm32——自定義HID裝置

4、配置一個外部中斷按鍵作為輸入

5、配置時鐘與生成代碼

三、工程代碼修改

1、打開usbd_custom_hid_if.c 檔案,把CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] 數組中的描述符修改為

__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, 0x00,                    // USAGE (Undefined)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x91, 0x00,                    //   OUTPUT (Data,Ary,Abs)
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION	             */
};
           

修改宏USBD_CUSTOM_HID_REPORT_DESC_SIZE的長度為29

2、打開此函數的注釋

int8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t *report, uint16_t len)
{
  return USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, report, len);
}
           

3、在按鍵中斷中發送字元

uint8_t send_data = 1;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == KEY0_Pin)
	{
		USBD_CUSTOM_HID_SendReport_FS(&send_data, 1);

	}
}
           

4、完整工程代碼

https://download.csdn.net/download/huhuandk/11980721

繼續閱讀