Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB HID в STM32L052 работает через раз
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
digital
USB HID стек это HAL библиотека от Cube


По какой то причине USB HID в STM32L052 работает мягко говоря ненадежно, на одних машине работает безупречно, на других либо через раз, либо вообще не работает,
не работает это не проходи инициализация и устройство не определяется в ОС, в стеке не вызывается callback функция CUSTOM_HID_Init_FS, а аппаратно USB выдает прерывания об ошибки (и не только их)

от ОС (ubuntu win7 win XP не зависит), есть где безупречно работает и на linux и на win, есть где глючит и на linux и на win

это совсем негодный стек или что ?

лог
CODE

RESET
ESOF
ESOF
SUSP
ESOF
WKUP
RESET
CTR
SOF
DIR
ERR
CTR
DIR
ERR
ERR
CTR
DIR
RESET
CTR
SOF
DIR
ERR
SOF
ERR
ERR
CTR
DIR
CTR
DIR
RESET
SOF
ESOF
RESET
CTR
SOF
DIR
CTR
DIR
CTR
DIR
ERR
RESET
CTR
SOF
DIR
CTR
DIR
ERR
CTR
DIR
RESET
SOF
ESOF
RESET
CTR
SOF
DIR
ERR
SOF
ERR
CTR
SOF
DIR
CTR
DIR
SOF
ESOF
RESET
CTR
SOF
DIR
CTR
SOF
DIR
ERR
CTR
SOF
DIR
CTR
DIR
ERR
ERR
SOF
ESOF
ESOF
SUSP
ESOF



описание тегов
CODE

temp=hpcd->Instance->ISTR;

if (temp&USB_ISTR_CTR )printf("CTR\n"); //Correct TRansfer
if (temp&USB_ISTR_PMAOVR )printf("PMAOVR\n");// DMA OVeRunderrun
if (temp&USB_ISTR_ERR )printf("ERR\n"); // ERRor
if (temp&USB_ISTR_WKUP )printf("WKUP\n"); // WaKe UP
if (temp&USB_ISTR_SUSP )printf("SUSP\n"); // SUSPend
if (temp&USB_ISTR_RESET )printf("RESET\n"); // RESET
if (temp&USB_ISTR_SOF )printf("SOF\n"); // Start Of Frame
if (temp&USB_ISTR_ESOF )printf("ESOF\n"); // Expected Start Of Frame
if (temp&USB_ISTR_L1REQ )printf("L1REQ\n"); // LPM L1 state request
if (temp&USB_ISTR_DIR )printf("DIR\n"); // DIRection of transaction
if (temp&USB_ISTR_EP_ID )printf("EP_ID\n"); // EndPoint IDentifier
Kabdim
А разводка какая, демоплата или собственная?
Integro
Имел подобную проблему на stm32f042, вылечил ее дёрганьем встроенного PULLUP резистора. Но у меня была возможность за детектировать USB_5V!
При обнаружении 5V реинитил всю USB соre HAL'овскими функциями, но это результата не дало. Добавил сброс бита для PULLUP в _MSP_Init, полет нормальный.
digital
Цитата(Kabdim @ Dec 16 2015, 15:34) *
А разводка какая, демоплата или собственная?


своя плата, демок на stm32l052 с подключенным USB вроде нет

питание от USB через LDO 3.3В, VDD_USB подключено к 3.3В
линии D+ D- подключены через защиту TPD2S017, также были R и С которые убрал

Цитата(Integro @ Dec 16 2015, 16:50) *
Имел подобную проблему на stm32f042, вылечил ее дёрганьем встроенного PULLUP резистора. Но у меня была возможность за детектировать USB_5V!
При обнаружении 5V реинитил всю USB соre HAL'овскими функциями, но это результата не дало. Добавил сброс бита для PULLUP в _MSP_Init, полет нормальный.


не очень понимаю как это поможет мне, у меня питание от USB и при отключение снимается питание и соответствие pullup, который подключается потом при инициализации
у вас наверное питание не от usb было



оказалось на шине USB последовательно были резисторы аж 51 Ом, убрал их, стало существенно лучше, теперь всех компах на linux работает безупречно , но некоторых компьютерах с win также через пень
digital
вроде нашел, вся проблема в описание Дескриптор репорта, и linux при этом инициализирует и и можно посмотреть какие ошибки, а windows молча слетает инициализация (и то через раз)

проблема в в описание Дескриптор репорта в том что он слишком длинный 84 байта нормально, а 103 и больше уже не работает.


чтобы разобраться мне очень помогла статья http://habrahabr.ru/post/254251/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.