Перейти к содержанию

STM32F103C8 Простой проект USB HID Keyboard. Не работает


carlogulliani

Рекомендуемые сообщения

Добрый день, собрал в кубе проект для USB HID, ничего лишнего, только инициализация USB, выбор HID и настройка внешнего кварца. Частота 72 для всего устройства и 48 для USB, скорость передачи 12Мбит/с

Затем изменил несколько дефайнов и сам дескриптор устройства

#define HID_EPIN_SIZE                 0x08
#define HID_MOUSE_REPORT_DESC_SIZE    187
...
0x01,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/

дескриптор устройства забрал из видео от STMElectronics

Spoiler

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]  __ALIGN_END =
{
        0x05    ,//bSize: 0x01, bType: Global, bTag: Usage Page
        0x01    ,//Usage Page(Generic Desktop Controls )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x06    ,//Usage(Keyboard)
        0xA1    ,//bSize: 0x01, bType: Main, bTag: Collection
        0x01    ,//Collection(Application )
        0x85    ,//bSize: 0x01, bType: Global, bTag: Report ID
        0x01    ,//Report ID(0x1 )
        0x05    ,//bSize: 0x01, bType: Global, bTag: Usage Page
        0x07    ,//Usage Page(Keyboard/Keypad )
        0x19    ,//bSize: 0x01, bType: Local, bTag: Usage Minimum
        0xE0    ,//Usage Minimum(0xE0 )
        0x29    ,//bSize: 0x01, bType: Local, bTag: Usage Maximum
        0xE7    ,//Usage Maximum(0xE7 )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x00    ,//Logical Minimum(0x0 )
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x01    ,//Logical Maximum(0x1 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x01    ,//Report Size(0x1 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x08    ,//Report Count(0x8 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x02    ,//Input(Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x08    ,//Report Size(0x8 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x01    ,//Report Count(0x1 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x01    ,//Input(Constant, Array, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0x05    ,//bSize: 0x01, bType: Global, bTag: Usage Page
        0x07    ,//Usage Page(Keyboard/Keypad )
        0x19    ,//bSize: 0x01, bType: Local, bTag: Usage Minimum
        0x00    ,//Usage Minimum(0x0 )
        0x29    ,//bSize: 0x01, bType: Local, bTag: Usage Maximum
        0x65    ,//Usage Maximum(0x65 )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x00    ,//Logical Minimum(0x0 )
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x65    ,//Logical Maximum(0x65 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x08    ,//Report Size(0x8 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x05    ,//Report Count(0x5 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x00    ,//Input(Data, Array, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0xC0    ,//bSize: 0x00, bType: Main, bTag: End Collection
        0x05    ,//bSize: 0x01, bType: Global, bTag: Usage Page
        0x0C    ,//Usage Page(Consumer )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x01    ,//Usage(Consumer Control)
        0xA1    ,//bSize: 0x01, bType: Main, bTag: Collection
        0x01    ,//Collection(Application )
        0x85    ,//bSize: 0x01, bType: Global, bTag: Report ID
        0x02    ,//Report ID(0x2 )
        0x19    ,//bSize: 0x01, bType: Local, bTag: Usage Minimum
        0x00    ,//Usage Minimum(0x0 )
        0x2A    ,//bSize: 0x02, bType: Local, bTag: Usage Maximum
        0x3C,
        0x02 ,//Usage Maximum(0x23C )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x00    ,//Logical Minimum(0x0 )
        0x26    ,//bSize: 0x02, bType: Global, bTag: Logical Maximum
        0x3C,
        0x02 ,//Logical Maximum(0x23C )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x01    ,//Report Count(0x1 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x10    ,//Report Size(0x10 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x00    ,//Input(Data, Array, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0xC0    ,//bSize: 0x00, bType: Main, bTag: End Collection
        0x05    ,//bSize: 0x01, bType: Global, bTag: Usage Page
        0x01    ,//Usage Page(Generic Desktop Controls )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x80    ,//Usage(System Control)
        0xA1    ,//bSize: 0x01, bType: Main, bTag: Collection
        0x01    ,//Collection(Application )
        0x85    ,//bSize: 0x01, bType: Global, bTag: Report ID
        0x03    ,//Report ID(0x3 )
        0x19    ,//bSize: 0x01, bType: Local, bTag: Usage Minimum
        0x81    ,//Usage Minimum(0x81 )
        0x29    ,//bSize: 0x01, bType: Local, bTag: Usage Maximum
        0x83    ,//Usage Maximum(0x83 )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x00    ,//Logical Minimum(0x0 )
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x01    ,//Logical Maximum(0x1 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x01    ,//Report Size(0x1 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x03    ,//Report Count(0x3 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x02    ,//Input(Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x05    ,//Report Count(0x5 )
        0x81    ,//bSize: 0x01, bType: Main, bTag: Input
        0x01    ,//Input(Constant, Array, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bit Field)
        0xC0    ,//bSize: 0x00, bType: Main, bTag: End Collection
        0x06    ,//bSize: 0x02, bType: Global, bTag: Usage Page
        0x01,
        0xFF ,//Usage Page(Undefined )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x01    ,//Usage(1)
        0xA1    ,//bSize: 0x01, bType: Main, bTag: Collection
        0x01    ,//Collection(Application )
        0x85    ,//bSize: 0x01, bType: Global, bTag: Report ID
        0x04    ,//Report ID(0x4 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x01    ,//Report Count(0x1 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x08    ,//Report Size(0x8 )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x01    ,//Logical Minimum(0x1 )
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x0A    ,//Logical Maximum(0xA )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x20    ,//Usage(32)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x23    ,//Usage(35)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x4F    ,//Logical Maximum(0x4F )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x21    ,//Usage(33)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x30    ,//Logical Maximum(0x30 )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x22    ,//Usage(34)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x03    ,//Report Count(0x3 )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x24    ,//Usage(36)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0xC0    ,//bSize: 0x00, bType: Main, bTag: End Collection
        0x06    ,//bSize: 0x02, bType: Global, bTag: Usage Page
        0x01,
        0xFF ,//Usage Page(Undefined )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x01    ,//Usage(1)
        0xA1    ,//bSize: 0x01, bType: Main, bTag: Collection
        0x01    ,//Collection(Application )
        0x85    ,//bSize: 0x01, bType: Global, bTag: Report ID
        0x05    ,//Report ID(0x5 )
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x01    ,//Report Count(0x1 )
        0x75    ,//bSize: 0x01, bType: Global, bTag: Report Size
        0x08    ,//Report Size(0x8 )
        0x15    ,//bSize: 0x01, bType: Global, bTag: Logical Minimum
        0x01    ,//Logical Minimum(0x1 )
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x0A    ,//Logical Maximum(0xA )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x20    ,//Usage(32)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x23    ,//Usage(35)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x4F    ,//Logical Maximum(0x4F )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x21    ,//Usage(33)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x25    ,//bSize: 0x01, bType: Global, bTag: Logical Maximum
        0x30    ,//Logical Maximum(0x30 )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x22    ,//Usage(34)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0x95    ,//bSize: 0x01, bType: Global, bTag: Report Count
        0x03    ,//Report Count(0x3 )
        0x09    ,//bSize: 0x01, bType: Local, bTag: Usage
        0x24    ,//Usage(36)
        0xB1    ,//bSize: 0x01, bType: Main, bTag: Feature
        0x03    ,//Feature(Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Non VolatileBit Field)
        0xC0    //bSize: 0x00, bType: Main, bTag: End Collection
};

 

 

Там же в видео и описана структура данных для передачи

Spoiler

image.png.09e332b720fe6cb37abd1473dba6cbab.png

Отправляю один символ R (код 0x15 согласно этому документу)

uint8_t USB_TX_BUF[8] = {0};
...
while(1) {
    USB_TX_BUF[3] = 0x15;
    USBD_HID_SendReport(&hUsbDeviceFS, USB_TX_BUF, 8);
    HAL_Delay(100);
    USB_TX_BUF[3] = 0x00;
    USBD_HID_SendReport(&hUsbDeviceFS, USB_TX_BUF, 8);
    HAL_Delay(100);
}

И ничего не отправляется, хотя lsusb выводит мое устройство, может кто сталкивался с подобным?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...