一、開發環境
硬體平台:stm32f767
軟體平台:keil5,cubmx
二、cubemx建立工程
1、配置RCC
2、USB_OTG_FS,選擇Device_Only模式
3、Middleware——USB_DEVICE
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