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

stm32f103c8(Atollic) проблема с CustomHID(hal, CubeMX)

Добрый день всем!

Сгенерировал проект в CubeMX(v6.0.0) с использованием USB Custom HID, прием данных с хоста работает, а вот данные с устройства на хост не отправляются. USBTrace пишет STATUS_NOT_SUPPORTED(картинка в приложении). Может кто сталкивался с данной проблемой, или знает ее решение.

Снимок.PNG

Изменено пользователем l_fin_l

Поделиться сообщением


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

А девайс-менеджер что у вас показывает? Желтый треугольничек или всё нормально? Т.е. драйвер-то подцепился? Виртуальный COM-порт появился?

Поделиться сообщением


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

31.10.2020 в 02:28, Xenia сказал:

А девайс-менеджер что у вас показывает? Желтый треугольничек или всё нормально? Т.е. драйвер-то подцепился? Виртуальный COM-порт появился?

ну он без COM-порта, это просто HID. В Диспетчере устройств все отображается, драйвер подцепляется, могу слать пакеты на устройство, а вот с устройства на хост не получается

 

Поделиться сообщением


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

Вот так работает

/* USB report descriptor */
const uint8_t usbDescReport[] =
{
    0x06, 0xFF, 0x00,       /* USAGE_PAGE (Vendor Page: 0xFF00) */
    0x09, 0x01,             /* USAGE (1) */
    0xa1, 0x01,             /* COLLECTION (Application) */
//    0x15, 0x00,            /* LOGICAL_MINIMUM (0) */
//    0x26, 0xff, 0x00,      /* LOGICAL_MAXIMUM (255) */
    0x75, 0x08,             /* REPORT_SIZE bits*/
    0x95, USB_HID_SIZE-1,   /* REPORT_COUNT bytes*/
    /* IN -->  1+1+62 bytes */
    0x85, IN_REPORT_ID,     /* REPORT_ID */
    0x09, IN_REPORT_ID,     /* USAGE */
//   0x95, USB_IN_SIZE-1,  /* REPORT_COUNT */
    0x81, 0x02,         //   INPUT (Data,Variable,Abs)
    /* OUT 1+1+62 bytes */
    0x85, OUT_REPORT_ID,    /* REPORT_ID*/
    0x09, OUT_REPORT_ID,    /* USAGE */
//   0x95, USB_OUT_SIZE-1,  /* REPORT_COUNT */
    0x91, 0x02,         //   OUTPUT(Data, Variable,Abs
// feature in-out report
    0x85, FEATURE_REPORT_ID,/* REPORT_ID */
    0x09, FEATURE_REPORT_ID,    /* USAGE */
//   0x95, USB_OUT_SIZE-1,  /* REPORT_COUNT */
    0xB1, 0x02,         //   Feature (Data, Variable,Abs)

    0xc0 	                /* END_COLLECTION	*/
  }
/** BOOTLOADER function */
void usbHidRead(void)
{
    uint8_t buf[USB_HID_SIZE];
    uint16_t cnt,i;

    cnt = usbReadOutEp(buf,FreeCnt(&rxFifo));

    if(cnt != 0)
    {
        if(buf[1] > 0)
        {
            /** buf[0] Report ID  buf[1] - data length  */
            for(i=0; i<buf[1]; i++)
                InsChar(buf[i+2]);
            // usbSetUartIrq();
        }
    }
}
/** BOOTLOADER function */
void usbHidSend(void)
{
    uint8_t buf[USB_HID_SIZE];
    uint16_t cnt=0;
    buf[0] = IN_REPORT_ID; /** Report ID */
    for(cnt=2; cnt<USB_HID_SIZE;)
    {
        if(WaitCnt(&txFifo) == 0)
            break;
        else
            buf[cnt++] = ReqChar();
    }
    if(cnt > 2)
    {
        buf[1] = cnt-2;
        pUsb.sendFlag = 1;
//       prtBuf("SendToHost: ",(void *)(buf+1),cnt-1);
        usbWriteInEp(buf,USB_HID_SIZE);
    }
    else
        pUsb.sendFlag = 0;
}

 

Поделиться сообщением


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

Вообще-то после "Collection (Application)" должно еще раз быть "Usage Page", оттого и Logical Minimum/Maximum не работают. Т.е. "Usage Page" должно заключать в себе каждый отдельный блок. Только "Report_ID" может быть его старше и находиться снаружи. Например, у меня оно так:

  0x05, 0x01,      //  Usage Page (Generic Desktop)
  0x09, 0x04,      //  Usage (Joystick)
  0xA1, 0x01,      //  Collection (Application)
  0x85, 0x01,      //  Report ID (1)

// Axis
  0x05, 0x01,      //  Usage Page (Generic Desktop)
  0x09, 0x30,      //  Usage (X)
  0x09, 0x31,      //  Usage (Y)
  0x09, 0x32,      //  Usage (Z)
  0x09, 0x33,      //  Usage (A0)
  0x09, 0x34,      //  Usage (A1)
  0x09, 0x35,      //  Usage (A2)
  0x09, 0x37,      //  Usage (A3)
  0x09, 0x36,      //  Usage (A4)
  0x16,0x00,0x00,  //  Logical Minimum (0)
  0x26,0x00,0x10,  //  Logical Maximum (4096)
  0x35, 0x00,      //  Physical Minimum (0)
  0x46,0x00,0x10,  //  Physical Maximum (4096)

  0x75, 0x10,      //  Report Size (16)
  0x95, 0x08,      //  Report Count (8)
  0x81, 0x02,      //  Input (Data, Variable, Absolute)

// Buttons
  0x05, 0x09,      //  Usage Page (Buttons)
  0x19, 0x01,      //  Usage Minimum (1)
  0x29, 0x80,      //  Usage Maximum (128)
  0x15, 0x00,      //  Logical Minimum (0)
  0x25, 0x01,      //  Logical Maximum (1)
  0x75, 0x01,      //  Report Size (1)
  0x95, 0xC0,      //  Report Count (192)
  0x81, 0x02,      //  Input (Data, Variable, Absolute)

// Feature
  0x85, 0x40,      //  Report ID (0x40)
  0x05, 0x08,      //  Usage Page (LEDs)
  0x09, 0x4B,      //  Usage (Generic Indicator)
  0x75, 0x08,      //  Report Size (8)
  0x95, 0x3F,      //  Report Count (63)
  0xB1, 0x00,      //  Feature (Data, Array, Absolute)

  0xC0,            //  End Collection (Application)

 

Поделиться сообщением


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

А я просто стащил набор дескрипторов из соответствующего оборудования и слепил "что было": https://github.com/eddyem/stm32samples/blob/master/F1-nolib/USB_HID/usb_lib.c#L77

Отлично работает без всяких халов-спл и т.п.

Поделиться сообщением


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

Спасибо всем кто откликнулся, проблему решил. Сделал все так, как описывается в данном видео, вдруг кому пригодится

 

Поделиться сообщением


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...