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

Я пытаюсь сделать колесо с силовой обратной связью, но программное обеспечение мне не по душе. Это должно переключать кнопку 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(&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

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


person antoine serry    schedule 27.12.2020    source источник
comment
Ознакомьтесь с этим руководством eleccelerator.com/tutorial-about-usb-hid-report- дескрипторы. Похоже, ваше определение USAGE_MINIMUM неверно. Вы должны установить его на кнопку 1.   -  person veeman    schedule 31.12.2020
comment
@veeman Это действительно хороший учебник, я использовал его, чтобы сделать это, но еще не понял его полностью. Я решил это с тех пор   -  person antoine serry    schedule 31.12.2020


Ответы (1)


Я решил это. мне не хватало:

#include "usbd_customhid.h"

и я забыл & при передаче моих переменных:

 USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &steer, sizeof(steer));
person antoine serry    schedule 31.12.2020
comment
Вероятно, вам следует включить все предупреждения. Хороший компилятор поймает такого рода сбои и предупредит вас. - person veeman; 31.12.2020