Ch32f103c8t6 не работает usb

STM32 и USB

Балуюсь тут с китайским STM32F103C8T6

Не пойму, USB на нём разведён, системой видится. Но не определяется как опознанное устройство. Гугление на тему программирование обычно приводит только решения с подключением внешнего USB-UART. Понятно, что не проблема, но зачем тогда этому модулю полная разводка USB? Ведь не для одного же питания? 🙂

USB на нём разведён, системой видится. Но не определяется как опознанное устройство.

С девайсом не работал, потому пара вопросов:

1) ты его хочешь использовать как usb-host, подключая к нему что-то, или как usb-устройство, подключая его к компьютеру

2) если второе, то lsusb -v в студию

3) подозреваю, что usb на устройстве еще сконфигурировать надо

Так тебе же надо написать что-нибудь чтобы у тебя железка по этому usb отвечала. А что ты хочешь то вообще?

Ну, типа, я думал, что как с другими dev-board, его можно прямо «из коробки» по USB прошивать. Как всякие NodeMCU/ATtiny86/Arduino/etc.

Т.е. USB тут только для подключения внешней периферии? А почему тогда у него формат для втыкания внешнего хоста (обычный micro-USB), а не сам он хостового формата (не помню, как формально этот вид USB-разъёма зовётся)? Типа, периферию через OTG-кабель втыкать?

Т.е. USB тут только для подключения внешней периферии?

Насколько я знаю, как запрограммируешь так и будет

Ну, типа, я думал, что как с другими dev-board, его можно прямо «из коробки» по USB прошивать. Как всякие NodeMCU/ATtiny86/Arduino/etc.

Там стоит usb->uart на плате. Т.е. их usb только в качестве uart работать умеет. Здесь же, как я понял, выведен usb самого контроллера. И в качестве чего ты контроллер запрограммируешь, в качестве того он и будет работать. Можешь в качестве uart, а можешь чтобы он изображал мышь или usb-storage, или принтер, или что еще тебе придумается. Но это все надо запрограммировать

Ну, типа, я думал, что как с другими dev-board, его можно прямо «из коробки» по USB прошивать. Как всякие NodeMCU/ATtiny86/Arduino/etc.

Т.е. USB тут только для подключения внешней периферии? А почему тогда у него формат для втыкания внешнего хоста (обычный micro-USB), а не сам он хостового формата (не помню, как формально этот вид USB-разъёма зовётся)? Типа, периферию через OTG-кабель втыкать?

Суде по плате(видел только сверху) у тебя там нету st-link’а или какого-нибудь иного программатора.

Глянь схему этого поделья.

И нет, usb в stm32 ты можешь и для втыкание в пека использовать.

И да, тебе нужно что-нибудь написать чтобы оно хоть как-то работало. Реализовать Usb-cdc например.

Источник

Полноценная GDB отладка через USB на плате BluePill (STM32F103С8T)

В данной статье речь пойдет о программировании и полноценной отладке микроконтроллера STM32F103C8T6 через USB.

Однажды, от коллег поступило предложение о участии в IoT проекте. Система предусматривала однопоточный запуск скриптов. Отладка производилась с помощью логов. И тут мне в голову пришла мысль о полноценной удаленной отладке проектов под микроконтроллеры.

Для начала, нужно было опробовать все на прототипе. В качестве отладочной платы была выбрана почти всем знакомая BluePill на микроконтроллере STM32F103. Поскольку на данной отладке имеется интерфейс MicroUSB, было принято решение в прототипе использовать именно этот интерфейс. В будущем предполагался переход на UART подключенный к GSM модулю.

Требовалось реализовать загрузчик, имеющий несколько функциональных блоков. Задачу можно разбить на следующие подзадачи:

Реализация драйвера интерфейса USB со стороны микроконтроллера.

Разработка кода обновления прошивки микроконтроллера с помощью GDB.

Разработка GDB сервера.

Вывод отладочных логов.

Обо всем по порядку. Для прототипирования был реализован загрузчик (bootloader).

1. Первым был реализован протокол отладочного интерфейса. Т.е. USB. В качестве класса USB-устройств был выбран WinUSB. Для его реализации я воспользовался исходным кодом библиотеки libopencm3. Для этого необходимо описать дескриптор устройства, дескрипторы конфигурации, интерфейса, конечных точек, а так же дескрипторы содержащие строки «MSFT100» и «WINUSB». Последние два дескриптора требуются для определения устройства как WinUSB. Конфигурация конечных точек (USB-Endpoint) выбрана следующим образом control endpoint 0, bulk out endpoint 1, bulk in endpoint 81, bulk in endpoint 82. Конечная точка с номером ноль присутствует во всех устройствах USB, endpoint 1- применяется для передачи команд в загрузчик микроконтроллера, endpoint 81 — для передачи ответов на команды на компьютер, а 82 — для передачи текстовой информации (логов). Подробнее о USB можно прочитать в публикациях из разряда «USB in a NutShell».

2. Требовался код работы с флеш памятью. Вы можете подумать что тут все просто. Это так и не так одновременно. Первая проблема, которая возникла,- невозможность стереть флеш память в обработчике прерывания. Дело в том, что архитектура Cortex M предусматривает два режима работы процессора. Thread и Handler. В первом режиме процессор находится после старта, а так же когда нет активных прерываний. В Handler mode исполняются все обработчики исключений и прерываний. К сожалению, стирание flash-памяти на STM32F103C8T6 в Handler режиме приводит к корректному статусу стирания памяти, но сама память не стирается.

Читайте также:  Как настроить духовой шкаф аристон механический

Эта проблема решается посредством запуска кода стирания Flash в Thread режиме. Сделать это можно, так, как обычно происходит в операционных системах. Для этого нужно понимать что такое контекст потока. Контекст потока, — это состояние набора регистров процессора, стека, описывающее конкретный момент работы системы. При входе в обработчик прерывания контекст текущего работающего потока сохраняется, а при выходе из обработчика, он восстанавливается и выполнение программы продолжается. При переключении задач в ОС, по определенному алгоритму, в определенный момент, восстанавливается контекст текущей активной задачи. Нам, при выходе из обработчика, нужно лишь восстановить «свой» контекст, для вызова функции стирания Flash памяти.

Другая проблема является более сложной. Заключается она в том, что, при работе с флеш памятью может происходить выполнение обработчика прерывания, той прошивки, которая находится под отладкой. Эта проблема решается несколькими действиями перед стиранием памяти. Первое что требуется сделать,- заблокировать вызов любых обработчиков прерываний, используемых в отлаживаемой прошивке. Или проще говоря тех, которые не используются в Bootloader-e. Но даже в этом случае команда на стирание памяти может поступить в то время, когда один из обработчиков уже выполняется. Для решения этого вопроса я решил воспользоваться пошаговым режимом работы процессора и «по шагам» вывести процессор из всех обработчиков прерываний. После этого флеш-память можно стирать.

3. Требовалось реализовать GDB-сервер. Я воспользовался исходным кодом проекта BlackMagic, для обработки команд приходящих из среды разработки. На самом деле приходящих от приложения arm-none-eabi-gdb. Далее команды транслировались в команды бинарного протокола, который используется в процессе взаимодействия с микроконтроллером. Нижний уровень GDB-сервера выполнен с использованием библиотеки WinUSB.

4. После того как прототип заработал, я пришел к решению добавить вывод отладочной информации с использованием printf. Для передачи отладочных сообщений использовал endpoint 82. На самом деле 8 — это единица в старшем разряде, указывающая направление передачи данных по шине USB в сторону компьютера (Host-а).

Но таким образом функцией printf можно было пользоваться только в bootloader-е. А как же быть с отлаживаемым приложением? Обычно, для взаимодействия с операционной системой, используются прерывания/системные вызовы. Так, BIOS использует int13, ms-dos int21. Мы же на микроконтроллере воспользуемся системным вызовом, т.е. командой «svc». При выполнении этой ассемблерной инструкции в прошивке, будет вызван обработчик прерывания SVC, находящийся в bootloader-е. Что нам и требовалось сделать.

Bootloader использует 10Kb flash памяти, но зарезервировано 16Kb с целью расширения функционала. Так же используется 4K оперативной памяти. Оперативная память применяется для хранения буферов USB, контекста прерванного процесса, а так же как память стека обработчиков прерываний. Итого. Остается 16Kb из 20Kb оперативной памяти и 48Kb flash памяти. Хотя на самом деле Flash-память в контроллере STM32F103C8T6 не 64Kb а 128Kb,- соответственно остается 112Kb.

В процессе отладки прошивки, возникает один интересный момент. Если, в отладчике делать шаг на потоке, а в это время произойдет вызов обработчика прерывания, то отладчик шагнет в обработчик прерывания. Чтобы подобного не происходило, в коде я использовал step режим для выхода из обработчика прерываний. При этом, если отладчик в прерывании наткнется на точку останова, будет произведена остановка отладки на точке останова.

И наконец, — что поддерживается:

Загрузка прошивки на плату с использованием GDB. Т.е. непосредственно из среды программирования/отладки. В моем случае это STM32CubeIDE. Адрес вектора прерываний должен находится по адресу 0x8004000.

Просмотр и изменение регистров процессора в контексте отлаживаемой прошивки.

Просмотр и изменение памяти.

Просмотр и изменение регистров периферии.

Восемь точек останова.

Режим пошаговой отладки.

Отладочная печать в консоль GDB-сервера.

В отлаживаемой прошивке нельзя изменять адрес вектора обработчика прерываний. Хотя можно добавить системный вызов setVectorBase, что решит вопрос. Нельзя изменять приоритеты прерываний на произвольные значения. Приоритет должен находиться в диапазоне 0x40 — 0xF0. Нельзя запрещать прерывания systick, прерывание usb, и прерывания DebugMon, SvcHandler, а так же всех FaultHandler-s.

Касательно исходных кодов. Это был быстро-прототип. Что то в нем сделано на скорую руку, что то возможно не совсем корректно. Но принцип работы проверен.

Источник

Не Распознается Usb Устройство На Stm32F102 Usb Fs Lib.

Автор: SWAP, 22 ноября 2013 в STM32

Рекомендованные сообщения

Присоединяйтесь к обсуждению

Вы оставляете комментарий в качестве гостя. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Сообщения

Похожие публикации

Здравствуйте!
Простите, если не сюда пишу.
Не подскажите маркировку кабеля для USB?
Мне нужно спаять USB кабель для телефона. Зарядка и передача данных.
Не спрашиваю где его взять, от каких устройств и т.д. Мне нужно купить новый кабель.
Подойдут с сечением 24, 22 AWG.
Если с экранированием, то вообще будет огонь.
Если еще и мягкий, то круче огня будет

Читайте также:  Не работает канва ком

Интересует зарубежная и отечественная маркировка.

Буду благодарен советам!

Здравствуйте, у меня вопрос по правильной распиновке для прошивки приставки
1) Видел вариант с «прямой», то есть 5В на 5В, D+ на D+ и т.д.
https://www.youtube.com/watch?v=3SgPDCK_HW4
https://www.frontx.com/pro/c526p3.gif
Спаял как раз по нему (фото прилагается), при подключении приставки загорается индикатор, ток есть, но данные не передаются (никакие usb порты при подключении не сгорели)
1) Также вариант с «зеркальной», 5В на GND, D+ на D-
https://www.youtube.com/watch?v=QITmktkameg
Хотел спросить у сведущих людей, как все-таки правильно.
Приставка TANIX TX9S.

добрый день
проект v-usb
выкус из спецификации/инета/форумов:
— реализация не полностью соответствует стандарту
— работа на 100% не гарантируется
— питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в «притирочку» . ) :))
у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.

как следствие стабильно может работать только при «определенных условиях»
в планах поработать с библиотекой.
для начало решил «набросать» альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)

достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)
tag: v-usb, usb, avr, atmega328p, avr-gcc, linux/mac-osx
NO atmega32u4, NO arduino pro micro etc.

Источник

Arduino.ru

STM32F103C8T6 не определяется как COM порт

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Здравствуйте. Сделал всё по этой теме (https://istarik.ru/blog/arduino/102.html#mapleport), но после прошивки через Flash Loader Demonstrator компьютер не определяет STM32F103C8T6 как com порт, пишет Unknown device в диспетчере устройств (win7). Драйвера устанавливал из архива в теме. Как можно исправить это?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Попробуйте перепаять R10 на 1-2кОм. Помогает.

И ещё — Попробуйте на неизвестное устройство поставить драйвер из папки с драйверами.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Но там R10 уже стоит на 1.5 кОМ. Я её прошивал в прошлом году. Поморгал светодиодом с горем пополам ,все время ругалось при компиляции . Была система ХП. СЕйчас стоит 7. Жду из китая новую платку , может другая прошъётся .

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

У меня их десяток разных. И с 10к и с 1.5к. Ни одну не смог запустить в режиме с загрузчиком. Да в общем то и не старался. Не получилось с ходу — и ладно. Она через ST-Link шьётся замечательно и при этом после старта на загрузчике не тормозит.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Аналогично, только даже не пробовал шить без ST-Link.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ну, вообще-то варианты загрузки через ST-Link и через USB являются взаимоисключающими. Изначально — шьется через ST-Link, если перепрошить загрузчик, будет шиться через USB, но перестанет через ST-Link.

Судя по тому, что шьется через ST-Link, там просто нет ардуиновского загрузчика.

PS. Через UART шьется в любом случае.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ну, вообще-то варианты загрузки через ST-Link и через USB являются взаимоисключающими. Изначально — шьется через ST-Link, если перепрошить загрузчик, будет шиться через USB, но перестанет через ST-Link.

Судя по тому, что шьется через ST-Link, там просто нет ардуиновского загрузчика.

PS. Через UART шьется в любом случае.

разве v bluebpill’e нет ситемного загрузчика который есть «с завода» и являеться частью кремния?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вот «с завода» именно через UART. Но довольно геморройно: переставить перемычку, нажать кнопку, запустить программу прошивки, и, главное, нигде не перепутать последовательность.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вот вот. Когда получил первые платы ST-Linkа у меня ещё не было. Собственно на одну через UART влили прошивку ST-Linka c танцами и бубнами, зато потом жизнь сразу стала легче.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

У меня их десяток разных. И с 10к и с 1.5к. Ни одну не смог запустить в режиме с загрузчиком.

Аналогично, только даже не пробовал шить без ST-Link.

У меня напротив — среди двух десятков таких плат от разных продавцов ни с одной не было проблем с подключением по ком-порту. СТ-линк есть, но я им пользуюсь при работе с ИАРом или Кубом, а в ардуино ИДЕ прошиваю исключительно через ком-порт.

Не знаю, какие у вас проблемы — по гайду от HWMan все отлично работает, даже резистор на PA12 менять не обязательно.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вот «с завода» именно через UART. Но довольно геморройно: переставить перемычку, нажать кнопку, запустить программу прошивки, и, главное, нигде не перепутать последовательность.

Читайте также:  Как отремонтировать паркет если провалился

никаких кнопок нажимать не надо.

Переставил перемычку, прошил через Flash Loader Demonstrator, вернул перемычку обратно. ВСЕ

И если что перепутаешь — вернутся к заводской прошивке не проблема.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А как «прошить через Flash Loader Demonstrator«, не нажимая никаких кнопок?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А как «прошить через Flash Loader Demonstrator«, не нажимая никаких кнопок?

на плате блюпилл никаких кнопок не нажимается.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Подтверждаю. На блюпиле жёлтенькие джамперы. Вот только правильно воткнуть для прошивки в условиях первого попадания в руки и большой боязни что то не испортить. Да и заливка на разных скоростях, и размер надо правильно указать. И USB-TTL правильно воткнуть. В общем первый раз у меня часа два ушло пока на экране Ок не появилось.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А зачем тогда я, как дурак, каждый раз на сброс нажимаю?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А зачем тогда я, как дурак, каждый раз на сброс нажимаю?

не знаю 🙂 На заводской прошивке этого делать не требуется.

Вот если что не так прошил и прошивку запорол — то да, тогда нужно чистить флеш например при помощи СТ-линк утилиты, и вот оно срабатывает только если запускаешь с нажатым ресетом

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Не знаю, какие у вас проблемы

Б707, дорогой! Ни каких проблем! ;)) Я же написал — в голову не пришло проверять, как оно с УАРТом. С удовольствием почитаю ветку, ради информации.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А зачем тогда я, как дурак, каждый раз на сброс нажимаю?

не знаю 🙂 На заводской прошивке этого делать не требуется.

Вот если что не так прошил и прошивку запорол — то да, тогда нужно чистить флеш например при помощи СТ-линк утилиты, и вот оно срабатывает только если запускаешь с нажатым ресетом

Когда я экспериментировал с Кубом, в некоторых случаях контроллер после прошивки не был виден через ST-Link (что я отследил), и в некоторых не прошивался без нажатия на сброс (что я воспринял как обычную практику). Ну, собственно, после этого нажимал на сброс всегда — чтобы уж наверняка.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Когда я экспериментировал с Кубом, в некоторых случаях контроллер после прошивки не был виден через ST-Link (что я отследил), и в некоторых не прошивался без нажатия на сброс (что я воспринял как обычную практику). Ну, собственно, после этого нажимал на сброс всегда — чтобы уж наверняка.

в кубе пробовали настраивать дебаг порт ?

Вот если что не так прошил и прошивку запорол — то да, тогда нужно чистить флеш например при помощи СТ-линк утилиты, и вот оно срабатывает только если запускаешь с нажатым ресетом

на случай, если нет ST-Link’a , есть такая утилита STM32CubeProgrammer , ей можно USART/USB подсоедениться к микроконтоллру в режиме бутлоадера и удалить /перепрошить и много еще чего. a ST-Link ом можно и в обычном режиме

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Здравствуйте. Всё голова уже не работает. Порт так и не появился.Буду ждать из китая новую stm-ку. Полтора года не могу доделать проект. ST-Linka у меня нет.Спасибо всем .

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

У меня вин7. Сейчас подключил STM и посмотрел драйвер — короче драйвер LeafLabs, LLC дата 21.10.2018.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Здравствуйте. Всё голова уже не работает. Порт так и не появился.Буду ждать из китая новую stm-ку. Полтора года не могу доделать проект. ST-Linka у меня нет.Спасибо всем .

ST link не обязателен. Достаточно сгенерить bin файл в IDE и залить его через USB-TTL переходник с помощью Flash Loader Demonstrator. Как, описано побробно например здесь https://istarik.ru/blog/stm32/111.html . В качестве USB-TTL переходника может быть использована любая нана, уна, если воспользоваться микросхемой USB-TTL плат с развязкой с помощью резистора 1к сигнала Тх.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Здравствуйте. Я все так и делал. Переходник у меня ch 340 . Через Flash Loader Demonstrator все проходит. И светофор зелёный и после пошивки зелёная полоса. Далее от администратора запускаю установку драйвера. Появляется чёрный экранчик, жду, появляется (нажмите любую клавишу). Далее иду в ардуино , ну и как в ссылке в самом начале страницы . А порта там нет.Пытался в диспетчере , ставить вручную , пишет что драйвера не нуждаются в обновлении. А само устройство остановлено из за неполадок ,код (43).Сейчас попробовал подключить ардуино нано, порт появляется. А с stm порта нет. Как то так.

Источник

Оцените статью