Stm32F103 usb: Предельная скорость USB на STM32F103, чем она обусловлена? / Хабр

Содержание

STM32F105RCT6 — Stmicroelectronics — Микроконтроллер ARM, USB OTG FS, STM32 Family STM32F1 Series Microcontrollers

The STM32F105RCT6 is a connectivity line 32bit Microcontroller Unit offers two 12bit ADCs, four general-purpose 16bit timers plus a PWM timer and as well as standard and advanced communication interfaces up to two I²Cs, three SPIs and two I2Ss, five USARTs, an USB OTG FS and two CANs. It incorporates the high-performance ARM® Cortex®-M3 32bit RISC core operating at a 72MHz frequency, high-speed embedded memories and an extensive range of enhanced I/Os and peripherals connected to two APB buses.

  • POR, PDR and programmable voltage detector
  • Low power — Sleep, stop and standby modes, VBAT supply for RTC and backup registers
  • Clock, reset and supply management
  • 12-channel DMA controller
  • Debug mode — Serial wire debug (SWD) and JTAG interfaces
  • Cortex®-M3 embedded trace Macrocell™
  • 2 x Watchdog timers
  • SysTick timer — 24-bit down counter
  • CRC calculation unit, 96-bit unique ID

Области применения

Привод Двигателя и Управление, Переносные Устройства, Медицинское, Потребительская Электроника, Компьютеры и Периферия, Связь и Сеть, Промышленное, Охрана, Визуализация, Видео и Зрение, ОВКВ

Предупреждения

Market demand for this product has caused an extension in leadtimes. Delivery dates may fluctuate. Product exempt from discounts.

Может ли модуль USB STM32F103 быть синхронизирован HSI?

Есть плата STM32F103CBT6 без внешнего высокоскоростного кристалла.

Я хочу использовать USB-модуль на этой плате. Вход ФАПЧ составляет 4 МГц, поскольку я настроил источник ФАПЧ на внутренний RC-генератор (8 МГц, как правило, с 2-кратным делением), затем я настраиваю ФАПЧ на 12х, что означает, что тактовый сигнал для модуля USB составляет 48 МБ.

Тогда USB-модуль работает хорошо, кажется стабильным.

Я пытался разогреть плату до 80C, чтобы проверить стабильность модуля USB, когда точность часов снижается, я также пытался охладить его до -10C, никаких проблем не возникало.

Но я все еще беспокоюсь о стабильности USB-модуля, управляемого таким образом.

В некоторых технических характеристиках серии STM32F0 от ST подчеркивается, что их usb-модуль «без кристаллов», что, по-видимому, означает, что usb других серий, таких как STM32F1, не может работать без внешнего кристалла. Но в техническом описании STM32F1 не было ясно сказано об этой проблеме.

Интересно, действительно ли usb работает достаточно стабильно без внешнего кристалла.

Кстати, для добавления функции IAP в проект требуется usb, поэтому это серьезная проблема.

Спасибо.

тусклый

USB, согласно спецификации, требует, чтобы частота была в пределах 0,25% (2500 ppm) от идеального значения (для полной скорости — для высокой скорости нужны более точные часы). В таблице данных STM32F103xB (глава 5.3.7: Характеристики внутреннего источника синхронизации ) вы увидите, что HSI гарантированно будет иметь, даже при устойчивых 25 ° C, допуск от -1,1% до + 1,8%, что недостаточно.

Обратите внимание, что STM32F0 (как указано, для USB без кристаллов) имеет HSI48 с еще худшим допуском (от -2,8 до + 2,9%), что на первый взгляд кажется противоречивым. Но он также имеет функцию, называемую автоматической подстройкой , частью блока системы восстановления часов (CRS) (упомянутую в главе 3.20 таблицы данных и подробно описанную в главе 8 справочного руководства), которая позволяет настраивать этот генератор. в зависимости от кадра SOF, полученного от USB, эффективно восстанавливает часы с требуемым допуском.

Эта система восстановления синхронизации не входит в STM32F1, поэтому вы не можете полагаться на USB для правильной работы на этом чипе без внешнего кристалла. Скорее всего, у вас есть чип с точностью выше средней HSI, но он может не работать с другим образцом.

Короче говоря, не делайте этого, если только это не одноразовый прототип.

USB HID интерфейс для STM32 в STM32IDE / Своими руками (DIY) / iXBT Live

Ряд микроконтроллеров STM32 имеют на борту USB интерфейс для связи с компьютерами. Как правило, удобнее всего использовать предоставляемый компаний ST Microelectronics драйвер класса CDC (Communication Device Class ). Он позволяет использовать на стороне компьютера UART через USB и не требует установки драйверов. Со стороны STM32 при этом требуется только поменять операции вывода данных, остальное делается самостоятельно. Причём скорость такого соединения может быть практически любой, поддерживаемой компьютером.

Однако ряд разработок, особенно, когда приходишь в другую компанию, где используется HID Class (Human Interface Device), в случае разработки новой версии устройства требуется поддерживать ранее выбранный интерфейс. Что, собственно, и случилось. Примеры проектов от самой ST, которые они дают при загрузке STM32 Cube MX и IDE, как обычно, дали только минимальное понимание, но не раскрыли, что и как надо делать. Я когда-то разбирался с USB, даже писал собственный драйвер, но это было так давно… Остались только общие воспоминания. Посему пришлось искать дополнительную информацию, чтобы получить стартовую точку.

Первое найденное было видеороликом на youtube в стиле HID за 5 минут 🙂 Автор даёт доступ к своему коду на GitHub. Всё, типа круто, красиво, просто вставляйте к себе и всё будет чудесно. Судя по отзывам под роликом, некоторым этого хватило.  Изучив исходники понял, что минимального прозрения не наступило, да и уровень полученной информации мал для того, чтобы решить поставленную задачу.  Но закомство с этим материалом было явно полезным. Решение вопроса с использованием кубика (STM32Cube MX) мне лично импонирует больше, чем другие подходы, поскольку позволяет отвлечься от ряда низкоуровневых операций и генерация проекта всегда происходит в одном стиле. Соответственно, изучение этого примера показало, на какие файлы надо обратить внимание, где и что надо поменять или добавить, какие функции использовать для получения и отправки данных именно для нашей выбранной среды программирования.

Следующий поиск оказался весьма удачным. Хабр — известный сайт, на котором можно найти много полезного по разной электронной тематике. Нашлась там и статья STM32 и USB-HID — это просто. Я не являюсь постоянным клиентом Хабра и не знаю автора этой статьи RaJa, но на мой взгляд это очень хорошая статья, описывающая основные положения работы HID интерфейся. Без её прочтения читать дальше здесь бессмысленно, поскольку далее будут, в основном,  комментарии для адаптации кода к среде разработки STM32IDE/STM32CubeMX + Atollic TrueStudio. (Далее STM32IDE). Да и столь популярный в 2014 году и реально очень неплохой проект EmBlocks, увы, умер.

Первое, что необходимо решить — как тестировать вновь создаваемое устройство. Лет… дцать назад я использовал для этого анализатор и синтезатор трафика USB — очень полезные, но дорогие игрушки 🙂 Сейчас у меня такой возможности нет, да и должен же быть более простой путь. Тем более для простого стандартного интерфейса без написания собственного драйвера. Авторы обоих рассмотренных выше проектов пошли самы простым для них путём — написание простой программы на известных им языках. Но автор статьи на Хабре сделал очень правильный шаг — он написал свой проект, совместимый с программой ST HID Demonstrator (ссылка есть в статье), позволяющей поуправлять нашим устройством, как графически, так и послать свои данные и посмотреть, что пришло от нашего устройства. Фактически программа может использоваться и в дальнейшем для отладки будущей программы на выбранном микроконтроллере.

Своё ознакомление с проектом для HID я осуществлял с платой STM32L476 Discovery. Плата, вообще говоря, может быть любой, где USB интерфейс микроконтроллера физически подключён к отдельному разъёму USB. Есть у меня и Nucleo 32 с STM32L4, но там один разъём USB тспользуется и для программирования/отладки, и для связи с хостом, что добавляет интриги в интерфейс и может служить источником дополнительных непоняток. Оно нам надо?

Итак, комментарии и дополнения к статье по привязке HID к STM32IDE примерно по тем же шагам, как и в хабровской статье.

Структура проекта

В STM32IDE структура всех проектов задаётся при генерации проекта из среды назначения функциональности пинов и пользователю о том заботиться не надо. В частности, в кубике (что отдельном STM32Cube MX, что в встроенном в STM32IDE)  активируем USB, как Device, и добавляем Middleware USB Custom HID.

Рис.1 Выбор USB интерфейсаРис.2 Выбор и первичная настройка MiddlewareНадо заметить, что несмотря на установку размера буфера в 64 байта, эта величина не вносится по #define. Видимо баг текущей версии кубика. Далее покажем, где надо пофиксить. Указанный резмер дескриптора равный 79 — это значение для данного конретного стартового проекта

Заходим в Clock Configuration. Вполне вероятно, что могут быть проблемы с системными частотами, которые маркируются малиновым цветом.

Рис. 3 Возможные проблемы по установке частот

Если так, нажимаем Resolve Clock Issues и, скорее всего, всё будет настроено на максимальные частоты. Главное — USB Clock будет выставлен на 48 МГц. Надо заметить, что в семействе STM32L4 генератор на 48МГц имеет автоподстройку по SOF (Start Of Frame), что позволяет создавать USB устройства без внешнего кварца/генератора. Если, конечно, остальной дизайн допускает использование некварцованных генераторов. Для других семейств не проверял, поскольку для моего текущего проекта был выбран именно L4. Только надо отметить, что при использовании USB есть некоторая минимальная частота работы микроконтроллера. Я делал прикидку для другого проекта, где надо общаться с хостом и при этом потреблять минимум тока. Задачи простые, не требуют большой скорости и я хотел запустить МК на 8МГц. Оказалось, что меньше 14МГц при подключении USB ставить не могу, RCC не позволяет. Пришлось остановиться на следующем круглом значении 16МГц.

Собственно, настройка аппаратной части USB и выбор файлов, отвечающих за базовую функциональность этого интерфейса на на этом закончены.  Вся остальная периферия, находящаяся на выбранной плате настраивается автоматически при её выборе на старте проекта. Сохраняем, генерим проект и переходим к «программированию» в сравнении с описанным на Хабре проектом.

Это страшное слово Descriptor

Стандартные массивы данных для передачи информации хосту, с чем он будет иметь дело. Для интереса можно посмотреть дескрипторы устройства и конфигурации.  Сейчас их можно оставить такими, как получились, но в дальнейшем они наверняка потребуют редактирования. Впрочем, не исключено, что они будут генериться по тем параметрам, что ставятся в кубике. Что не может не радовать. А вот Report Descriptor стоит изучить получше — это фактически основное, что придётся в дальнейшем править ручками. Не знаю, откуда RaJa взял его дескрипторы, в нашём случае они генерируются кубиком и располагаются в следующих файлах проекта:

Дескриптор от RajaДескриптор от STФайл в проекте
RHID_DeviceDescriptorUSBD_FS_DeviceDescusbd_desc.c
RHID_ConfigDescriptorUSBD_CUSTOM_HID_CfgFSDescusbd_customhid.c
RHID_ReportDescriptorCUSTOM_HID_ReportDesc_FSusbd_custom_hid_if.c

Поскольку для простоты сейчас будем работать только с ST HID Demonstrator, то не мудрствуя лукаво я просто скопировал содержимое  RHID_ReportDescriptor в соответствующее место моего проекта. Только подставил свои константы на место длины. Надо отметить, что надо точно посчитать количество байтов в этом дескрипторе (в этом проекте 79) и убедиться, что именно это значение стоит в Class Parameters. Не больше и не меньше. Иначе хост не опознает подключённое устройство. Проверено 🙂

Далее заходим в файл usbd_customhid.h  и меняем значения CUSTOM_HID_EPIN_SIZE и CUSTOM_HID_EPOUT_SIZE на 0x40U. Честно говоря, немного напрягает то, что ST не даёт альтернатив смене значения по умолчанию 2 на другое значение и далее в коде с использованием этих констант стоит комментарий, что не более 2х байт. Но,  с другой стороны,  это было рекомендовано в первом найденном описании и, вообще говоря, установка такого значения выглядит достаточно логично. Иначе в чём отличие CustomHID от обычного? Проблема в том, что при регенерации проекта из кубика, что на этапе первичного кода происходит довольно часто, это значение не сохраняется и его надо восстанавливать ручками. Для этого я себе в main вывел строку warning, чтобы не забывать проверить эти константы. Возможно я ошибаюсь, и в дальнейшем всё окажется проще. Но в такой конфигурации работает 🙂

Цикл обмена (пишем/читаем)

Для выдачи данных на хост всё достаточно аналогично описанию на Хабре. Только название функции другое: USBD_CUSTOM_HID_SendReport(). Все остальные реомендации из той статьи подходят по полной программе.

А вот чтение здесь интереснее, чем на Хабре.  И на самом деле несколько проще. Обработка принятого массива происходит в usbd_custom_hid_if.c / static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state). 

В этом тестовом проекте я не заморачивался с обработкой входных параметров и следуя своей обычной практике минимальности времени обработки прерываний, просто копирую полученные данные в заранее определённый массив и устанавливаю флаг готовности данных от USB

Ну, а собственно «сбор данных» (нажатие кнопок джойстика) и реакция на полученные от хоста данные в этом прото проекте делаю внутри бесконечного цикла в main.c Всё просто 🙂 В этом прото проекте нет разделения реакции на SET_FEATURE и SET_REPORT,  с этим надо будет разобраться далее, в реальном проекте. Компилируем, запускаем, подключаем к хосту и там должен появиться новый CustomHID от STMicroelectronics.

Звпускаем на хосте  USB HID Demonstrator. На плате,  с которой я запускал этот проект, не имеет органов для работы с Variable Inputs/Outputs, поэтому в разделе Graphic customization были убраны соответствующие назначениями, оставлено 5 кнопок и назначены ID, определённые в проекте: 1, 2 для Output report (входные данные для ST) и 4 для Input Report (выход от ST).

Рис. 4 Настройка демонстратора

Моей задачей для этого проекта было управлять парой светодиодов на плате, что стало работать сразу, как эта программа обнаружила подключенную плату, и включать «лампочки» этой платы при нажатии различных кнопок джойстика на плате, а вот здесь сразу не получилось. При указанных настройках все пять лампочек одновременно зажигались  при нажатии на центр джойстика. Остальные кнопки не отображались. При этом, если перейти на Input/Otput transfer, то данные были вполне ожидаемы. Т.е. сам интерфейс работает, но отображение в программе на хосте не отвечает моим запросам. Слава богу ST предоставляетс исходники,  а в соседнем кубике сидит программист нашей группы, пишущий в том числе и софт для компьютеров. В общем, он подправил одну функцию и сгенерил исполняемую программу. Всё стало работать, как хотелось. Конечно, можно было бы на каждую кнопку создать свой report с уникальным номером, что исходно и предусмотрено. В этом случае было бы достаточно посылать по одному байту для каждой кнопки, но мой проект предусматривает многобайтный отчёт.  Исходник подправленной функции и подправленный исполняемый файл можно скачать по ссылке ниже. 

 На этом, пожалуй, всё.  Если у Вас есть такая же плата 32L476GDISCOVERY, то для начала можно просто скачать мой прото проект, адаптированный для него демонстратор и исходник изменённой функции по этой ссылке. Исходный USB HID Demonstrator скачивается с сайта STM, инсталлируется и его исполняемый файл заменяется моим. Импортируете в STM32IDE мой проект, компилируете и должны получить работающую базу для своих проектов. Если у Вас другая плата, то адаптируете «сбор информации» и включение светодиодов под свою плату.

Для дальнейшей работы обязательно прочтите указанную статью RaJa с Хабра. Она даст понимание того, что и как должно быть сделано для других проектов с USB HID интерфейсом. А ещё лучше начать с неё 🙂

И при выборе класса устройства для Вашего проекта надо учитывать следующее: минимальный период опроса HID устройств — 1ms. И если я правильно помню, это скорее пожелание системе от внешнего устройства. В стандартном HID устройстве за один кадр (frame) передаётся только два байта, т.е. скорость обмена не более 2 кбайт/с. В Custom HID на 
Full Speed (12 мбит/с) объём данных отчёта (report) —  не более 64 байт, т.е. скорость обмена с Вашим HID не более 64 кбайт/с. Для High Speed (480 мбит/с) — максимальный объём данных 512 байт (512 кбайт/с). Не будь у меня ограничения совместимости с предыдущим софтом, используемым в компании, использовал хотя бы CDC.

У меня изучение статей и адаптация под мои хотелки заняло три дня. Описание заняло больше 🙂 Надеюсь, что у тех, кто воспользуется этой статьёй, аналогичный процесс займёт не более одного дня. Комментируйте, спрашивайте. Что смогу — отвечу. Что не смогу, вместе поищем решение.

Простые эксперименты с микроконтроллером STM32F103 («Голубая таблетка»)

Многие приобрели «голубую таблетку» на попробовать. Но из-за сложности программирования данная вещь оказалась где то на полке, до лучших времен.

Будем считать, что «лучшие времена» — наступили.

Что необходимо для экспериментов:


  • Аппаратные средства
  • Программное обеспечение

Аппаратные средства


Все используемые детали / компоненты можно приобрести на aliexpress.com
  • Конечно, в первую очередь сам контроллер.«Голубая Таблетка»
  • адаптер USB-UART
  • Кабель Micro-USB
  • набор проводов для соединения компонент между собой

Для более быстрой, по сравнению с UART загрузкой «прошивки» и отладки программ рекомендуется использовать программатор ST-Link V2

Программное обеспечение


  • STM32 Flash loader demonstrator (UM0462)
  • STM32 Virtual COM Port Driver (usb vcp)
  • STM32 ST-LINK utility
  • www.embitz.org Среда разработки
  • MIOC — программа — конфигуратор, создание шаблона прошивки.
  • эмулятор терминала terraterm

Что такое модуль


Модуль это совокупность аппаратной и программной частей. Аппаратная часть — «таблетка» STM32F103C8T6, программная часть — «шаблон прошивки», созданный при помощи программы MIOC Данная программа — OpenSource.

Порты микроконтроллера


У микроконтроллера есть выводы или ножки. Часть из них это питание микроконтроллера, часть имеют специальное назначение (например Reset ), часть — интерфейс ввода/вывода общего назначения (англ. general-purpose input/output, GPIO).

Порты объединены в группы ( A; B; C… ). Каждая группа содержит до 16 портов, пронумерованных от 0 до 15. В итоге нумерация портов выглядит как PA0, PA1,…

Порты служат для связи между компонентами модуля, к примеру микропроцессором и различными периферийными устройствами. Порты могут выступать как в роли входа, в роли выхода и как двунаправленные.

На плате «таблетки» нанесена маркировка портов.

GPIO — Интерфейс ввода/вывода общего назначения


В модуле IO основные типы портов представлены в таблице:

В качестве датчиков, исполнительных механизмов будем использовать различные устройства от Arduino.

Программа MIOC ( Module Input-Output Configurator )


С помощью данной программы создаем / конфигурируем шаблон прошивки (проект для Embitz; Keil) модуля IO. Программа установки не требует. Скачали, запустили. С помощью данной программы создаём глобальные переменные, которые будем использовать в своих прошивках. Переменные могут быть ассоциированы с портами.

Окно первого запуска:

Создадим проект:

Выбрать папку для проекта. Папка, для проекта должна быть пуста!

Первая программа — «hello word» для микроконтроллера


Поморгаем светодиодом, что имеется на «голубой таблетке». Данный светодиод подключен к порту PC13.

Добавить строку в таблицу переменных

Генерируем BSP код (кнопка F8)

Далее, каждый раз после изменения проекта, обязательна генерация BSP!

Открыть созданный проект в среде разработки EmBitz или Keil. EmBitz пока как временное решение. Похоже автор забросил данный проект. По всей видимости в дальнейшем в проекте будет использоваться Code::Blocks.

В файле main.c напишем следующее:


(Для увеличения размера картинки откройте её в новой вкладке)

В EmBitz нажать F2, после появления окна информации нажать F7. Должна выполниться компиляция.

Повторное нажатие F2 скроет информационные закладки.

Загружаем в микроконтроллер, смотрим, как работает.

Кнопка


Добавим кнопку, например такую:

Схема подключения:

Добавим переменную в таблицу:

Генерируем BSP.

Изменим программу на следующую:

Создаём новую BSP (F8), компилируем, загружаем в микроконтроллер.

Нажимаем на кнопку — светодиод зажигается, отпускаем — тухнет.

Вместо светодиода на другой порт можно подключить реле, например:

И управлять какой либо полезной нагрузкой.

Вывод сообщений на консоль


Нужно определить, что будет консолью.

Возможны варианты:

  • адаптер USB-UART
  • виртуальный COM-порт (кабель Micro-USB)

Если в конфигурации выбраны одновременно UART1 и USB as Console, при этом USB VCP не выбран, то консоль будет назначена «в никуда». Т.е. ругаться на функцию print_str ( или макрос print ) не будет, но и вывода не будет никакого. Такое же поведение будет если не выбрать ни один интерфейс, или выбрать USB VCP но не выбрать ни UART1 ни USB as Console.

Конфигурация консоли:

Подключим TettaTerm к COM-порту (консоли). Если загрузку прошивки производим через UART1, то не забываем отключать/подключать COM-порт. В TerraTerm «горячие кнопки» Alt+I; Alt+N Для варианта загрузки через ST-Link этого делать не требуется.

Отредактируем программу:

Теперь на консоли будет отображаться состояние кнопки:

DS18B20


Подключим к «таблетке» температурный датчик DS18B20.

Поместим в таблицу переменную:

Изменим программу на следующую:

Создаём новую конфигурацию, компилируем, загружаем в микроконтроллер.

На консоли будет отображаться температура, измеряемая датчиком.

АЦП


В качестве примера работы с АЦП можно использовать потенциометр:

Или датчик влажности почвы

Остановимся на последнем:

Конфигурируем порт:

Редактируем программу:

Компилируем, загружаем.

В консоли наблюдаем:

adc — текущее показание АЦП. max и min — зафиксированные минимальное и максимальное показания датчика, совсем сухой (0%) и совсем мокрый (100%).

Совсем мокрый (100%) — опустим датчик в стакан с водой. Совсем сухой (0%) — лежит на открытом воздухе.

По сути мы сделали калибровку датчика влажности почвы от 0 до 100%. Максимальное и минимальное значения поместим в текст программы.

Результат работы. Датчик помещен в землю цветочного горшка:

Данный проект — шаблон решения для полива растений.

На этом пока всё. Программа MIOC будет пополняться дополнительными возможностями.

Обзор ARM-микроконтроллеров от STMicroelectronics

Рис. 3. Архитектура микроконтроллеров семейства STR750 

Таблица 4. Характеристики семейства STR750

Семейство STR910 отличается наличием 10/100 Ethernet с выделенным для него каналом прямого доступа к памяти (DMA), который снижает нагрузку ЦПУ. Гибкая система тактирования позволяет достичь потребления менее 1 мкА в режиме real-time clock. Поддерживает USB, CAN, SPI, I2C, UART/IrDA, имеет большое число таймеров, до 80 портов ввода-вывода, толерантных к напряжению 5 В.

Семейство STM32 построено на базе ядра ARM Cortex-M3, специально разработанного для встраиваемых, недорогих приложений реального времени. Имеют высокое соотношение производительность/потребление. Компания STMicroelectronics непосредственно принимала участие в разработке этого ядра, поэтому одной из первых предложила решения на базе Cortex-M3 (рисунок 4).

Рис. 4. Архитектура микроконтроллеров семейства STM32

Таблица 5. Характеристики семейства STR910;

Наименование Flash-
память,
кбайт
ОЗУ,
кбайт
АЦП,
кана-
лов,
бит
Таймеры   Последо-
вательный
интер-
фейс
Порты
ввода-
вывода
общего
назна-
чения
Корпус Uпит,
В
Особен-
ности
12- или
16-бит
IC/OC/
PWM
дру-
гие
STR910FM32x 256+32 64 8×10
7×16-бит 
(8, 8, 7)
WDT, RTC 2xSPI, 2xFC, 3xUART wirDA 40 (16) LQFP80 ядро 1,8 V0 2,7…3,6 CAN
STR910FW32x 256+32 64 80 (16) LQFP128 CAN, EMI
STR911FM42x 256+32 96 40 (16) LQFP80 CAN, USB
STR911FM44x 512+32 96 40 (16) LQFP80
STR912FW42x 256+32 96 80 (16) LQFP128 Ethernet, USB, CAN, EMI
STR912FW44x 512+32 96 80 (16) LQFP128

Микроконтроллеры семейства STM32 находят применение в таких приложениях, как промышленные сети, PLC, инверторы, принтеры, сканеры, системы аварийной сигнализации, системы двусторонней видеосвязи, системы кондиционирования воздуха, измерители мощности, глюкометры, приложения с батарейным питанием, системы управления приводами, периферийные устройства ПК, цифровые камеры, GPS-устройства.

Семейство STM32 состоит из двух подсемейств, STM32F103 и STM32F101, отличающихся по производительности и составу периферийных устройств (рисунок 5). Но так как эти подсемейства совместимы по выводам, разработчик может легко заменять одно на другое, масштабируя свое приложение в зависимости от требований.

 

Рис. 5. Архитектура микроконтроллеров семейства STM32

Таблица 6. Характеристики семейства STM32

Наименование Програм-
миру-
емая
Flash-
память
Память
прог-
рамм,
кбайт
ОЗУ,
кбайт
Таймеры Последова-
тельный
интерфейс
Порты
ввода-
вывода
Корпус Uпит,
В
12- или
16-бит
IC/OC/
PWM
дру-
гие
STM32 (ARM Cortex-M3) — 32-разрядные микроконтроллеры  
36 pins STM32F101T6 32 6 2×16-бит (8/8/8) 2xWDG, RTC,
24-разряд-
ный обрат-
ный счетчик
1xSPI/1xI2C/
2xUSART*
26 (26) QFN36 2…3,6
STM32F101T8 64 10 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
26 (26) QFN36 2…3,6
48 pins STM32F101C6 32 6 2×16-бит (8/8/8) 1xSPI/1xI2C/
2xUSART*
36 (36) LQFP48 2…3,6
STM32F101C8 64 10 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
36 (36) LQFP48 2…3,6
STM32F101CB 128 16 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
36 (36) LQFP48 2…3,6
64 pins STM32F101R6 32 6 2×16-бит (8/8/8) 1xSPI/1xI2C/
2xUSART*
51 (51) LQFP64 2…3,6
STM32F101R8 64 10 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
51 (51) LQFP64 2…3,6
STM32F101RB 128 16 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
51 (51) LQFP64 2…3,6
100 pins STM32F101V8 64 10 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
80 (80) LQFP100 2…3,6
STM32F101VB 128 16 3×16-бит (12/12/12) 2xSPI/2xI2C/
3xUSART*
80 (80) LQFP100 2…3,6
36 pins STM32F103T6 32 10 3×16-бит (12/12/14) 1xSPI/1xI2C/
2xUSART7USB/
CAN
26 (26) QFN36 2…3,6
STM32F103T8 64 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
26 (26) QFN36 2…3,6
48 pins STM32F103C6 32 10 3×16-бит (12/12/14) 1xSPI/1xI2C/
2xUSART7USB/
CAN
36 (36) LQFP48 2…3,6
STM32F103C8 64 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
36 (36) LQFP48 2…3,6
STM32F103CB 128 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
36 (36) LQFP48 2…3,6
64 pins STM32F103R6 32 10 3×16-бит (12/12/14) 1xSPI/1xI2C/
2xUSART7USB/
CAN
51 (51) LQFP64 2…3,6
STM32F103R8 64 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
51 (51) LQFP64 2…3,6
STM32F103RB 128 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
51 (51) LQFP64 2…3,6
100 pins STM32F103V8 64 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
80 (80) LQFP100/
BGA100
2…3,6
STM32F103VB 128 20 4×16-бит (16/16/18) 2xSPI/2xI2C/
3xUSART7USB/
CAN
80 (80) LQFP100/
BGA100
2…3,6
* (IrDA/ISO7816/LIN master/slave)

В заключение можно еще раз упомянуть о том, что одно из достоинств ARM микроконтроллеров — большой выбор отладочных средств. В число компаний, предлагающих инструментарий для ARM-микроконтроллеров STMicroelectronics, кроме ее самой, входят такие компании как Keil, IAR, Hitex, Nohau, GreenHills, Olimex и многие другие. Для начала работы можно подобрать инструментарий, наиболее близкий по своим характеристикам к разрабатываемому устройству.

 

Рис. 6. Отличия STM32F103 и STM32F101

Всю необходимую документацию по ядру ARM можно найти на сайте http://www.arm.com/ .

 

 

  Получение технической информации, заказ образцов, поставка —
e-mail: [email protected]

%PDF-1.3 % 1 0 объект >поток конечный поток эндообъект 2 0 объект >/Родительский 3 0 R/Тип/Страница/Содержание[4 0 R]/Ресурсы>>>/MediaBox[0 0 595.27563 841.88977]/BleedBox[0 0 595.27563 841.88977]/Повернуть 0>> эндообъект 4 0 объект >поток x]KWyJ

Программирование платы STM32F103 с использованием порта USB (Blue Pill) | by Param Aggarwal

В то время как доска за 2 доллара дешевая и очень распространенная, ее установка и запуск немного запутаны. Вот краткое руководство о том, как настроить его для программирования напрямую с USB.

Обычная плата STM32F103 за 2 доллара на AliExpress (она же Blue Pill)

Плата STM32F103 поставляется только с загрузчиком USART по умолчанию.Несмотря на то, что на плате есть порт USB, вы не можете использовать его для программирования, потому что у него нет соответствующего загрузчика.

Я получил свою плату менее чем за 2 доллара в Advanced Tech на AliExpress. Нам нужно использовать простой преобразователь USB в UART для программирования платы через USART с загрузчиком USB, а затем мы можем вернуться к программированию напрямую через USB.

Сначала подключите преобразователь USB к Serial/UART/TTL следующим образом:

(источник)

На изображении выше вы видите две желтые перемычки, отмеченные BOOT0 и BOOT1 .Они определяют источник кода для микроконтроллера. В состоянии по умолчанию, равном 0 , микроконтроллер использует собственный загрузчик флэш-памяти, которого сейчас нет, и который мы добавляем. На данный момент, чтобы иметь возможность программировать микро с помощью USART, вам нужно установить BOOT0 как 1 и оставить BOOT1 на 0 . В основном переместите первую перемычку и оставьте вторую.

Теперь загрузите скрипт Python stm32loader и запустите его, чтобы убедиться, что все необходимые зависимости удовлетворены.Мне пришлось pip установить pyserial , чтобы заставить его работать.

Теперь нам нужен бинарный файл, который мы хотим прошить в качестве нашего загрузчика — мы будем использовать загрузчик stm32duino от Роджера Кларка. Основываясь на репозитории, нам нужно найти, к какому контакту подключен светодиод, который является контактом PC13 для нашей платы, как указано в этой вики. Следовательно, нам нужен этот файл.

Когда у вас есть файл, теперь нам просто нужно запустить следующее (после добавления правильного порта и ссылки на файл):

 python ./stm32loader -p /dev/tty.SLAB_USBtoUART -w ~/Downloads/generic_boot20_pc13.bin 

Возможно, вам придется нажать кнопку сброса, прежде чем запускать вышеуказанное, чтобы заставить его работать. В случае успеха вы должны увидеть, как светодиод быстро мигает после нажатия кнопки сброса, а затем продолжает медленно мигать. Это сигнализирует о том, что пользовательская программа не найдена. Не забудьте сбросить перемычки параметров загрузки на значения по умолчанию для обоих 0 .

Теперь мы готовы к программированию через USB. Отключите все и используйте USB для подключения. Убедитесь, что ваш компьютер распознает устройство, используя dmesg или выбрав «Об этом Mac» > «Системный отчет» > «USB».Вы должны увидеть устройство как Maple (Аппаратное и программное обеспечение, над которым мы работаем выше, все благодаря замечательным людям в Maple Labs.) онлайн, если вы не знакомы с этим шагом). Кроме того, загрузите Arduino_STM32 и поместите в каталог оборудования Arduino. См. эти шаги установки для получения дополнительной информации.

Теперь, после перезапуска IDE, вы сможете выбрать «Generic STM32F103C series» в списке плат и загрузчик STM32duino в качестве метода загрузки.

Теперь из примеров выберите пример Blink и измените вывод светодиода на PC13 . Теперь нажмите «Загрузить» (после нажатия кнопки сброса на плате), и вы должны увидеть сообщения консоли о том, что код загружается.

Теперь вы сможете снова сбросить плату и увидеть мигание светодиода каждую секунду. Поздравляю!

Stretch Цель : Используйте те же самые шаги, чтобы вместо этого прошить прошивку Black Magic Probe и сделать свой собственный программатор способным запускать сервер gdb для отладки с использованием точек останова! (Обновление: успех! См. эту статью.)

STM32F1 USB — неофициальная документация Mecrisp Stellaris 1.0

Специальное изображение USB Blue Pill Image, которое можно использовать для проверки работоспособности USB на вашей плате. Он также может считывать внутреннюю «электронную подпись устройства» MCU. Работает на флэш-памяти STM32F103 объемом 64 КБ.

Используется USB-драйвер Mecrisp-Stellaris для STM32F103, разработанный Жан-Клодом Випплером, который основан на USB-драйвере Coreforth, разработанном Экхартом Кеппеном.

Примечание

От Виктора Дворжака.Для USB требуется драйвер на стороне ПК idVendor = 0x0483 idProduct = 0x7540, который представляет собой драйвер виртуального COM-порта STM32, описанный в en.DM00478229.pdf. Драйвер en.stsw-stm32102.zip (24755 КБ) доступен прямо с st.com

Используйте его для проверки FAKE STM32F103 MCU и дайте мне знать, если это полезно?

Примечание

Если у вас нет Blue Pill, прочтите мою тираду, прежде чем подумать о ее покупке?

 Название проекта: STM32F103 Создано 20191107-0028 Терри Портером
1882bdaff62f637a7bdd517d14f4c1a4.README: Особые примечания относительно Mecrisp-Stellaris
Ядро 1882bdaff62f637a7bdd517d14f4c1a4.bin
-------------------------------------------------- ----------------------------------
Специальный образ USB размером 64 КБ. Этот образ запускается через порт USB на любом STM32F103.

1. Прошиваем образ 1882bdaff62f637a7bdd517d14f4c1a4.bin на плату обычным способом
2. Подключите USB-порт синей таблетки к ПК и найдите устройство «» в вашей системе.
3. Подключите последовательный порт ПК к указанному выше USB-устройству, вы можете выбрать любую скорость передачи данных.ПРИМЕЧАНИЕ: НЕТ РУКОПОЗВАНИЯ,
поэтому для загрузки потребуется End Of Line Delay в 200 мс.
4. Вы должны увидеть «MS RA 2.5.1 tpmod for STM32F103 by Matthias Koch» при включении платы.

Какие специальные средства существуют на доске помимо всех стандартных слов Mecrisp-Stellaris?

1. «stm32id» для запроса идентификатора электронного чипа, как показано ниже. Возможно, он может найти ПОДДЕЛКИ? дайте мне знать, если это так?
stm32id
Координаты Die xy: 108068691
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00555071 | U P q
Lot_num в кодировке ascii [55:24]: 0x87011723 | .. . #

2. «бесплатно»
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 14336
RAM.... ВСЕГО ПРЕДУСТАНОВКИ: 20000 ИСПОЛЬЗУЕТСЯ: 868 БЕСПЛАТНО: 19132

3. "слова4"
Список Word с четырьмя столбцами

4. «Дамп» и «дамп16»
шестнадцатеричный gpioa. 40010800 ок.
$40010800 дамп16 40010800 : A4 4A 44 44 44 44 85 88 3C B7 00 00 00 B0 00 00 | .JDDDD.. <....... |
 в порядке.

5. «Мусор».
1000 бин.
3322222222221111111111
10987654321098765432109876543210
00000000000000000000001111101000

6. все регистры для следующих периферийных устройств. Не все периферийные устройства могут быть включены из-за требований к объему флэш-памяти.мощность
ПКР
GPIOA
ГПИОБ
ГПИОК
АФИО
EXTI
DMA1
SDIO
РТК
ТИМ1
I2C1
SPI1
USART1
АЦП1
НВИК

Пример:
rcc_cfgr.
RCC_CFGR $001D840A
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0
 в порядке.

гпиоа.
GPIOA_CRL $44444AA4
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0

GPIOA_CRH $88854444
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0

GPIOA_IDR $0000B73C
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0

GPIOA_ODR $0000B000
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0

GPIOA_BSRR $00000000
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

GPIOA_BRR $00000000
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

GPIOA_LCKR $00000000
3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|
1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7| 6|5|4|3|2|1|0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 в порядке.

СТМ32ИД

Эта программа основана на технической документации STM32F0, поскольку в технической документации STM32F1xx не указан формат фактического «электронного регистра уникального идентификатора устройства», и многие предполагают, что этот формат такой же, как у STM32F0.

Я склоняюсь к теории о том, что они немного отличаются по «номерам партий», потому что никакие данные ASCII для чипов F1 пока не кажутся мне разумными. Возможно, это «номера партий», а просто последовательные десятичные числа без символьной информации?

Данные о «матрице» и «номере пластины» кажутся разумными во всех случаях.

Однако в приведенной ниже сигнатуре F051 раскладка номера партии ASCII кажется разумной? Я добавлю к этому, когда я настрою другую плату F051 для чтения.

MCU НЕ STM32F103 для сравнения

СТМ32Ф051

 Die xy координаты: 2752589
Номер вафли: 14
Lot_num в кодировке ascii [23:0]: 0x00413657 | А 6 Вт
Lot_num в кодировке ascii [55:24]: 0x20323336 | 2 3 6
 

СТМ32Л073

 Die xy координаты: 21444402
Номер вафли: 48
Lot_num в кодировке ascii [23:0]: 0x00343837 | 4 8 7
Lot_num в кодировке ascii [55:24]: 0x00000011 | .. . .
 

STM32F103 или результаты клонирования

1882bdaff62f637a7bdd517d14f4c1a4.bin Результаты пользователей

Это чип/плата, на которой я разработал образ 1882bdaff62f637a7bdd517d14f4c1a4.bin. Это плата Shenzhen LC Technology за 9 долларов с флэш-памятью 64 КБ.

Я купил 12 таких плат примерно в 2014 году, одна была мертва из коробки, без дополнительных перемычек и т. д., а одна умерла во время прошивки.

СТМ32Ф103К8Т6 #1

 Die xy координаты: 108068691
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00555071 | U P q
Lot_num в кодировке ascii [55:24]: 0x87011723 | .. . #
 

СТМ32Ф103К8Т6 #2

 Die xy координаты: 108068688
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00555071 | U P q
Lot_num в кодировке ascii [55:24]: 0x87083408 | . . 4 .
 

Примечание

#1 очень близок к этому, та же кремниевая пластина всего в 3 позициях от него!

СТМ32Ф103К8Т6 #3

 Die xy координаты: 108003144
Номер вафли: 73
Lot_num в кодировке ascii [23:0]: 0x00515389 | К С .
Lot_num в кодировке ascii [55:24]: 0x87084441 | . . Д А
 

СТМ32Ф103К8Т6 #4

 Die xy координаты: 107675464
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00485366 | H S ф
Lot_num в кодировке ascii [55:24]: 0x87244413 | .$ Д .
 

СТМ32Ф103К8Т6 #5

 Die xy координаты: 107872073
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00565467 | В Т г
Lot_num в кодировке ascii [55:24]: 0x87014725 | . . ГРАММ %
 

СТМ32Ф103К8Т6 #6

 Die xy координаты: 108003159
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00565666 | В В ф
Lot_num в кодировке ascii [55:24]: 0x87014633 | . . Ф 3
 

СТМ32Ф103К8Т6 #7

 Die xy координаты: 107872086
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00575566 | W U ф
Lot_num в кодировке ascii [55:24]: 0x87092524 | .. % $
 

СТМ32Ф103К8Т6 #8

 Die xy координаты: 107741015
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00545171 | Т Q д
Lot_num в кодировке ascii [55:24]: 0x87231927 | . # . '
 

СТМ32Ф103К8Т6 #9

 Die xy координаты: 108396369
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00574867 | Вт В г
Lot_num в кодировке ascii [55:24]: 0x87142756 | . . ' В
 

STM32F103C8T6 #10

 Die xy координаты: 108003154
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00545267 | Т Р г
Lot_num в кодировке ascii [55:24]: 0x87195634 | .. В 4
 

СТм32Ф103РБТ6

Олимекс П103 #1

 Die xy координаты: 108068919
Номер вафли: 48
Lot_num в кодировке ascii [23:0]: 0x00353650 | 5 6 П
Lot_num в кодировке ascii [55:24]: 0x43105156 | С . К В

FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗОВАНО: 101376 БЕСПЛАТНО: 29696
 

Олимекс П103 #2

 Die xy координаты: 107741012
Номер вафли: 72
Lot_num в кодировке ascii [23:0]: 0x00555285 | У Р .
Lot_num в кодировке ascii [55:24]: 0x87237267 | . # р г

FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗОВАНО: 103628 БЕСПЛАТНО: 27444
 

СТМ32Ф103ЗЕТ

144pinner с флэш-памятью 512 КБ и оперативной памятью 64 КБ

 стм32ид
Координаты Die xy: 97779505
Номер вафли: 78
Lot_num в кодировке ascii [23:0]: 0x00383341 | 8 3 А
Lot_num в кодировке ascii [55:24]: 0x51137004 | В .п .

бесплатно
FLASH.. ВСЕГО ОТЧЕТНО: 524288 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 473088
 

BPill N1

(у него 128 КБ).

 стм32ид
Координаты Die xy: 107806536
Номер вафли: 113
Lot_num в кодировке ascii [23:0]: 0x00564989 | В я .
Lot_num в кодировке ascii [55:24]: 0x67255444 | г % Т Д

бесплатно
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 14336
 

BPill N2

(у него 128 КБ).

 стм32ид
Координаты Die xy: 107741009
Номер вафли: 117
Lot_num в кодировке ascii [23:0]: 0x00535783 | С В .Lot_num в кодировке ascii [55:24]: 0x81174113 | . . А .

бесплатно
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 14336
 

Синяя таблетка

помечен как STM32F103C8T6

 Die xy координаты: 108068690
Номер вафли: 114
Lot_num в кодировке ascii [23:0]: 0x00525366 | Р С ф
Lot_num в кодировке ascii [55:24]: 0x67145016 | грамм . П .

FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 14336
 

ГД32Ф103К8Т6

В приватной доске, а не в Blue Pill. (

Ошибка запроса дескриптора устройства

 GD32F103-предоставленные данные
Байты флэш-памяти: 65536
[31:00] $3439CB2E | 4 9 .. | <--Обнаружен шестнадцатеричный символ
[63:32] $0F383438 | . 8 4 8 | <--Обнаружен шестнадцатеричный символ
[95:64] $38393733 | 8 9 7 3 |

Данные GD32F103
$1FFFF7E0 = $00140040
$1FFFF7E8 = $3439CB2E
$1FFFF7EC = $0F383438
$1FFFF7F0 = $38393733
 

Хорошая синяя таблетка #1

Та же маркировка, что и № 2 ниже «991KA 93 MYS 903», но сообщается о 1/2 флэш-памяти.

 Die xy координаты: 107806545
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00525680 | Р В .
Lot_num в кодировке ascii [55:24]: 0x87192455 | . . $ U

ВСПЫШКА.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 65536 БЕСПЛАТНО: 0
 

Хорошая синяя таблетка #2

«991КА 93 МИС 903»

 Die xy координаты: 108068680
Номер вафли: 113
Lot_num в кодировке ascii [23:0]: 0x00565366 | В С ф
Lot_num в кодировке ascii [55:24]: 0x67133045 | грамм . 0 Э
 

FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗУЕТСЯ: 51200 БЕСПЛАТНО: 79872

POS Bluepill

Требуется перенастройка GDB, вообще не работает с отладкой Windows STM.

 Die xy координаты: 74414100
Номер вафли: 47
Lot_num в кодировке ascii [23:0]: 0x000E0014 | .. .
Lot_num в кодировке ascii [55:24]: 0x170707E2 | . . . .

БЕСПЛАТНО: 0
 

Примечание

говорит о полном отсутствии данных Ascii, и рассчитывается FLASH FREE = 0, поэтому что-то серьезно отличается.

ККС32Ф103К8Т6

Китайский клон

 Die xy координаты: 16985099
Номер вафли: 42
Lot_num в кодировке ascii [23:0]: 0x004D3512 | М 5 .
Lot_num в кодировке ascii [55:24]: 0x004E4B31 | . Н К 1

Бесплатно
FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 79872
 

Примечание

Китайский CKS32F103C8T6 использует не ASCII для номеров партий, а шестнадцатеричный код, и они идентичны 276745 ниже.

ККС32Ф103К8Т6

Китайский клон

 Die xy координаты: 276745
Номер вафли: 42
Lot_num в кодировке ascii [23:0]: 0x004D3512 | М 5 .
Lot_num в кодировке ascii [55:24]: 0x004E4B31 | . Н К 1

FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 79872
 

СТМ32Ф103К8Т6

 Die xy координаты: 107741012
Номер вафли: 72
Lot_num в кодировке ascii [23:0]: 0x00565283 | В Р .
Lot_num в кодировке ascii [55:24]: 0x87242040 | . [email protected]

FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 51200 БЕСПЛАТНО: 14336
 

Синяя таблетка

 Die xy координаты: 107741008
Номер вафли: 73
Lot_num в кодировке ascii [23:0]: 0x00485572 | Х У р
Lot_num в кодировке ascii [55:24]: 0x87243926 | .$ 9 &
 

Синяя таблетка

 Die xy координаты: 108265297
Номер вафли: 72
Lot_num в кодировке ascii [23:0]: 0x00515782 | К В .
Lot_num в кодировке ascii [55:24]: 0x87061344 | . . . Д
 

Синяя таблетка

 Die xy координаты: 108068681
Номер вафли: 73
Lot_num в кодировке ascii [23:0]: 0x00545682 | ТЕЛЕВИДЕНИЕ .
Lot_num в кодировке ascii [55:24]: 0x87055015 | . . П .
 

Синяя таблетка

Этот не хотел программировать на st-flash как в прилагаемом скрипте. Программы отлично работают с openocd

 Die xy координаты: 108134227
Номер вафли: 113
Lot_num в кодировке ascii [23:0]: 0x00544872 | Т Ч р
Lot_num в кодировке ascii [55:24]: 0x67041446 | грамм .. Ф
 

Синяя таблетка

 Die xy координаты: 108003154
Номер вафли: 72
Lot_num в кодировке ascii [23:0]: 0x00565388 | ПРОТИВ .
Lot_num в кодировке ascii [55:24]: 0x87093153
 

СТМ32Ф103КБТ6

 Die xy координаты: 108199730
Номер вафли: 52
Lot_num в кодировке ascii [23:0]: 0x00353254 | 5 2 т
Lot_num в кодировке ascii [55:24]: 0x57012556 | В . % В
 
Программирование

STM32F103 Blue Pill с использованием загрузчика USB и PlatformIO

Это печально известная плата Blue Pill — плата для разработки ARM STM32F103 за 2 доллара со всеми возможностями Teensy 3.x за долю цены Arduino. Так в чем подвох?

Я вам скажу — поддержка программного обеспечения.

Пару недель назад я решил потратить некоторое время на изучение этой платформы, потому что мне надоело платить 20 с лишним долларов за Teensy. Платформы PJRC фантастические, но они дорогие и для работы им нужен проприетарный загрузчик. Мне нужен небольшой и мощный чип руки, который я могу интегрировать в свои собственные печатные платы, а Teensy не позволяет это легко или дешево. Голубая пилюля и ее производные — это как раз то, что мне нужно!

Но как использовать одну из этих вещей? Это должно быть просто! Просто купите его, подключите к компьютеру через USB и загрузите код из Arduino IDE или PlatformIO точно так же, как если бы вы использовали Arduino!… НЕПРАВИЛЬНО! Похоже, Blue Pills еще не совсем готовы.Основная проблема — отсутствие установленного на заводе загрузчика USB, а также плохая документация и слабая поддержка в PlatformIO.

В качестве примечания: если вы не используете инфраструктуру PlatformIO ни с ATOM, ни с Visual Studio Code в качестве прототипа встроенной среды разработки, вам необходимо начать работу с программой! Просто скачайте VS Code и установите плагин PlatformIO — это фантастика! Намного лучше, чем Arduino IDE!

Теперь я расскажу вам, как заставить вашу синюю таблетку работать как Arduino:

  1. Получите плату Blue Pill STM32F103C8T6 И ЛИБО 3.Адаптер USB/UART на 3 В, программатор ST-LINK подделки или программатор REAL ARM, такой как J-Link. Вам нужна только одна из этих трех вещей. Я убедился, что этот учебник отлично работает со всеми 3.
  2. Замените резистор R10 с 10 кОм на 1,5 кОм на синей таблетке. Это резистор для поверхностного монтажа размером 0603 на нижней стороне Blue Pill. Прочитайте в другом месте об этой проблеме и убедитесь, что вам нужно сделать это для вашей конкретной платы. Я знаю, что это PITA, но просто сделайте это — это не так уж сложно и заставит USB работать правильно.
  3. Установите последнюю версию загрузчика USB на Blue Pill STM32F103.
    1. Вам необходимо получить последнюю версию загрузчика STM32duino из GITHUB от rogerclarkmelbourne здесь: https://github.com/rogerclarkmelbourne/STM32duino-bootloader Перейдите в папку «binaries» и загрузите файл bootloader.bin, который соответствует контакту светодиода на вашем фактическом Синяя таблетка! Мои платы Blue Pill имеют светодиод на контакте PC13, поэтому я выбрал файл «generic_boot20_PC13.bin».
    2. ВАРИАНТ 1: Используйте программу J-Flash Lite с программатором J-LINK ARM, чтобы записать файл загрузчика в Blue Pill.
      1. Подключите программатор, как показано на рисунке ниже, или узнайте, как подключить ваш конкретный программатор ARM к процессору ARM через контакты SWD.
      2. В J-Flash lite выберите процессор «STM32F103CB» из раскрывающегося списка, выберите файл bootloader.bin из предыдущего и нажмите «Запись». J-Flash Lite должен сказать успех. Подключите Blue Pill к ПК через USB, и он должен зарегистрироваться как COM-порт или что-то в этом роде, а светодиод должен мигнуть несколько раз.
    3. ВАРИАНТ 2: Blue Pill поставляется с завода с предварительно запрограммированным загрузчиком UART для работы с парой контактов. Это позволяет вам загружать ранее загрузчик USB с помощью адаптера USB-UART.Это более раздражает, потому что вы должны использовать странную программу Python. См. учебник этого чувака для информации.
    4. ВАРИАНТ 3: Используйте купленный вами поддельный программатор STLINK V2 для записи загрузчика. Честно говоря, я солгал и еще не использовал этот метод, но вам просто нужно загрузить какое-нибудь приложение для прошивки STLINK и загрузить наш загрузчик USB в Blue Pill, как мы сделали с J-Flash в варианте 1.
    5.  Загрузчик USB теперь должен быть на Blue Pill STM32F103 — убедитесь, что обе перемычки на Blue Pill установлены по умолчанию на 0, а светодиод должен быстро мигать после нажатия кнопки сброса, а затем продолжать медленно мигать, указывая на то, что пользовательская программа еще не найдена. .
  4. Установите драйверы DFU, чтобы Windows могла программировать Blue Pill
    1. Перейдите к репозиторию rogerclarkmelbourne на github для Arduino_STM32 здесь: https://github.com/rogerclarkmelbourne/Arduino_STM32
    2. Загрузите репозиторий, извлеките все содержимое, перейдите в «/drivers/win» и запустите «install_drivers.bat» от имени администратора. Это кажется очень схематичным, но на самом деле это работало для меня каждый раз.
  5. Убедитесь, что на вашем ПК установлены GIT и JAVA — поверьте мне — PlatformIO нужны оба для работы с Blue Pill
  6. Убедитесь, что у вас установлен и обновлен подключаемый модуль PlatformIO либо в ATOM, либо в Visual Studio Code
  7. .
  8. Создайте НОВЫЙ проект, используя PlatformIO и выбрав плату : bluepill и framework:Arduino
  9. Редактировать платформу.ino с парой пользовательских настроек
    1. Измените текст после платформы на «platform = https://github.com/platformio/platform-ststm32.git». Вот почему нам нужен GIT — он позволит PlatformIO получать самые последние данные о платформе и плате непосредственно из ГИТХАБ.
    2. Добавить или изменить «upload_port = что угодно»
    3. Добавить или изменить «upload_protocol = dfu»
    4. См. мой скриншот завершенного PlatformIO.ini
  10. Теперь вы сможете загрузить скетч/программу из PlatformIO на Blue Pill Board ТОЛЬКО с помощью USB-кабеля!
    1. Если вы тестируете с помощью программы Arduino «Blink», обязательно измените вывод светодиода с 13 или любого другого на PB13 для Blue Pill!
    2. Вам, вероятно, потребуется нажать кнопку сброса на Blue Pill, чтобы заставить программу загрузить

Я очень надеюсь, что кому-то это поможет.Это заняло больше часов, чем я хотел бы признать. Пожалуйста, дайте мне знать, если что-то нужно изменить или обновить. Постараюсь держать в актуальном состоянии — здесь все работало по состоянию на 16.12.17.

Miniscope v2c — USB-осциллограф для ПК с открытым исходным кодом, использующий STM32F103

Очень дешевый низкоскоростной двухканальный ПК/USB осциллограф с микроконтроллером STM32 (STM32F103C8T6).

  • следует идее miniscope v2b, используя приложение miniscope v4 в качестве графического интерфейса ПК,
  • с очень дешевым микроконтроллером STM32F103 в корпусе LQFP48 ($4),
  • односторонняя печатная плата, подходящая для домашнего прототипирования методом переноса тонера,
  • Выборка
  • : 2x461 тыс. выборок в секунду (2x300 тыс. выборок в секунду с более старой прошивкой), 8 бит, потоковая передача данных в реальном времени на ПК (полная скорость USB),
  • Загрузчик UART (менее удобный, чем USB SAM-BA от Atmel),
  • одиночный диапазон чувствительности, 0...6,6 В и нестандартное входное сопротивление 20 кОм (к сожалению, при большем сопротивлении видны перекрестные помехи канала и эффекты утечки входного тока АЦП - неплохим дополнением будет операционный усилитель R2R; примечание: сопротивление может быть увеличено при использовании более новых прошивка, использующая независимые АЦП для каналов A и B).

Некоторые сигналы низкой амплитуды (300 мВ размах), записанные с помощью miniscope v4:

Компоненты должны стоить менее 10 долларов США (с самодельной печатной платой).

Схема: miniscope_v2c_20120416.pdf

Односторонняя печатная плата Eagle, 66 мм x 36 мм


Заголовок Goldpin и кнопка BOOT используются для загрузки прошивки через UART.

STM32F103C8T6: пакет LQFP48

файлов орла

ИДЕ

Пример класса CDC — тот же путь, что и для miniscope v2 — выбран из STM в качестве базового проекта для ускорения программирования, связанного с USB-устройствами.В этом примере есть файлы проектов для IAR, Keil, RIDE, HiTOP и TrueSTUDIO, поэтому использование одного из этих IDE было бы преимуществом. К сожалению, я не нашел ни одного из этих подходящее. Ознакомительные версии RIDE и HiTOP имеют ограничительные лицензии (действующий контракт на поддержку). требование через 7 дней и отсутствие коммерческого использования соответственно). Лицензии на ознакомительную/облегченную версию IAR или Keil имеют ограничения на размер вывода, и это не будет проблемой в небольшом проекте, но у них есть довольно большие требования к дисковому пространству (~ 3 ГБ, насколько я помню), и их установщики не позволяют много настройка.То же самое и с TrueSTUDIO.

В итоге остановился на наборе инструментов CooCox - 115 МБ скачать для IDE + gcc, Использование ~800 МБ дискового пространства после установки, без лицензионных ограничений.

Загрузка прошивки

На печатной плате нет коннектора JTAG/SWD, поэтому прошивка должна быть загружена через загрузчик UART. Чтобы войти в режим загрузчика, нажмите и удерживайте кнопку BOOT, одновременно нажимая кнопку RESET. Загрузчик ПК (STM "Flash Loader Demo") работает без проблем с преобразователем USB-UART.Выводы загрузчика MCU устойчивы к напряжению 5 В, поэтому можно использовать преобразователь RS232-UART/USB-UART на 3,3 В или 5 В.

Кнопку RESET можно убрать - микроконтроллер также перейдет в режим загрузчика если бы он был включен (USB был бы подключен) при удерживании BOOT.

Поскольку отсутствует управление подтягиванием USB 1k5, USB необходимо повторно подключить, чтобы принудительно выполнить повторную нумерацию после сброса загрузки новой прошивки.

Некоторый базовый проект для тестирования MCU и зуммера: stm32scopeTest.7з.

Советы по скорости передачи данных по USB

Используйте пример CDC в качестве шаблона. Есть две конечные точки BULK. Для лучшей скорости передачи пример CDC потребует небольших модификаций.

  1. Измените VCOMPORT_IN_FRAME_INTERVAL на более низкое значение. Я не уверен, подходит ли значение = 1, когда передача должна быть двунаправленной, поэтому я использовал значение = 2. Это не будет иметь большого значения.
  2. Увеличить USART_RX_DATA_SIZE.Я использовал 8192 байта (2 x 4 КБ), но я думаю, что разницы в скорости не было бы при значениях выше 4096 B (максимальное количество данных будет передаваться в каждом или почти каждом кадре).
  3. Изменить Handle_USBAsynchXfer, чтобы он не передавал данные, если только половина USART_Rx_Buffer будет заполнен. Таким образом, после каждой SOF будет отправлено максимальное количество байтов. Если есть шанс, что буфер будет заполняться с низкой скоростью или вообще не заполняться какое-то время то здесь потребуется какой-то тайм-аут, который вызовет передачу все, что уже находится в буфере - вы можете знать об этой проблеме, если раньше использовали преобразователи USB в UART.

На ПК убедитесь, что приложение постоянно готово к приему новых данных. Убедитесь, что поток, который читает данные, работает с более высоким приоритетом, чем другие. Я использовал libusb, поэтому я использовал комбинацию usb_submit_async/usb_reap_async для постановки в очередь нескольких запросов на чтение, каждый раз запрашивая чтение 4096 B. Я предполагаю, что с WinUSB это можно было бы сделать с перекрывающимся вводом-выводом. Минископ v2b/v2c dll интерфейс библиотека передает данные через FIFO в приложение с графическим интерфейсом.

Меня не интересовала высокая скорость ПК к устройству, поэтому у меня нет советов по обратному направлению. Miniscope v2c (очень похож на v2b) постоянно передает данные на ПК на максимальной скорости. Передачи в обратном направлении незначительны (запрос ID, изменение аналогового усиления или аналоговой связи).

Прошивка и интерфейс miniscope v4 dll

  • 2012.04.16 Исходный выпуск, НЕ РЕКОМЕНДУЕТСЯ:
    stm32scope_20120416.7z
    miniscope_v2c_dll_20120416.7z
  • 2012.04.21 Множество исправлений как для dll, так и для прошивки:
    stm32scope_20120421.7z
    miniscope_v2c_dll_20120421.7z
    • ИСПРАВЛЕНО: ошибка кадрирования в коде dll приводила к разрыву трассировки при запись и отображение нескольких непрерывных буферов данных,
    • несколько исправлений и улучшений, связанных с очередью USB TX (т.е. более оптимальная распределение памяти между буфером АЦП и USB TX FIFO) в прошивке и очереди RX в dll,
    • расширен список размеров буферов до 128 КБ.
  • 2012.04.28 miniscope_v2c_dll_20120428.7z
    • ИСПРАВЛЕНО: если триггер был в непрерывном режиме, но остановлен (Run/Stop) одиночный ручной триггер заставлял работать так, как будто была нажата кнопка «Выполнить».
  • 2012.04.29 Более эффективное использование имеющегося оборудования — одновременное использование обоих АЦП режим позволил увеличить скорость дискретизации с 2x300 до 2x461 kSps и увеличить Время S/H до 13,5 циклов одновременно. Хотя АЦП все еще могут работать быстрее, увеличивая дальнейшая скорость не позволит поддерживать полноскоростную потоковую передачу USB в режиме реального времени на ПК, что важная функция, позволяющая использовать большие размеры буфера выборки и записывать сигнал непрерывно.
    stm32scope_20120429.7z
    miniscope_v2c_dll_20120429.7z
  • 2012.06.07 ИСПРАВЛЕНО: нет звука зуммера при запуске (петли задержки удалены при оптимизации o3).
    stm32scope_20120607.7z
  • 2012.10.06 Благодаря Openmoko, назначившему PID USB для открытия Исходные проекты miniscope v2c имеют свои уникальные VID = 0x1d50, PID = 0x604f пара.
    stm32scope_20121006.7z
    miniscope_v2c_dll_20121006.7z
  • 16.12.2012 Добавлена ​​библиотека устройств, созданная с помощью Code::Blocks/MinGW, stm32scope_cb.7z в качестве эталонного проекта. Протестировано только на мгновение, предыдущая (проект Turbo C++) версия библиотеки должна быть предпочтительным в целом.
    15.07.2020 Обновлен источник проекта Code::Blocks/MinGW: stm32scope_cb_20200714.7z. Поскольку новейший Code::Blocks 20 поставляется с 64-битным MinGW и не содержит 32-битных библиотек Windows, используйте Code::Blocks 16.
  • 2013.09.16 Обновлена ​​библиотека устройств miniscope_v2c_dll_20130916.7z:
    • ИСПРАВЛЕНО: случайная потеря данных (с журналом: «Переполнение RX FIFO») наблюдалась при выполнении потока. был приостановлен ОС на большее время, чем запрошено; странно такое поведение наблюдалось несогласованно, с небольшой нагрузкой на систему и когда отладчик/IDE не работал,
    • расширенный список размеров буфера сэмплов до 1 мс (x 2 канала).
  • 2017.01.21 Обновлена ​​библиотека устройств, miniscope_v2c_dll_20170121.zip, DLL теперь частично настраивается без перекомпиляции, поскольку диапазоны чувствительности можно изменить с помощью файла JSON, созданного в каталоге dll (miniscope_v2c_capabilities.cfg). Это содержимое файла по умолчанию, определяющее одиночный диапазон усиления (25,78 мВ/бит или 6,6 В/256 на бит):
    {
       "Возможности": {
          «Сцепление»: [ 1 ],
          «Чувствительность»: [0,02577999979257584]
       },
       "Другой" : {
          «битсперсэмпл»: 9,
          "signalInverted": ложь,
          «Смещение сигнала»: 0
       }
    }
         
    В приведенном ниже файле добавлены два дополнительных диапазона чувствительности (50 мВ/бит и 100 мВ/бит — без встроенной поддержки он зависит только от ручного переключения), принимает инвертированный сигнал с «0» посередине (инвертирующий усилитель, который сдвигает напряжение, чтобы осциллограф мог измерять положительные и отрицательные напряжения), using value = 127 - формула значения для образцов, полученных от устройства.Также добавлена ​​связь по переменному току (просто для справки, на самом деле не имеет особого смысла без поддержки в прошивке).
    {
       "Возможности": {
          «Сцепление»: [ 1, 2 ],
          «Чувствительность»: [0,02577999979257584, 0,05000000074505806, 0,1000000014
    1]
       },
       "Другой" : {
          "битсперсэмпл": 8,
          "signalInverted": правда,
          «Смещение сигнала»: 127
       }
    }
         
    Рекомендуется использовать редактор JSON, так как недопустимое содержимое JSON будет перезаписано DLL.
    Примечание: числа с плавающей запятой с большим количеством не очень значимых цифр на самом деле являются результатом чтения и записи библиотекой JSON в DLL с отсутствием правильного округления.
    Примечание 2: в этой настройке «bitsPerSample», сообщаемый графическому интерфейсу, изменен на 8 бит, что соответствует реальному числу используемых битов АЦП. 9 бит в настройках по умолчанию просто дают лучшее масштабирование по умолчанию, когда осциллограф может измерять только положительные напряжения. Это также устанавливает правильный диапазон для уровня запуска.
    В этой версии триггер наклона также был изменен на более простой, с меньшей фильтрацией. В то время как предыдущая версия может быть более стабильным во времени, он также был склонен не срабатывать с некоторыми сигналами, в частности, с медленными изменениями.
  • 10.08.2019 Прошивка в виде проекта EmBitz: stm32scope_embitz_20190810.zip
  • 2019.08.11 Прошивка + набор dll с базовой частотой дискретизации, сниженной до 292kSps (похоже, это устраняет проблемы переполнения FIFO/USB, приводящие к отсутствию непрерывности данных): stm32scope_embitz_20190811.zip, miniscope_v2c_dll_20190811.zip.

Хотя драйвер Windows (libusb-win32) включен в dll-архив, использование Zadig на самом деле проще и это единственный разумный вариант для 64-битной Win8/Win10:

Важно: убедитесь, что в качестве драйвера в Zadig выбран libusb-win32 (WinUSB может быть по умолчанию).

Последующие действия

Версия печатной платы

с регулятором LM1117 3,3 В и несколькими изменениями компоновки, сделанными с помощью программного обеспечения Pulsonix EDA от Quang Duy: http://мриткс.blogspot.com/2014/07/low-speed-dual-channel-pcusb.html.

Альтернативное оборудование

По-видимому, ebay (и, скорее всего, любой другой торговый сайт по вашему выбору) наводнен очень дешевыми (5 долларов США, включая доставку) Кленовые минималистичные платы STM32F103C8T6. Хотя я не тестировал их, они кажутся хорошим выбором для запуска этой прошивки. Не забывайте, что для загрузки программы в микроконтроллер необходим преобразователь USB-UART (или RS232-UART, если у вас в ПК есть RS232).

STM32F103C8T6 плата

Форт через USB на STM32F103 • JeeLabs

Mecrisp Forth и его GitHub зеркало сделать замечательный интерактивная среда для ряда мощных 32-разрядных микроконтроллеров на базе ARM. Там это миллион недорогих плат на базе STM32F103, доступных на eBay и AliExpress, например, вот этот, который часто называют «Голубой таблеткой»:

.

Но… из коробки Mecrisp Forth поддерживает только последовательный порт в качестве консоли.

Было бы неплохо, если бы мы могли загрузить расширенную версию Mecrisp Forth на этот плата, которая выполняет консольный ввод-вывод через USB? В конце концов, разъем есть!

Если вы давно следите за этим блогом, то знаете, что такой проект было начато довольно давно, на основе Экхарт Кеппен Работа, и что по пути он столкнулся с некоторыми препятствиями.

Хорошая новость: все основные ошибки исправлены!

Теперь вы можете установить USB-версию Mecrisp Forth на несколько разные платы на базе F103, и код достаточно легко адаптировать под новые доски.Различия заключаются только в том, как запускается перечисление USB: некоторые плате требуется определенный контакт GPIO, который должен быть вытянут вверх или вниз, прежде чем USB можно будет использовал. Другие платы имеют фиксированный подтягивающий резистор на 1,5 кОм и нуждаются в другой трюк в коде.

Вы можете найти все предварительно скомпилированные образы USB в суф / каталог Embello на GitHub, где «suf» означает «Serial USB Forth». На многих платах должно работать usb-common.hex .

Очень эффективный результат: просто подключите плату и последовательное USB-устройство. появится, к которому можно подключиться с помощью Folie или picocom.Это должно работать в Windows, MacOS, Linux и т. д.

Есть несколько отличий, о которых следует помнить при использовании сборок с поддержкой USB:

  • eraseflash был переопределен на не стереть сам драйвер USB
  • сброс (программный и аппаратный) приведет к отключению платы и переподключить
  • Вывод
  • в конечном итоге будет отброшен, если на стороне хоста ничего не прослушивается
  • драйверу USB требуется дополнительно 6 КБ флэш-памяти в дополнение к 20 КБ Mecrisp
  • .
  • последовательный порт больше не инициализируется при запуске
  • приветственное сообщение не отображается после сброса или повторного подключения

Обратите внимание, что когда SerPlus не находится в цикле, вам нужно запустить Folie с помощью -r (сырой) флаг.

Скорость соединения значительно выше последовательной, но что еще важнее важно то, что драйвер реализует двунаправленное регулирование (т. противодавление): вы можете отправить большой исходный файл Форта на доску, и он не выйдет за пределы цикла интерпретатора. Точно так же вы можете отправить вывод обратно в максимальная скорость без потери ни одного байта.

Быстрый тест, отправка примерно 65 КБ исходного кода Forth на Blue Pill заняла 8 секунды. Это 8 КБ/сек и около 250 строк/сек.Это может звучать не так много, но это значительно быстрее, чем скорость ok-prompt-throttled , которую вы будете получить с соединением на основе USART со скоростью 115 200 бод.

И, как будет описано в следующей статье, Mecrisp Forth делает довольно много удивительные вещи, пока он читает все эти исходные строки…

stm32 - STM32f103 HAL USB - мост UART

USB обеспечивает управление потоком. Это то, что вам нужно реализовать. Общее введение можно найти здесь:

https://средний.com/@manuel.bl/usb-для-микроконтроллеров-часть-4-обработка-больших-количеств-данных-f577565c4c7d

В основном, установка для направления USB-UART должна быть:

  1. Указывает, что код готов к приему USB-пакета
  2. Получение USB-пакета
  3. Укажите, что вы больше не готовы получать USB-пакет
  4. Передача данных через UART
  5. Начать сначала

Шаг 0: Начальная настройка

Вызовите USBD_CDC_SetRxBuffer , чтобы установить буфер для приема данных USB.Если вы не используете несколько буферов для достижения более высокой пропускной способности, достаточно одного вызова в начале программы.

Шаг 1: готов к приему данных

Вызов USBD_CDC_ReceivePacket . Помимо того, что следует из названия, эта функция указывает, что приложение готово к приему данных. Он немедленно возвращается до фактического получения данных.

Шаг 2. Получение USB-пакета

Здесь ничего делать не нужно.Это произойдет автоматически. После завершения будет вызван CDC_Itf_Receive .

Шаг 3: Укажите, что вы больше не готовы получать USB-пакет

Здесь делать нечего. Это происходит автоматически всякий раз, когда пакет был получен (и двойная буферизация не включена).

Шаг 4: Передача данных через UART

Думаю, ты знаешь, как это сделать. Вам решать, хотите ли вы сделать это блокирующим способом или используя DMA.

Поскольку задействован обратный вызов, вы не можете поместить этот код в основной цикл. Можно поместить весь код в CDC_Itf_Receive , если используется блокирующий UART. Он появится в порядке 2, 3, 4, 1. Кроме того, необходима инициализация (0 и 1).

В направлении UART-USB вам необходимо реализовать управление потоком на UART. Управление потоком USB управляется хостом. Несмотря на то, что USB намного быстрее, чем UART, управление потоком имеет значение, поскольку приложение на хосте может обрабатывать данные так медленно, как ему нравится.

Относительно вопроса 2: я не уверен, что понимаю... Микроконтроллер не может установить скорость передачи на хосте. Либо хост может указать скорость передачи данных (передается через USB и применяется к UART), либо, если UART имеет фиксированную скорость передачи данных, вы можете игнорировать скорость передачи данных (любая скорость передачи данных, установленная на стороне хоста, будет работать, поскольку она не применяется к USB).

.

Добавить комментарий

Ваш адрес email не будет опубликован.