Embedded STM32 USB中间件:HID输出报告事务错误

Embedded STM32 USB中间件:HID输出报告事务错误,embedded,usb,stm32,Embedded,Usb,Stm32,我在配置STM32设备以接收HID中断输出事务时遇到问题,其中PC是主机设备 我使用标准的STM32 CubeMX提供的USB中间件,通过编辑允许两个端点,一个输出,一个输入。以及自定义的HID报告描述符: __ALIGN_BEGIN static uint8_t HID_ReportDesc[HID_REPORT_DESC_SIZE] __ALIGN_END = { 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00

我在配置STM32设备以接收HID中断输出事务时遇到问题,其中PC是主机设备

我使用标准的STM32 CubeMX提供的USB中间件,通过编辑允许两个端点,一个输出,一个输入。以及自定义的HID报告描述符:

__ALIGN_BEGIN static uint8_t HID_ReportDesc[HID_REPORT_DESC_SIZE]  __ALIGN_END =
{
        0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)
        0x09, 0x01,        // Usage (0x01)
        0xA1, 0x01,        // Collection (Application)
        0x15, 0x00,        //   Logical Minimum (0)
        0x26, 0xFF, 0x00,  //   Logical Maximum (255)
        0x75, 0x08,        //   Report Size (8)
        0x95, 0x40,        //   Report Count (64)
        0x09, 0x02,        //   Usage (0x02)
        0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
        0x95, 0x40,        //   Report Count (64)
        0x09, 0x02,        //   Usage (0x02)
        0x91, 0x00,        //   Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
        0xC0,              // End Collection
}; 
通过使用USBD HID提供的输入报告事务功能
USBD\u HID\u SendReport
,我可以观察设备的行为

在PC端,使用USBLyzer软件,我可以确认设备已被Windows识别,并进行了相应的配置,报告描述符时没有错误。然后,我使用HIDAPI打开设备,并读取报告的值。此实现按预期工作,使我能够将数据从设备传输到主机

但是,没有提供HID输出报告功能,这让我自己来实现:

uint8_t USBD_HID_ReceiveReport (USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len){
USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pClassData;

if(pdev->dev_state == USBD_STATE_CONFIGURED){
    if(hhid->state == HID_IDLE){
        hhid->state = HID_BUSY;
        USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR, report, len);
    }
}
return USBD_OK;
}

此函数使用与提供的
USBD\u HID\u SendReport
函数相同的结构,而不是使用
USBD\u LL\u PrepareReceive
函数准备EPOUT地址以接收事务,然后通过PCD处理传输

在设备初始化之后,我在一个无休止的循环中使用实现的
USBD\u HID\u ReceiveReport
函数,并被反复调用。我在HIDAPI中使用
hid\u write
将数据传输到设备一次。调试时,设备迭代循环,并在每次调用时进入PCD端点传输
hid_write
似乎不会像预期的那样在设备上更新我的缓冲区,并且USBlyzer在OUT报告中报告“事务错误”

有人知道我的实现中的错误吗