21. STM32. Програмування STM32F103. USB

Содержание

На тестовій платі STM32F103 маємо microUSB роз’єм. І він служить не тільки для подачі живлення. STM32F103 може працювати з USB у якості різних USB — пристроїв. Як USB HID пристрій, у тому числі — як клавіатура чи мишка, як віртуальний послідовний порт, USB Mass Storage, тощо. Ми розглянемо лише пару прикладів. У першому — комп`ютер буде сприймати STM32F103 як віртуальний послідовний порт. У другому прикладі STM32F103 емулюватиме клавіатуру і мишку. STM32F103 буде рухати мишкою, (звісно на екрані :), та емулювати натискання кнопок на клавіатурі.

Опис роботи USB

  • USB пристрої підключаються до Хоста (частіше за все, це — комп’ютер). Хост – головний, він усім керує.
  • USB пристрій не може бути ініціатором передачі даних. Тобто, він сидить і мовчить, поки його не запитають. Спитали чи надіслали дані, — він відповів чи прийняв дані і замовк.
  • USB пристрій має унікальний ідентифікатор. Кожний USB пристрій може мати декілька кінцевих точок, кожна з яких має унікальну адресу. Саме через кінцеві точки передаються дані чи команди.
  • USB пристрій має Дескриптор. Це масив даних, у якому міститься опис пристрою. Завдяки дескриптору, операційна система отримує інформацію про USB пристрій та використовує для спілкування з ним відповідний драйвер.
  • Хост ідентифікує USB-пристрій по ID вендора и ID продукту (Vendor ID — VID и Product ID — PID)

Бібліотека STM32 USB FS Device Lib

STM32_Clock_01

Для роботи з USB, існує бібліотека для STM32. Я використовую версію STM32_USB-FS-Device_Lib_V4.0.0. Архів з бібліотекою містить декілька прикладів. Нажаль, для CoIDE проектів немає. Зверніть увагу, що тактування USB інтерфейсу вимагає фіксованої частоти 48МГц. Я наведу два, на мій погляд, найбільш цікавих приклади. Перший: емуляція віртуального порту.

Віртуальний послідовний порт

Клавіатура і мишка

USB Mass Srorage

Захист USB

STM32F103C8_01

Нажаль, STM32 виявився слабким перед електростатичними зарядами на лініях USB (а можливо і не тільки на лініях USB). Ви з легкістю можете спалити порт мікроконтролера і навіть не помітити цього. Комп’ютер просто перестане розпізнавати STM32 як USB пристрій. Усі інші частини мікроконтролера можуть далі справно працювати і Вам може здатися, що це проблеми у контактах, чи у прошивці контролера. Нажаль, таке трапляється. Якщо пильно роздивитися цю плату, Ви не помітите нічого, що могло б захистити мікроконтролер від згубного впливу електростатичної напруги. Ніжки, які відповідають за USB, підключені до роз’єму через резистори 22 Ом. Для захисту USB від статичних розрядів стандартно використовують супресори або TVS-диод (Transient Voltage Suppressor). Є спеціалізовані мікросхеми для USB — це збірка супрессорів з низькою ємністю, які не впливають на швидкість передачі даних. Деякі мікросхеми, які працюють с USB, мають вбудовані захисні супресори, але STM32 — ні. Тому рекомендую подбати про безпеку USB у своїх розробках. Як вихід, можна зробити захисні перехідники — USB "тато-мама", а між ними — захисні діоди. Саме так я і зробив. Це вирішило мої проблеми зі статикою, особливо взимку, і не лише щодо STM32. В мене на комп’ютері часто висла мишка при підключенні до USB будь чого, навіть простого USB кабелю. Таке рішення хоча і є дієвим, та на практиці виявилось не зовсім зручним. Детальніше про захист USB читайте тут: http://www.mirpu.ru/interface/86-usb/179-xaschita-usb.html Бажаю успіхів!

Можна перевіряти bDeviceState. У прикладах саме так і робиться. Можуть бути наступні варіанти:

Саме після CONFIGURED, якщо я не помиляюсь, можна спокійно вмикати живлення решті частині Вашого пристрою.

Дуже дякую. Спробую, відпишусь.

PS Чи дозволяє функціонал сайта отримувати сповіщення про оновлення та відповіді на коментарі?

Дуже дякую. Спробую.

Якаксь біда з коментарами тут. Втретє пишу за день, не хочу публікуватися,


Источник: blog.avislab.com