STM32 #5. USB - программируем класс - VCP, использование виртуального COM - порта.
Вставка
- Опубліковано 15 жов 2024
- #stm32 #программирование
Продолжаем программировать микроконтроллеры STM32. В этом видео разбираемся с интерфейсом USB и пишем программу, которая нам позволит работать напрямую с компьютером без всяких преобразователей уровней, т.е. напрямую через USB, используя класс Virtual COM Port и STM32CubeIDE.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам. Подробнее:
/ @nrelectronics
или через Яндекс-деньги:
money.yandex.r...
А также переводом по номеру карты:
4377-7237-6190-5714
👍
Колбэк на прием ещё бы посмотреть 😁
Не обещаю, может быть. Идея работы точно такая же как и с обычным UART.
Спасибо! Очень интересно!!!
Пожалуйста.
@@NRelectronics А почему не рассмотрели прием данных из CDC. Это осуществляется вызовом CallBack функции или как то иначе?
Я говорил об этом. Функцией CDC_Receivе_FS. И говорил почему не рассматриваем.
@@NRelectronics спасибо. Пересмотрю.
@@NRelectronics пересмотрел несколько раз. Ответа на вопрос не нашел.
оо. мой зов был услышан) спасибо
О да 😉 ожидайте продолжение 👍
Ещё не досмотрел видео, но поставил лайк потому что оно одназначно будет полезно многим. Почему-то тему USB устройств мало кто рассматривает и она нигде толком не "разжёвана". А деталей там много и они все важны! Я когда впервые столкнулся с задачей сделать катомное USB-устройство, думал, у меня мозг взорвётся! Есть огромная куча разрозненной информации и справочных данных, но нигде не написано как склеить это всё вместе и куда положить, чтоб потом всё дружно заработало именно так, как хотел разработчик.
Предлагаю автору в дальнейшем развить эту тему в следующих видео и обсудить в деталях кастомное USB-устройство, думаю, многим будет интересно создать что-то своё уникальное вместо аналога клавиатуры или COM-порта с Алика за 150 рублей.
Спасибо
Вообще те а полезна для многих, хот всё идёт от поставленной задачи в разработке конкретного изделия.
Попробую развить тему юсб на несколько видео и попробовать обязательно другие класссы или профили.
если посидеть разобраться не так уж и сложно, на регистрах сделал, для меня сложно было это распарсить запросы дискрипторов от хоста, и вторая проблема отправить дискриптор больше 64 байт, для этого написал очередь
Спасибо за очередное интересное видео!
Вам спасибо за оценку!
Интересно было бы узнать как по usb отправлять аудиоданные в компьютер. Stm32 определяется как аудиоустройство, но начать передавать данные (как звук) всё ещё не удаётся..
Профиль usb audio надо настраивать.
👍👍👍 Спасибо!
Пожалуйста 👍
Очень полезное видео для новичка! Снимаю шляпу)
Пожалуйста. Можете иногда донатить)
@@NRelectronics перевёл немножко по номеру карты.
Спасибо большое, очень приятно! И значит мой труд действительно нужен!
А я думаю кто за добрый человек меня порадовал с утра!
Скромное спасибо за ваш труд)
Вам спасибо за оценку. Можете иногда донатить)
Так просто запустить USB c VCP. Спасибо! Сделайте серию по USB.
Очень просто. Подумаю над серией.
Как круто! Я сюда случайно попал ))
На пользу главное 😉
Здравствуйте, можно ли программировать микроконтроллеры без самого МК? Есть ли какая либо симуляция МК (типа STM32, ESP32).
Здравствуйте.
Есть симулятор в Proteus и Keil. Рекомендую Proteus если нет отладки, но лучше железа нет, этот наверняка, софтом можно глюки словить которых нет в железе.
А что вы думаете на счёт использования clion вместо Cube IDE? Есть ли смысл clion использовать для разработки под STM32?
Вместо CubeIDE я использую только Keil.
Спасибо за видео! #ТОП! До чего дошел прогресс: пару кликов в код_генератор и усё... эх...
Спасибо.
USB такой же простой интерфейс как и UART. В HAL'e всё описано.
Не прошлой неделе столкнулся на работе с несовсем корректной работой кодогенератора. Серия g0, usart, dma. Генератор сначала проинициализировал dmamux, а потом включил его тактирование. Но в целом генератор маст хэв и очень помогает на первых этапах.
Спасибо за инфу, обращу внимание.
А как данные от пользователя получить то? CDC_Receive_FS по умолчанию нет в пространстве пользователя.
В халовской библиотеки есть подобная функция как раз, в стм32.
@@NRelectronics спасибо. Я уже переписал функцию CDC_Receive_FS так чтобы она копировала данные в кольцевой буфер. Откуда я уже читаю их при необходимости. Просто странно, что по умолчанию пользователю дается полуфабрикат который необходимо дорабатывать.
Такой вот HAL, такая библиотека.
Спасибо. Но у меня терминал не связывается с устройством после загрузки, надо обязательно отключить и снова включить USB коннектор. И отладка поэтому тоже не выходит. Плата Blue Pill.
Пожалуйста.
С блюпилом вечно проблемы, что поделать... Пока она самая дешёвая из отладок малых на М3, поэтому долго жить ещё будет.
@@NRelectronics 1. Проверял на stm32F103 и stm32f401: внутри функции static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) есть вызов: USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); Если этот вызов не закомментировать, то программа не работает.
2. Сделайте, пожалуйста урок по установке размеров стеков в CubeIde.
Соврал: на 401-м работает.
И на 103-м заработало! - )
отлично, я рад!
А как сделать два VCP на одном физическом usb, вот вопрос.
На одном физическом только один VCP.
@@NRelectronics если ктото обяснит как делается stm32-usb-dualcdc / stm32f103_dual_vcp это будет круто
Неделю назад проверял на F303 максимальную скорость CDC, больше 700 кбит/с не удалось передать на комп, как не крутил, и в F3 нет DMA на USB, в отличие от простых USARTов. Интересно как в F407.
Килобит или килобайт? Обычно больше 115200 б/с сам не использую.
@@NRelectronics Килобит, т.е. около 85 кбайт/с. Про целесообразность то понятно, но если, допустим, надо передать быстро данные на комп с АЦП, на компе же проще обработать или с SPI/I2C-датчиков.
Согласен, что, чем больше тем лучше. Для АЦП это действительно очень актуально. Максималку на F4 не задавался целью проверять пока.
Основная проблема урока - показать практическое применение. Я мышь делал. Долго думал, что прицепить к плате с минимальными затратами, но оставить 4 оси? В итоге просто сделал "движение влево"...
Конечно, теорию дать можно много и с разной степени глубины. А вот полезную практику пойди выкрутись. Мышь тоже сниму через некоторое время.
Теперь есть видео с движением во всё стороны мыши и скролингом 😉
@@NRelectronics Я делал на основе bluepill, там джойстика нет... А Ваше видео я уже посмотрел.
Спасибо за ваш труд. Можете сделать Multiple (или Dual) USB CDC?
С одного юсб два ком порта?
@@NRelectronics так точно. я тоже не знал что ето возможно на STM32, но вот как показывают екстерименты это работает, даже поставил пару hex-ов с гитхаба, вроди бы супер. Мне это тема очень интересно и за того что на одмом канале можно читать на пример сенсоры, или управлять чем то по UARTy, SPI, I2C, I2S, на другом подавать стрим данных (Камера, или даже скоросной АЦП). Изначально хотел это зделать на Cypress ez-usb fx2/fx3, но не могу найть хороший учитель ))) думаю это тема выстрелит, так как это очень хорошая тема и многим будет интеренсно. спасибо что отклинкулись нa мой комент.
на CMSIS написал работу с usb
в 350 строк уложился)
Молодцы! Многовато получилось🙂
Windows 10 ставит драйвер автоматически, если видит класс CDC. Cтандартный usbser.sys.
Для младших Windows надо самому писать (или найти готовый) файл *.inf
Спасибо. Как чувствовал что от десятки такая подстава...
В будущих видео можно качество сделать хотя бы 720p?
В этом работает с 1440p. Только что ещё раз проверил. Переключите у себя просто в настройках.
Наверно это было из-за только что залитого видео, т.к. ютуб сначала перекодирует в низких разрешениях, а потом появляется качество.
да, так бывает на ютубе
👍🏼
👍