|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
|||||||||||
Заводим USB STM32 на CMSIS03.08.2016, 20:38. Показов 20004. Ответов 34
Метки нет (Все метки)
Приветствую форумчан!
Вот уже 4-й месяц (с перерывами конечно :) ) бьюсь об USB, но он никак не хочет работать. Сейчас происходит следующее: После ресета и настройки EP0 получаю запрос от хоста GET_DESCRIPTOR, затем происходит прерывание по CTR_RX и я ухожу в ресет, а затем все повторяется еще три раза и ВУАЛЯ .... "Неопознанное устройство". Делал в KEIL5, но сегодня портировал и в KEIL4 (думал в программе дело), но толку нет. Примет виртуального COM порта с microtechnic запускается и определяется нормально, но мне нужно без STM-овских библиотек завести (не люблю я их :) ). Может кто-нибудь подсказать, что я делаю не так? P.S. Все переменные со словом test в названии служат исключительно для диагностики и не вносят изменений в процесс общения МК с хостом.
0
|
|||||||||||
| 03.08.2016, 20:38 | |
|
Ответы с готовыми решениями:
34
SPI stm32 CMSIS CMSIS STM32 проект в Keil - это просто STM32. CoIDE. Не скачиваеться CMSIS, что делать ? |
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|
| 03.08.2016, 23:31 | |
|
USB_ISTR &= ~USB_ISTR_CTR; - не имеет смысла, USB_ISTR_CTR - read-only
Как можно использовать нигические адреса напрямую и надеяться не запутаться? Ну а по вопросу - раз Keil, то значит отладчик. Пройтись и посмотреть, на каком месте ресетится.
0
|
|
|
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
|
|
| 03.08.2016, 23:35 | |
|
Извините не для холивара. С STMовскими либами завёл USB за 1 день. У Keil есть свои либы для работы с USB и RTX (RTOS от Keil) в Legacy pack.
0
|
|
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
||||
| 04.08.2016, 09:46 | ||||
Я так понимаю, что если что-то было бы не так с настройкой самой периферии, то запрос дескриптора до меня точно бы не дошел?
0
|
||||
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
| 04.08.2016, 11:11 | |
|
Если не хочется STMовские говнолибы, можно opencm3 использовать. Вот рабочая заготовка для USB-CDC.
0
|
|
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
|
| 04.08.2016, 14:13 | |
|
Хочу разобраться поближе к железу - без библиотек. Спасибо за ссылку, давно хотел попробовать "разобрать" эту библиотеку, но так руки и не доходили. Сегодня попробую поковырять, может что-то проясню для себя...
0
|
|
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|
| 04.08.2016, 21:20 | |
|
Я объявил структуры и маппил их на нужные куски буфера. В итоге используется одна нигическая константа - начало буфера. Для написания стека с нуля хватило двух недель по вечерам.
По поводу отладчика - плевать на хост. Убедись сначала, что у тебя на устройстве все работает. Но я без отладчика обошелся - светодиод и UART. Что еще видно невооруженным глазом - с EPR нужно очень аккуратно обращаться, они мне как минимум день работы стоили. Так работать не будет: USB_EP0R &= ~USB_EP_CTR_RX; // сброс CTR_RX USB_EP0R |= USB_EP_CONTROL;
0
|
|
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
||||
| 05.08.2016, 11:00 | ||||
P.S. И еще, буду очень благодарен за образцы рабочего кода настройки USB. В сети были примеры, но даже когда я делал строго по образцу, то ничего не работало (может сказываются какие-либо неведомые мне различии между сериями микроконтроллеров). Если код "секретный", то можно в ЛС - публиковать не буду...
0
|
||||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 05.08.2016, 13:39 | |
|
ysx, не связывайтесь с прерываниями, особенно вначале, делайте всё в поллинге, а потом когда заработает можно будет уже по-всякому украшать )
А в epr надо писать только "исключающим или" и лучше в одно касание, т.е. сбрасывть ctr и одновременно переводить ep в нужное состояние, а для ep0 лучше ещё и одновременно и rx, и tx. Вот нигические коды rx nak, tx nak - eor 0xA0A0 rx nak, tx votyd - eor 0xE0F0 rx votyd, tx nak - eor 0xF0E0 rx stall, tx stall - eor 0x9090 Другие комбинации не понадобятся
0
|
|
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|||||||||||||||||||
| 05.08.2016, 17:52 | |||||||||||||||||||
Да, это правильно. Но если у тебя конкретный затык - МК ресетится, то искать это проще всего по-шагово в отладчике. Когда дойдешь до конца обработчика без ошибок, тогда уже запускаешь еще раз и смотришь, что на хост пришло. Кстати, не стоит и пытаться использовать "обнаружено устройство" как средство дебагинга - как-раз при энумерации там куча шагов, малейшая ошибка на любом - "неизвестное устройство". Особенно в Винде - Линукс, по крайней мере, выдает лог после каждого шага, можно как-то ориентироваться. Гораздо продуктивнее смотреть сниффером, я пользуюсь Wireshark.
У EPR часть битов - только сброс записью нуля (т.е. в них всегда можно невозбранно писать 1); часть - только чтение (с ними вообще никаких проблем); часть - перевертыши (в них надо писать 0 чтобы не затронуть); часть - обычные r/w. Вот функции, которыми пользуюсь я:
0
|
|||||||||||||||||||
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
||
| 05.08.2016, 17:57 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
||
| 05.08.2016, 20:00 | ||
В RM работа по прерываниям, в поллинге всё проще, но моя фраза неудачная, согласен "надо" ---> "при поллинге лучше"
0
|
||
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
|||||
| 06.08.2016, 17:01 | |||||
0
|
|||||
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
||
| 06.08.2016, 17:16 | ||
Ну тогда держи линк в ЛС. Лицензия (пофиг-нафиг) прилагается. Публиковать для всех не хочу не потому, что там какие-то секреты, а просто не хочу людей напрасно обнадеживать - это все исключительно экспериментальный код, работающий ровно настолько, насколько он протестирован. Еще и меняется кардинально раз в месяц.
0
|
||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
||
| 06.08.2016, 21:31 | ||
Моё дело предложить, ваше - соглашаться или нет, да - идём дальше, нет - дальше без меня
0
|
||
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
||
| 06.08.2016, 22:54 | ||
В чем тогда разница и почему нужно менять способ доступа к битам регистра?
0
|
||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 06.08.2016, 23:31 | |
|
Поллинг, потому что дальше будет тяжёлая отладка в реальном времени, с логом в памяти и т.п. развлечениями по полной программе.
Регистры epr это не обычные регистры хранения, usb в сотых и трёхсотых stm32 это фактически отдельный контроллер в контроллере, полный автомат, а регистры epr это непосредственное управление этим автоматом. Любое сочетание битов, которое туда попадает, немедленно отрабатывается, поэтому в некоторые битовые поля туда нельзя писать промежуточные состояния как это обычно делается - сначала всё в 0, потом то что надо в 1, а надо устанавливать и нули, и единицы одновременно, иначе контроллер usb успеет перейти в ложное промежуточное состояние.
0
|
|
|
Rimork117
|
|
| 13.08.2016, 18:31 | |
|
ysx Привет. Слушай тема интересная сам начал USB копать только для STM32F407. на отладочной платке. С теорией ознакомился, в принципе достаточно чтобы начать копать. И вот тут наткнулся на то что толкового объяснения(примеров я так и не нашел), даже с ЛИБАми тоже ничего путевого найти не могу. Смотрю ты решил сам все сделать..это хорошо...Ты мне подскажи инфу по USB брал с Reference_manual на МК и User_manual UM0424 ??..
|
|
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
|
| 13.08.2016, 23:18 | |
|
У самого пока времени нет заниматься. Могу предложить для прочтения корявенький перевод: http://badymbid.ru/usb-stm32l1xx-ds/ и еще вот такую статейку: http://badymbid.ru/stm32l-usb-... t-nachalo/. Мне очень помогло на первых началах (хотя я так и не продвинулся далеко :) ).
0
|
|
|
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 23
|
|
| 22.08.2016, 20:20 | |
|
Пока продвинулся до запроса дескриптора конфигурации и напоролся на грабли. Взял дескриптор со страницы: http://badymbid.ru/stm32l-usb-cdc-virtu ... t-nachalo/ Там 67 элементов, а буфер расчитан на 64. Как мне его правильно отправить?
0
|
|
| 22.08.2016, 20:20 | |
|
Помогаю со студенческими работами здесь
20
STM32F4 USB CMSIS STM32 Использование 3G USB модемов (USB Host) Arduino как host usb, написание своего драйвера для обмена информацией с stm32 по usb STM32 и USB (CMSIS) STM32 и USB Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|