Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Generic Usb Hid Device На Stm32F4Discovery
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
hd44780
Привет всем .

Озаботился тут созданием USB HID устройства на данном проце.
Находил с интернете массу примеров HID устройств, эмулирующих джойстики, мыши, клавиатуры, пульты ДУ и прочую дребедень... Но мне не нужны все эти клавиатуры, джойстики и пульты ....

Нужно Generic устройство - принять от компа 64 байта, отправить в комп 64 байта. И всё.

Такой пример я нашёл только один - http://we.easyelectr...4-discovey.html , как пишет автор, на основе примера от более младших STM32. Этот пример включает/выключает светодиодики платы по команде с компа и шлёт в комп данные, когда нажимают кнопку. Это работает.
Но у него размер и входящего и исходящего блока данных - 2 байта вместо доступных 64 (видимо автор память экономит, ему почти 200 кил RAM этого камня мало wacko.gif ) - форменное издевательство короче .

Решил я его пример переделать. Поменял VID, PID, чтобы моя прога его увидела, нашёл дескриптор конфигурации, исправил 2 макроса, описывающих размеры конечных точек, прошил. Работоспособность лампочек и кнопки не нарушилась, моя прога ими исправно управляет, на кнопку реагирует, но чтение свойств устройства показывает InputReportByteLength=OutputReportByteLength=2, т.е. размер репортов не изменился.

Нашёл я HID дескриптор, изменил его. Убрал описания кнопок, лампочек, оставил только описания входного и выходного репортов.
Получилось следующее:

CODE

#define CUSTOMHID_SIZ_REPORT_DESC 32

........................

__ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END =
{
// Global Usage Page - Vendor-defined
0x06, 0xFF, 0x00, // USAGE_PAGE (0xFF00)

// Collection: Application
0x09, 0xFF, // USAGE (vendor defined)
0xA1, 0x01, // COLLECTION (Application)

// Input report: Vendor-defined
0x09, 0xFF, // USAGE (vendor defined)
0x95, HID_IN_PACKET, // REPORT_COUNT = 64 - Размер конечной точки
0x75, 8, // REPORT_SIZE = 8
0x15, (unsigned char) -128, // 0x15,
0x25, (unsigned char) 127, // 0x25,
0x81, 0,
// Output report: vendor-defined
0x09, 0xFF, // USAGE (vendor defined)
0x95, HID_OUT_PACKET, // REPORT_COUNT = 64 - Размер конечной точки
0x75, 8, // REPORT_SIZE = 8
0x15, (unsigned char) -128, // 0x15
0x25, (unsigned char) 127, // 0x25
0x91, 0, //

0xC0 // End collection
}; // CustomHID_ReportDescriptor


Устройство опознаётся, винда не ругается, но чтение свойств даёт InputReportByteLength=OutputReportByteLength=65 (!) и все попытки что-либо послать в железяку даёт ошибку 87 - Invalid Parameter. Хоть и шлю я ему 2 байта ...
На чтении тупо виснет без каких-либо ошибок. Прогу приходится диспетчером задач вырубать.

Сильно подозреваю, что западло заключено в этих 65 байтах и сидит оно в HID дескрипторе, но не пойму что именно там не так.
Сам по себе HID дескриптор вроде правильный, на древнейшем AT91SAM7S256 2006 года выпуска работает с песнями .

Помогите пожалуйста, кто может.
Спасибо.

ЗЫ.
Утилиту HID Descriptor Tool 13-летней давности видел, знаю, но вот никак за эти 13 лет не врублюсь, что там к чему. То ли я идиот, то ли писали её идиоты . К тому же вылетает она с какими-то сбоями типа "Can't read memory at address 0x00000000" ....

Можно, конечно, сделать CDC, проэмулировать COM-порт (кстати делал, работает sm.gif ), это может и лучше с т.з. быстродействия, но не хочется, чтобы железка торчала в списке портов.
andrewlekar
Возьмите LUFA, там есть Generic HID. Для вашего проца наверняка есть или порт или своя библиотека.
hd44780
Нет, LUFA только для АВРов, типа ObDev. портирована только на какие-то LPC ...

Вот тут, для проца STM32F103 есть та либа с 2-байтовыми посылками для мигания лампочками, из которой всё и идёт.
Называется "STM32F10x and STM32L1xx USB full-speed device library" sm.gif) . Другого я пока не нашёл.


Ссылка в 1-м посте порченная.
Нормальная вот - http://we.easyelectronics.ru/STM32/primery...4-discovey.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.