Страница 1 из 1

STMF103 и USB, как запустить?

Добавлено: Пт сен 06, 2013 00:57:24
КАШАК
Доброго времени суток.

Пытаюсь разобраться с USB на STM32F103VCT6. Для начала хочу запустить как HID устройство. Скачал STM32_USB-FS-Device_Lib_V4.0.0. Открыл пример Custom_HID и мягко говоря обалдел... Библиотеки универсальные и там такого напутано, что начинающему разобраться довольно проблематично, плюс ко всему куча кода для конкретных проектов на конкретных демо платах (там и ADC и DMA и внешних прерываний целый мешок да еще и на SPL все). На AVR это было раз в 10 проще и понятнее. Вот я и решил обратиться сюда за помощью. Кто сталкивался с подобной задачей? Или может у кого-то есть простой пример реализации USB?

Re: STMF103 и USB, как запустить?

Добавлено: Пт ноя 15, 2013 17:33:33
DX168B
Ковырял USB на STM32F103CBT6. От библиотек отказался, ибо столько места в камне небыло (там еще куча других задач)
Разбирал модуль USB методом ручной записи в регистры. Скажу сразу. Модуль USB там такой-же сложный, как и сама библиотека и все это усугубляется отсутствием апноутов по аппаратному модулю.

Там все устроено хитропопым способом. У МК в адресном пространстве есть 512к памяти, через которую происходит обмен между МК и модулем USB.
В эту память надо положить дескрипторы буферов для обмена данными (дескриптор буфера нулевой конечной точки, дескриптор буфера первой точки и так далее для всех используемых конечных точек)
Дескрипторы эти в основном содержат адрес буфера приема (буфер должен располагаться в этой-же памяти), его размер, адрес буфера передачи и его размер.

Короче, я собираюсь писать статью для РадиоКота на эту тему. Статья очень востребована, ибо инфы в инете я не нашел.

Re: STMF103 и USB, как запустить?

Добавлено: Пт ноя 15, 2013 18:22:09
dosikus
DX168B писал(а): Статья очень востребована, ибо инфы в инете я не нашел.
В том же Keil есть примеры для плат от того же Keil , где все прозрачно .
В чем проблемы то ?

Re: STMF103 и USB, как запустить?

Добавлено: Пт ноя 15, 2013 21:14:21
DX168B
Смотрел я пример от Кейла, а конкретно - реализацию USB Mass Storage.
Мало того, что пример не заработал на ихней-же плате, так еще и мерзкое оформление высокоуровневого слоя взаимодействия с USB.
У меня небыло желания копаться в тысячах слоев кода, по этому я написал все с нуля и не жалею нисколько.

Как работать с регистрами - нигде нет ни единой статьи. Не говорю уже про описание работы модуля. Есть только скудная информация в ДШ и не более.
Зная модуль, его тонкости и правила работы с ним, отладка будет куда проще.
Да и новичкам разбирать библиотеки будет проще, ибо будут знать, что искать и где и как оно должно работать.

Так что статья нужна, как не крути. Тем более сайт всетаки для начинающих.

Re: STMF103 и USB, как запустить?

Добавлено: Сб ноя 16, 2013 10:08:16
balmer
Да! Ждем статьи. Я хоть и вставляю почти везде USB на STM32, но многие тонкие моменты не понимаю.

USB из стандартных библиотек после компиляции занимает примерно 8 КБ. Это конечно не мало, но и не скажу что фатально много.

Re: STMF103 и USB, как запустить?

Добавлено: Сб ноя 16, 2013 19:34:38
DX168B
Ну тогда готовлю черновики и начинаю потихоньку писать. :)

Re: STMF103 и USB, как запустить?

Добавлено: Сб ноя 16, 2013 20:37:06
brutal
вообще-то usb сам по себе непростой интерфейс для самостоятельной реализации...
Поэтому если хотите разобраться то сложные примеры не должны вас вводить в ступор =)
Иначе лучше переключиться на что-нить по проще

Re: STMF103 и USB, как запустить?

Добавлено: Пн ноя 25, 2013 13:36:37
DX168B
Смысл с этих примеров, если не понятна работа аппаратного модуля.
Ничего там сложного нет, просто информация скудная. Модуль устроен почти так-же, как и на МК от Atmel.
Те-же регистры конечных точек и тот-же буфер пакетов, ничего архисложного.
Просто, когда что-то не работает, у многих начинаются пляски с бубном. (У меня поначалу тоже было)
Были даже проблемы с выравниванием данных ввиду особенностей буфера пакетов, причем в стандартной библиотеке.
Сейчас же я смотрю в код стандартной библиотеки и понимаю каждую строчку. Есть там конечно лишнее, к примеру - принудительное переключение статуса конечной точки в EP_RX(TX)_NAK.
Лишнее оно потому, что модуль, после обращения хоста к точке, сам переключает точку в это состояние. (NAK hand.. на любое обращение к конкретной точке, причем ответ аппаратный)
Не смотря на все это, в статье я буду рассматривать работу именно на примере STM32_USB-FS-Device_Driver, чтобы было проще и доступнее, чем писать самому тонны кода.
Ну и опишу организацию модуля и опишу все регистры и биты, а так-же работу с выделенной памятью (буфером). Регистров там мало (в отличии от STM32F407xxxx) и все они понятны для среднего ума.

ЗЫ: Статья написана на 35% (Мог бы быстрее, но времени свободного маловато)

Re: STMF103 и USB, как запустить?

Добавлено: Пн ноя 25, 2013 18:44:04
balmer
Задам тогда мучающий меня вопрос.

Тоже пользуюсь стандартной библиотекой. Скопипастил исходники с Vitrual Com Port примерчика.

Все бы хорошо, но наблюдается такое поведение:
При первом подключении USB все нормально. При втором и последующем подключении не приходят первые 2-3 пакета с данными. Причем тестировал этот код и на STM32F103, STM32F107, STM32L152. Везде одинаковая картина. Уже приспособился к такому поведению - просто посылаю пакетики и жду пока не придет ответ.

Но хочется таки понять в чем дело. Вдруг это стандартная ошибка на которую все натыкаются....

Re: STMF103 и USB, как запустить?

Добавлено: Вс дек 15, 2013 01:10:52
OldWarrior
Так когда всё таки статья будет, очень нужно и очень интересно.