Установить драйверы автоматически
Бесплатное ПО
Доступные драйверы (1)STM Virtual COM Port
- Тип драйвера: USBDevice
- Производитель: libwdi
- Версия: 6.1.7600.16385 (10 фев 2017)
- Файл *.inf: stm32_virtual_com_port.inf
<nobr>Windows Vista</nobr>, <nobr>7</nobr>, <nobr>8</nobr>, <nobr>8.1</nobr>, <nobr>10</nobr>
Драйверы для STM Virtual COM Port собраны с официальных сайтов компаний-производителей и других проверенных источников. Официальные пакеты драйверов помогут исправить ошибки и неполадки в работе STM Virtual COM Port (сетевые устройства). Скачать последние версии драйверов на STM Virtual COM Port для компьютеров и ноутбуков на Windows.
Скачать драйвер
Скачать и обновить нужные драйверы автоматически
Версия: 1.1.2.1563 для Windows 7, 8, 10 Бесплатное ПО Скачивая программу, Вы принимаете условия Пользовательского соглашения и Политик конфиденциальности. В комплекте идет опциональное ПО В комплекте идет опциональное ПО
- Yandex Browser
- Opera Browser
- Avast Free Antivirus
- McAfee Webadvisor
- Disk-O
- Yandex Советник
- Tesla Browser
- Tesla Start
Связанные статьи:STM32 и USB. Часть 1. Проект для Keil. В прошлой части я рассказал как примерно должен выглядеть проект-заготовка для Keil девайса с USB, дал ссылку на мой проект и рассказал как его настроить под практически любую плату с STM32. В проекте был реализован интерфейс с двумя bulk-ендпойнтами (in и out), с моим «кастомным» протоколом, при помощи которого можно включать, выключать и заставлять светоиоды мигать с нужными временами горения/не горения. Ну и выложил небольшую программу для всего этого:
Jungo WinDriver
http://www.jungo.com/st/windriver_usb_pci_driver_development_software.html Заметьте, что поддерживает не только USB, но и PCI, и многое другое. Весьма удобная штука. Запускаем Wizard, выбираем по VID-PID наш девайс:





libusb-win32
https://sourceforge.net/apps/trac/libusb-win32 Распаковываем и в папочке bin лежит программка inf-wizard.exe. Тоже визард для генерации инф-файла, а заодно и всех остальных файлов, необходимых для установки драйвера. Запускаем, выбираем наш девайс, сохраняем inf и прочее в отдельную папочку:

LibUsbDotNet
https://sourceforge.net/projects/libusbdotnet/ Нет, вы только вдумайтесь: .NET-надстройка над библиотекой, портированной из линукса под win32! Конечно, изврат извратом, но мне понравилось. Именно при помощи этой либы я и написал программу из предыдущей статьи. Работать с ендпойнтами так же просто. Ну а дальше реализуем небольшой протокол, пишем-читаем ендпойнты и радуемся мигающим светодиодам 🙂 Только не забываем одну тонкость: весь обмен с USB-девайсом происходит по инициативе хоста. Поэтому, данные не попадут в хост до тех пор пока хост сам не захочет их прочитать. Вот и все.
Итого
Вот, в принципе, все необходимое для того чтобы создать на STM32 примитивный USB-девайс. Весь обмен сводится к чтению и записи в ендпойнты и разбору того, что же туда все-таки пришло и что с этим делать. Лично мне кажется этот вариант проще, чем реализация на девайсе стандатного класса. Как всегда, файлы с проектом находятся тут. Ну а в следующий раз, когда дойдут руки, будем поднимать USB Mass Storage, причем поверх уже сделанного интерфейса для светодиодов, т.е. составное USB-устройство 🙂
Забиваем.
Как я уже говорил, пока я сторонник библиотечных решений. Памяти хватает, байтовыцарапыванием заниматься рано. Так что пойдем по легкому пути. STM предоставила нам библиотеку STM32F10x and STM32L1xx USB full-speed device library, версия 3.3.0 Описание к ней: документ CD00158241 — UM0424 User manual Точные названия я привожу на случай если на сайте производителя будет какая-нибудь реорганизация и ссылки станут невалидными. Не забываем дрова виртуального ком-порта. У меня вообще-то оно само все нашлось, но я много чего ставил от STM, может там в комплекте и пришлись. Также нам пригодятся следующие стандарты USB 2.0 SpecificationUSB CDC В составе библиотеки есть пример как раз организации виртуального COM-порта. Правда там он сделан как мост USART-USB, но мы же не боимся трудностей? Цель этой статьи — разобрать приложение, делающее следующее:
Поджигаем
Собираем проект из нужных нам библиотек: CMSIS, SPD, USB. Дерево проекта прилагаю.
Неторопливо курим
Начнем с раскуривания библиотеки от STM
Первая затяжка — usb_conf.h
Самые общие настройки библиотеки. Указано сколько у нас будет endpoints (а нам их надо 4 штуки — нулевой для начального конфигурирования устройства, один для команд, один для приема и один для передачи). Также расписаны, какие нам будут нужны коллбэки. Все взаимодействие библиотеки и пользовательской программы построено на обратных вызовах: в случае возникновения какого-либо события вызывается функция с заданным названием. А уже содержание этой функции — проблема разработчика. Нам будет нужен SOF_CALLBACK – сигнал начала фрейма (Start Of Frame). По нему будем выплевывать то, что накопилось в буфере передачи. Также резервируем еще два коллбэка — на прием и передачу. По приему символа будем мигать светодиодами, чтобы уж как-нибудь задействовать канал приема. Упс, кончился файл. Короткая получилась затяжка. Файл берем из примера, ничего не меняем.
Вторая затяжка — usb_desc.h / usb_desc.c
В этих файлах находятся дескрипторы устройства и эндпоинтов. Информация по стандартным дескрипторам есть в стандарте USB, в разделе 9.6 Standard USB Descriptor Definitions Специфические дескрипторы описаны в USB CDC, раздел 5 (так и называется Descriptors), Эти все тонны текста в стандартах для того, чтобы USB стала действительно Universal. Поэтому тщательно выведена классификация устройств и интерфейсов — чтобы глянув на дескриптор хост сразу понял, что с этим делать. Особо подробно разбирать смысла не вижу — это не характерно для STM32, это общая боль разработчиков USB устройств. Файл берем из примеров, ничего не меняем.
Продолжение дескрипторов — usb_prop.h / usb_prop.c
В этих файлах описана таблица реакции на запросы. Все запросы к устройству пронумерованы и стандартизованы. В этих файлах определяется массивы функций Device_Property, User_Standard_Requests и просто массивы String_Descriptor, например. Это все используется ядром. Когда в устройство приходит определенный запрос, например «Выдай мне дескриптор устройства», то ядро посмотрит в таблице, какая функция обрабатывает этот запрос, вызовет эту функцию, а оно уже отработает: Опять же, берем файл из примеров.
Прерываемся — usb_istr.h / usb_istr.c
Тоже два коротеньких файла. В них находится то, что надо вызывать при приходе прерывания от USB. Поскольку прерывание одно, то по значениям флагов определяется событие и вызывается соответствующий коллбэк. Прерывание будет настраиваться в файле hw_config.c, обработчик выглядит очень просто: void USB_LP_CAN1_RX0_IRQHandler(void) { USB_Istr(); } его можно разместить в файлах stm32f10x_it.*, а в данном проекте, чтобы не растекаться мысью по древу, я его включил в файл main.c И тут особо ничего не меняем, все как в примере.
Питание — usb_pwr.h / usb_pwr.c
Здесь все, что касается питания. По стандарту, устройство может быть переведено в режим спячки, тогда, если оно питается от порта, нужно позаботиться об отключении жрущей периферии. Поскольку у нас плата питается отдельно, то особого смысла в управлении питанием нет. Просто устройство формально переводится в состояние SUSPENDED. Ничего не меняем, файл из примеров.
Коллбэки — usb_endp.c
Этот файл я переписал, поскольку у нас не будет работы с USART, как это было в примере. Приведу код с комментариями:
Работа с железом — hw_config.h / hw_config.c
В этом файле собраны функции инициализации периферии, прерываний, функции управления светодиодами и работы с буфером отправки. USB-порт и подтяжки на моей плате сделаны по такой схеме:
Выдыхаем — printf()
Но мы же хотим, чтобы вывод функции printf() перенаправлялся в наш свежесозданный COM-порт. Подключаем и офигеваем от количества ошибок линковки: А тут все просто — стандартная библиотека ввода-вывода подразумевает работу с файлами, но в больших системах есть ОС, которая собственно и занимается организацией файлов для программ пользователя. А поскольку у нас нет никакой ОС, то библиотека вполне справедливо недоумевает «А что же мне делать-то?» Вот, чтобы это обойти, в проект включается файл newlib_stubs.c В нем находятся функции-заглушки ко всем вышеперечисленным ошибкам. Но и кроме этого, есть одна функция, которую нам и надо переписать, чтобы весь вывод шел в USB: Видим, что как раз и вызывается наша функция USB_Send_Data() Все, компилим, собираем, запускаем. Архив с проектом прилагаю — это на случай, если кто не заметит маленькие буковки внизу 🙂Используемые источники:
- https://ru.drvhub.net/devices/network/stm/virtual-com-port-10
- http://we.easyelectronics.ru/stm32/stm32-i-usb-chast-2-nemnogo-o-drayverah-i-softe.html
- http://we.easyelectronics.ru/stm32/stm32-organizaciya-virtualnogo-com-porta.html
Обзор программ для создания загрузочной флешки Windows 10
USB устройство не опознано Windows 10
Как записать образ на флешку в Windows 10. Бесплатные утилиты Rufus и Unetbootin
Cоздание загрузочной флешки Windows 10 (Rufus и Windows USB/DVD Download Tool)
Как исправить ошибку USB-порты не работают в Windows 10
Что делать, если компьютер перестал видеть флешку