Уже которыq день бьюсь лбом об стол и пытаюсь раскопать инфу по поводу запуска и настройки USB HID на данном чипе, примеры которые даются на сайте ST компилируются, но вот почему то сразу же после заливки в чим прога зависает в обработке исключения, в майне даже и строчки не успевает выполнить.
Если есть у кого то намётки проекта или же готовый поделитесь или подскажите как оживить сей девайс и запустить HID USB.
Пытался расковырять http://habrahabr.ru/post/163689/ что то не особо идёт.
Сразу оговорюсь, интересует именно этот чип и именно USB HID.
Буду благодарен за любую информацию.
devprodest писал(а):Доброго времени суток, кошаки)
Уже которыq день бьюсь лбом об стол и пытаюсь раскопать инфу по поводу запуска и настройки USB HID на данном чипе, примеры которые даются на сайте ST компилируются, но вот почему то сразу же после заливки в чим прога зависает в обработке исключения, в майне даже и строчки не успевает выполнить.
У меня такое было, когда неправильно выставлен размер ОЗУ. Стек по умолчанию в конце ОЗУ, если размер выставить слишком большой, то стек получается за пределами и вылетает сразу исключение.
Скачал ещё раз пакет примеров для USB, выбрал Custom USB, пробую TrueSTUDIO. Всё компилируется, заливается. При отладке зависает на процедуре USBInit() в месте вызова её из main, даже не заходит в неё... не понятно.
Настройки памяти правильные.
Но однако адрес где упало, как бы подразумевает, что где-то 64кб памяти указано. По одному адресу непонятно где. Надо хоть кусочек asm файла где упало и stack trace если он не пустой. Чему равен регистр R13 который указывает на стек в ARM?
balmer писал(а):Настройки памяти правильные.
Но однако адрес где упало, как бы подразумевает, что где-то 64кб памяти указано. По одному адресу непонятно где. Надо хоть кусочек asm файла где упало и stack trace если он не пустой. Чему равен регистр R13 который указывает на стек в ARM?
К сожалению уже не могу сказать, те файлы снёс, после того как скачанный проект вроде как заработал. Вопрос почему затык в прямо перед юсбинит()
Если есть рабочий код, был бы очень признателен, а то уже практически неделю маюсь, а всё на месте топчусь. Или пнуть в правильном направлении было бы тоже весьма кстати.
Дабы не создавать новую тему спрошу здесь.
Пытаюсь запустить usb на своей самодельной плате. чип stm32f103cr8. плата минималистична контроллер пара выводов и usb кабель с внешней подтяжкой. Кварц не стандартный как для таких устройств ( такой кварц нужен для других целей на этой плате) 12Мгц. Использую пример из библиотеки ST JoistickMouse, тактирование изменил под свои требования, проблема в том что при подключении к компьютеру он пишет неопознанное устройство и все.
Если я правильно понимаю работу юсб, после подключения шлейфа хост должен послать команду сброса и после конфигурации эндпоинтов получить дескрипторы.
Путем всяких тестов выяснилось что программа не уходит на прерывание описанное в файле stm32f10x_it.c
Обфускатор писал(а):
Может я что то делаю не так? подскажите как правильно.
А у тебя модуль USB работает на частоте 48 Mhz?
Определил ли ты глобально дефайн HSE_VALUE?
Поменял ли ты выставление умножения/деления для PLL в файле system_stm32f10x.c?
Частота ядра должна быть 32 или 48 мгц.
И правильно ли у тебя выставлено:
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); //для 32 Мгц
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1); //для 48 Мгц
RCC_DeInit();
RCC->CFGR &=~((RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL)); // Предочистка.
RCC->CR |= RCC_CR_HSEON; //Включаем тактовый генератор HSE
while(!(RCC_CR_HSIRDY)); //Ждем его стабилизации
FLASH->ACR &= ~FLASH_ACR_LATENCY; // Предочистка регистров для работы с флеш памяти.
FLASH->ACR |= FLASH_ACR_LATENCY_1; // Задержка чтения/записи во флеш. Если 24Мгц< SystemCoreClock <= 48Мгц, пропускать 1 такт.
RCC->CFGR|=RCC_CFGR_PLLSRC_HSE; // Тактируем PLL от HSE (12 MHz).
RCC->CFGR|=RCC_CFGR_PLLMULL4; // Умножать частоту на 4 (12*4=48 MHz).
RCC->CR |= RCC_CR_PLLON; // Запускаем PLL.
while ((RCC->CR & RCC_CR_PLLRDY)==0) {} // Ожидание готовности PLL.
RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
RCC->CFGR |= RCC_CFGR_SW_PLL; // Выбираем в качестве источника тактирования системной шины выход PLL.
while ((RCC->CFGR&RCC_CFGR_SWS)!=0x08) {} // Ожидание переключения на PLL.
RCC->CFGR|=RCC_CFGR_USBPRE; //установить предделитель USB x1
RCC->APB1ENR |= RCC_APB1ENR_USBEN; // Включить тактирование USB
После этих настроек теоретически на модуль USB Должно подаваться 48Мгц. На шинах таймеров точно 48Мгц присутствует проверял миганием светодиода.
Определил ли ты глобально дефайн HSE_VALUE?
Поменял ли ты выставление умножения/деления для PLL в файле system_stm32f10x.c?
Эм.. я просто перенастроил все тактирования после вызова функции SetSysClock(). Или так нельзя?
прескалер перед модулем usb x1 т.е. RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1); //для 48 Мгц соблюдено.
Еще такой вопрос выводы USB как нибудь инициальзируются (альтернативные функции там или еще чего) , просто в одном примере от ST все порты делают как IN во втором вообще ничего не трогают только подают тактирование на порт с USB
В схеме реализовано программное отключение/включение usb ( подтяжка линии D+ к плюсу через резистор , управляемая p-n-p транзистором)
Еще возник такой вопрос: какой период следования импульсов при передачи последовательности данных? Хватит ли логического анализатора на 24 Мегасемпла для отлавливания пакетов на линиях или нужен анализатор с большей выборкой?
Обфускатор писал(а):В схеме реализовано программное отключение/включение usb ( подтяжка линии D+ к плюсу через резистор , управляемая p-n-p транзистором)
Еще возник такой вопрос: какой период следования импульсов при передачи последовательности данных? Хватит ли логического анализатора на 24 Мегасемпла для отлавливания пакетов на линиях или нужен анализатор с большей выборкой?
А вас в детстве не учили не влезать в чужой разговор? тема не о вашем чипе и не о вашем способе подключения.
Я извиняюсь , конечно! Но в других темах этого не обсуждают. Проблема решилась, с программой все нормально, оказалось на плате загнулся один контакт и зацепил другой, визуально этого не было видно, причем этот контакт вообще никак не относился ни usb ни тактовым линиям. Вообщем проблема решилась. Еще раз прошу прощения . Продолжайте ваш диалог.