Пытаюсь разобраться с USB на STM32F103VCT6. Для начала хочу запустить как HID устройство. Скачал STM32_USB-FS-Device_Lib_V4.0.0. Открыл пример Custom_HID и мягко говоря обалдел... Библиотеки универсальные и там такого напутано, что начинающему разобраться довольно проблематично, плюс ко всему куча кода для конкретных проектов на конкретных демо платах (там и ADC и DMA и внешних прерываний целый мешок да еще и на SPL все). На AVR это было раз в 10 проще и понятнее. Вот я и решил обратиться сюда за помощью. Кто сталкивался с подобной задачей? Или может у кого-то есть простой пример реализации USB?
STMF103 и USB, как запустить?
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Доброго времени суток.
Пытаюсь разобраться с USB на STM32F103VCT6. Для начала хочу запустить как HID устройство. Скачал STM32_USB-FS-Device_Lib_V4.0.0. Открыл пример Custom_HID и мягко говоря обалдел... Библиотеки универсальные и там такого напутано, что начинающему разобраться довольно проблематично, плюс ко всему куча кода для конкретных проектов на конкретных демо платах (там и ADC и DMA и внешних прерываний целый мешок да еще и на SPL все). На AVR это было раз в 10 проще и понятнее. Вот я и решил обратиться сюда за помощью. Кто сталкивался с подобной задачей? Или может у кого-то есть простой пример реализации USB?
Пытаюсь разобраться с USB на STM32F103VCT6. Для начала хочу запустить как HID устройство. Скачал STM32_USB-FS-Device_Lib_V4.0.0. Открыл пример Custom_HID и мягко говоря обалдел... Библиотеки универсальные и там такого напутано, что начинающему разобраться довольно проблематично, плюс ко всему куча кода для конкретных проектов на конкретных демо платах (там и ADC и DMA и внешних прерываний целый мешок да еще и на SPL все). На AVR это было раз в 10 проще и понятнее. Вот я и решил обратиться сюда за помощью. Кто сталкивался с подобной задачей? Или может у кого-то есть простой пример реализации USB?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
- Реклама
Ковырял USB на STM32F103CBT6. От библиотек отказался, ибо столько места в камне небыло (там еще куча других задач)
Разбирал модуль USB методом ручной записи в регистры. Скажу сразу. Модуль USB там такой-же сложный, как и сама библиотека и все это усугубляется отсутствием апноутов по аппаратному модулю.
Там все устроено хитропопым способом. У МК в адресном пространстве есть 512к памяти, через которую происходит обмен между МК и модулем USB.
В эту память надо положить дескрипторы буферов для обмена данными (дескриптор буфера нулевой конечной точки, дескриптор буфера первой точки и так далее для всех используемых конечных точек)
Дескрипторы эти в основном содержат адрес буфера приема (буфер должен располагаться в этой-же памяти), его размер, адрес буфера передачи и его размер.
Короче, я собираюсь писать статью для РадиоКота на эту тему. Статья очень востребована, ибо инфы в инете я не нашел.
Разбирал модуль USB методом ручной записи в регистры. Скажу сразу. Модуль USB там такой-же сложный, как и сама библиотека и все это усугубляется отсутствием апноутов по аппаратному модулю.
Там все устроено хитропопым способом. У МК в адресном пространстве есть 512к памяти, через которую происходит обмен между МК и модулем USB.
В эту память надо положить дескрипторы буферов для обмена данными (дескриптор буфера нулевой конечной точки, дескриптор буфера первой точки и так далее для всех используемых конечных точек)
Дескрипторы эти в основном содержат адрес буфера приема (буфер должен располагаться в этой-же памяти), его размер, адрес буфера передачи и его размер.
Короче, я собираюсь писать статью для РадиоКота на эту тему. Статья очень востребована, ибо инфы в инете я не нашел.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
В том же Keil есть примеры для плат от того же Keil , где все прозрачно .DX168B писал(а): Статья очень востребована, ибо инфы в инете я не нашел.
В чем проблемы то ?
Смотрел я пример от Кейла, а конкретно - реализацию USB Mass Storage.
Мало того, что пример не заработал на ихней-же плате, так еще и мерзкое оформление высокоуровневого слоя взаимодействия с USB.
У меня небыло желания копаться в тысячах слоев кода, по этому я написал все с нуля и не жалею нисколько.
Как работать с регистрами - нигде нет ни единой статьи. Не говорю уже про описание работы модуля. Есть только скудная информация в ДШ и не более.
Зная модуль, его тонкости и правила работы с ним, отладка будет куда проще.
Да и новичкам разбирать библиотеки будет проще, ибо будут знать, что искать и где и как оно должно работать.
Так что статья нужна, как не крути. Тем более сайт всетаки для начинающих.
Мало того, что пример не заработал на ихней-же плате, так еще и мерзкое оформление высокоуровневого слоя взаимодействия с USB.
У меня небыло желания копаться в тысячах слоев кода, по этому я написал все с нуля и не жалею нисколько.
Как работать с регистрами - нигде нет ни единой статьи. Не говорю уже про описание работы модуля. Есть только скудная информация в ДШ и не более.
Зная модуль, его тонкости и правила работы с ним, отладка будет куда проще.
Да и новичкам разбирать библиотеки будет проще, ибо будут знать, что искать и где и как оно должно работать.
Так что статья нужна, как не крути. Тем более сайт всетаки для начинающих.
I am DX168B and this is my favourite forum on internet!
Да! Ждем статьи. Я хоть и вставляю почти везде USB на STM32, но многие тонкие моменты не понимаю.
USB из стандартных библиотек после компиляции занимает примерно 8 КБ. Это конечно не мало, но и не скажу что фатально много.
USB из стандартных библиотек после компиляции занимает примерно 8 КБ. Это конечно не мало, но и не скажу что фатально много.
- Реклама
Ну тогда готовлю черновики и начинаю потихоньку писать. 
I am DX168B and this is my favourite forum on internet!
вообще-то usb сам по себе непростой интерфейс для самостоятельной реализации...
Поэтому если хотите разобраться то сложные примеры не должны вас вводить в ступор =)
Иначе лучше переключиться на что-нить по проще
Поэтому если хотите разобраться то сложные примеры не должны вас вводить в ступор =)
Иначе лучше переключиться на что-нить по проще
Tais sa gueule et écoute un silence
Смысл с этих примеров, если не понятна работа аппаратного модуля.
Ничего там сложного нет, просто информация скудная. Модуль устроен почти так-же, как и на МК от Atmel.
Те-же регистры конечных точек и тот-же буфер пакетов, ничего архисложного.
Просто, когда что-то не работает, у многих начинаются пляски с бубном. (У меня поначалу тоже было)
Были даже проблемы с выравниванием данных ввиду особенностей буфера пакетов, причем в стандартной библиотеке.
Сейчас же я смотрю в код стандартной библиотеки и понимаю каждую строчку. Есть там конечно лишнее, к примеру - принудительное переключение статуса конечной точки в EP_RX(TX)_NAK.
Лишнее оно потому, что модуль, после обращения хоста к точке, сам переключает точку в это состояние. (NAK hand.. на любое обращение к конкретной точке, причем ответ аппаратный)
Не смотря на все это, в статье я буду рассматривать работу именно на примере STM32_USB-FS-Device_Driver, чтобы было проще и доступнее, чем писать самому тонны кода.
Ну и опишу организацию модуля и опишу все регистры и биты, а так-же работу с выделенной памятью (буфером). Регистров там мало (в отличии от STM32F407xxxx) и все они понятны для среднего ума.
ЗЫ: Статья написана на 35% (Мог бы быстрее, но времени свободного маловато)
Ничего там сложного нет, просто информация скудная. Модуль устроен почти так-же, как и на МК от Atmel.
Те-же регистры конечных точек и тот-же буфер пакетов, ничего архисложного.
Просто, когда что-то не работает, у многих начинаются пляски с бубном. (У меня поначалу тоже было)
Были даже проблемы с выравниванием данных ввиду особенностей буфера пакетов, причем в стандартной библиотеке.
Сейчас же я смотрю в код стандартной библиотеки и понимаю каждую строчку. Есть там конечно лишнее, к примеру - принудительное переключение статуса конечной точки в EP_RX(TX)_NAK.
Лишнее оно потому, что модуль, после обращения хоста к точке, сам переключает точку в это состояние. (NAK hand.. на любое обращение к конкретной точке, причем ответ аппаратный)
Не смотря на все это, в статье я буду рассматривать работу именно на примере STM32_USB-FS-Device_Driver, чтобы было проще и доступнее, чем писать самому тонны кода.
Ну и опишу организацию модуля и опишу все регистры и биты, а так-же работу с выделенной памятью (буфером). Регистров там мало (в отличии от STM32F407xxxx) и все они понятны для среднего ума.
ЗЫ: Статья написана на 35% (Мог бы быстрее, но времени свободного маловато)
I am DX168B and this is my favourite forum on internet!
Задам тогда мучающий меня вопрос.
Тоже пользуюсь стандартной библиотекой. Скопипастил исходники с Vitrual Com Port примерчика.
Все бы хорошо, но наблюдается такое поведение:
При первом подключении USB все нормально. При втором и последующем подключении не приходят первые 2-3 пакета с данными. Причем тестировал этот код и на STM32F103, STM32F107, STM32L152. Везде одинаковая картина. Уже приспособился к такому поведению - просто посылаю пакетики и жду пока не придет ответ.
Но хочется таки понять в чем дело. Вдруг это стандартная ошибка на которую все натыкаются....
Тоже пользуюсь стандартной библиотекой. Скопипастил исходники с Vitrual Com Port примерчика.
Все бы хорошо, но наблюдается такое поведение:
При первом подключении USB все нормально. При втором и последующем подключении не приходят первые 2-3 пакета с данными. Причем тестировал этот код и на STM32F103, STM32F107, STM32L152. Везде одинаковая картина. Уже приспособился к такому поведению - просто посылаю пакетики и жду пока не придет ответ.
Но хочется таки понять в чем дело. Вдруг это стандартная ошибка на которую все натыкаются....
- Сообщения: 1
- Зарегистрирован: Вт май 24, 2011 20:29:41


