CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружены.

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружены.

Сообщение FantasyDD »

У меня камень stm32f103c8 уже неделю не могу найти рабочий пример CustomHID, а скомпилированый с SMT32FCubeMX CustomHID говорит в win8.1 64 “Запуск этого устройства невозможен. (Код 10) Найдена лишняя конечная коллекция, или конечные коллекции не обнаружены.”
В какую сторону рыть подскажите, очень очень надо передавать и принимать информацию с этого камня
Реклама
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение Pavel_1978 »

так попробуй http://habrahabr.ru/post/208026/
Реклама
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение FantasyDD »

В SMT32FCubeMX очень много вкусностей, поддержка как минимум 2 компиляторов самого Кейла и IAR.
В приведенном примере только EmBlocks, ну или все самому собирать в других средах, я понимаю для профессионала этот пример проще.
Исходники в архиве. https://mega.co.nz/#!1UAXlTLQ!XbTa2KTuo ... 3WoVNKEc0E
Что не так, подскажите, очень очень надо.
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение es131245 »

Поменяй размер буфера на 256. Мне помогло с CDC
static uint8_t buff_RX[256];
static uint8_t buff_TX[256];
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение FantasyDD »

Все разобрался, es131245 все таки чутье программиста у тебя, спасибо за наводку. Проблема была в размере отсылаемой информации.
в USB HID есть дескриптор протокола он описывает какую информацию мы передаем и получаем.

в файле usbd_custom_hid_if.c указать

Код: Выделить всё

__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
	
    0x06, 0x00, 0xff,              // USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    // USAGE (Vendor Usage 1)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x85, 0x01,                    //   REPORT_ID (1)
    0x09, 0x01,                    //   USAGE (Vendor Usage 1)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0xb1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
    0x85, 0x01,                    //   REPORT_ID (1)
    0x09, 0x01,                    //   USAGE (Vendor Usage 1)
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)

    0x85, 0x02,                    //   REPORT_ID (2)
    0x09, 0x02,                    //   USAGE (Vendor Usage 2)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0xb1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
    0x85, 0x02,                    //   REPORT_ID (2)
    0x09, 0x02,                    //   USAGE (Vendor Usage 2)
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)

    0x85, 0x03,                    //   REPORT_ID (3)
    0x09, 0x03,                    //   USAGE (Vendor Usage 3)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0xb1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
    0x85, 0x03,                    //   REPORT_ID (3)
    0x09, 0x03,                    //   USAGE (Vendor Usage 3)
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)

    0x85, 0x04,                    //   REPORT_ID (4)
    0x09, 0x04,                    //   USAGE (Vendor Usage 4)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x04,                    //   REPORT_COUNT (4)
    0x81, 0x82,                    //   INPUT (Data,Var,Abs,Vol)
    0xc0                           // END_COLLECTION
   
};
Далее нужно указать его длину
в файле usbd_conf.h

Код: Выделить всё

#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     79
дескриптор сконфигурирован под демо программу USB HID Demonstrator от ST

----------------------С ЭТОГО МОМЕНТА НЕ ПРОВЕРЯЛ --------------------------------

Далее нужно реагировать на эти события, в том же файле usbd_custom_hid_if.c

Код: Выделить всё

static int8_t CUSTOM_HID_OutEvent_FS  (uint8_t event_idx, uint8_t state)
{ 
  /* USER CODE BEGIN 6 */ 
  return (0);
  /* USER CODE END 6 */ 
}
гдето так

Код: Выделить всё

switch(event_idx)
{
case 1: /* LED1 */
(state == 1) ? HAL_GPIO_WritePin (GPIOD,GPIO_PIN_12 ,GPIO_PIN_SET ) : HAL_GPIO_WritePin (GPIOD,GPIO_PIN_12 ,GPIO_PIN_RESET ); 
break;

case 2: /* LED2 */
(state == 1) ? HAL_GPIO_WritePin (GPIOD,GPIO_PIN_13 ,GPIO_PIN_SET ) : HAL_GPIO_WritePin (GPIOD,GPIO_PIN_13 ,GPIO_PIN_RESET ); 
break;
case 3: /* LED3 */
(state == 1) ? HAL_GPIO_WritePin (GPIOD,GPIO_PIN_14 ,GPIO_PIN_SET ) : HAL_GPIO_WritePin (GPIOD,GPIO_PIN_14 ,GPIO_PIN_RESET );  
break;

default:
    HAL_GPIO_WritePin (GPIOD,GPIO_PIN_12 ,GPIO_PIN_RESET ); 
    HAL_GPIO_WritePin (GPIOD,GPIO_PIN_13 ,GPIO_PIN_RESET ); 
    HAL_GPIO_WritePin (GPIOD,GPIO_PIN_14 ,GPIO_PIN_RESET ); 
break;
}
return (0);

Еше раз спасибо за поддержку es131245 и Pavel_1978, и всем котам много валерьянки :)
Реклама
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение FantasyDD »

Я прав или нет? Передавать можно максимум 1 байт и его REPORT_ID.
Реклама
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение es131245 »

Слышал что 64 бита поэтому я на CDC :lol:
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

Re: CustomHID, SMT32FCubeMX, Kонечные коллекции не обнаружен

Сообщение FantasyDD »

Все верно, нагуглил :) , 64 байта и принимать и передавать можно.
Меня смущало что в CUSTOM_HID_OutEvent_FS (uint8_t event_idx, uint8_t state) переменная state один байт.
Код от CubeMX немного рассредоточен но вникнуть можно, немного подправил код и заработало, туда и обратно 64 байта - 1 idx .
Мне нравится HID своей гибкостью и если можно так сказать бездрайверностью :)
Ответить

Вернуться в «ARM»