#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. Вероятно, вам следует включить все предупреждения. Хороший компилятор поймает такого рода сбои и предупредит вас.