Почему мой usb HID выводит мусор? STM32Cube

#usb #stm32 #hid #stm32cubemx #cubemx

#usb #stm32 #hid #stm32cubemx #cubemx

Вопрос:

Я пытаюсь создать колесо принудительной обратной связи, но программное обеспечение — не моя чашка чая. Предполагается, что это переключает кнопку 0, но это не так.

 typedef struct{
    uint8_t buttons;
    int8_t relativeMvt;
}steer_t;
steer_t steer = {0, 0};

while (1)
{
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);

    if(steer.buttons) steer.buttons = 0b00000000;
    else steer.buttons = 0b00000001;

    USBD_CUSTOM_HID_SendReport(amp;hUsbDeviceFS, steer, sizeof(steer));
    HAL_Delay(500);
}
 

Мой дескриптор отчета (я использую его впервые):

введите описание изображения здесь

При выполнении этого кода кнопки остаются статическими «включенными», например:

введите описание изображения здесь

Они меняются (случайным образом) только при изменении переменной «relativeMvt», очень странно.

Что я пробовал:

  • Поменяйте местами relativeMvt и кнопки в typeDef
  • Проверьте размер дескриптора отчета и т. Д
  • Плачь

    #define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE 2

    #define USBD_CUSTOM_HID_REPORT_DESC_SIZE 45

    #define CUSTOM_HID_EPIN_SIZE 2

Что мне нужно изменить, чтобы это заработало? Спасибо!

Комментарии:

1. Проверьте это руководство eleccelerator.com/tutorial-about-usb-hid-report-descriptors . Похоже, что ваше определение USAGE_MINIMUM неверно. Вы должны установить его на кнопку 1.

2. @veeman Это действительно хороший учебник, я использовал его для создания этого, но я еще не полностью его понял. С тех пор я решил это

Ответ №1:

Я решил это. Я пропустил:

 #include "usbd_customhid.h"
 

и я забыл «amp;» при передаче моих переменных:

  USBD_CUSTOM_HID_SendReport(amp;hUsbDeviceFS, amp;steer, sizeof(steer));
 

Комментарии:

1. Вероятно, вам следует включить все предупреждения. Хороший компилятор поймает такого рода сбои и предупредит вас.