问题描述
我正在尝试通过STM32自学USB HID。现在,我一直在努力尝试使用自定义报告说明。
这是现在正在工作的内容:
报告说明:
0x05,0x01,// Usage Page (Generic Desktop Ctrls)
0x09,0x02,// Usage (Mouse)
0xA1,// Collection (Application)
0x09,// Usage (Pointer)
0xA1,0x00,// Collection (Physical)
0x05,// Usage Page (Generic Desktop Ctrls)
0x09,0x30,// Usage (X)
0x09,0x31,// Usage (Y)
0x09,0x38,// Usage (Wheel)
0x15,0x81,// Logical Minimum (-127)
0x25,0x7F,// Logical Maximum (127)
0x75,0x08,// Report Size (8)
0x95,0x03,// Report Count (3)
0x81,0x06,// Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0,// End Collection
0xC0,// End Collection
报告说明大小:
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE 0x1E
在main.c中声明的struct
struct mouseHID_t {
int8_t x;
int8_t y;
int8_t wheel;
};
struct mouseHID_t mouseHID;
在while循环中编码:
while (1)
{
if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9) == 0)
{
mouseHID.wheel = 1;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,&mouseHID,sizeof(struct mouseHID_t));
mouseHID.wheel = 0;
}
}
当我按下板上的按钮时,它将向上滚动鼠标滚轮。如果我更改报告描述以删除x&y用法,将描述大小更改为0x1A(26),并更改mouseHID结构以删除x&y,则开发板将不再滚动鼠标滚轮。
我能够运行到最远的地方是“ USBD_CUSTOM_HID_SendReport”中的语句“ if(hhid-> state == CUSTOM_HID_IDLE)”从不等于true,因为hhid-> state == CUSTOM_HID_BUSY。
我进行了更改,以便任何人都可以查看我的工作:
0x05,// Report Count (1)
0x81,// End Collection
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE 0x1A
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)