STM32 “Blue Pill” в среде Arduino | arm
В этом руководстве (перевод [1]) рассматривается, как программировать платку на микроконтроллере STM32F103C8T6, так называемую “Blue Pill” [2] (часто эту плату называют Arduino STM32) с помощью Arduino IDE. Платки Blue Pill в изобилии продаются на AliExpress и Taobao, для поиска вбейте STM32 stm32f103c8t6.
Примечание: если Вы любите паять, то можно также самому заказать печатную плату Blue Pill онлайн-среде EasyEDA благодаря проекту [3]. Это модифицированный в сторону упрощения проект – заменен регулятор LDO на более удобный. Также изменены номинал резистора подтяжки USB и светодиоды индикации. Десяток плат обойдутся примерно $5, плюс доставка порядка $6.
[Что понадобится]
Платка STM32 “Blue Pill” или аналогичная:
Вид на верхнюю и нижнюю стороны плат STM32 “Blue Pill”
Отладчик ST-LINK/V2 для микроконтроллеров семейств STM8 и STM32:
Примечание: этот отладчик можно купить на AliExpress и Taobao по цене порядка $2. Подойдет и более старый отладчик ST-LINK или ST-LINK/v1, однако будьте внимательны к подключению отладчика через выводы SWDCLK, SWDIO, GND и +3.3V, цоколевки у разъема отладки могут различаться (см. врезку ниже).
Цоколевки разъема SWD адаптеров ST-Link
На цоколевках синим цветом выделены 4 провода, которыми адаптер подключается к микроконтроллеру STM32.
[STLink/STLink-V1]
Вид на штырьки разъема снаружи:
+—-+
T_JRST |1 2| 3V3
5V |3 4| T_JTCK/T_SWCLK
SWIM |5 6| T_JTMS/T_SWDIO
GND |7 8| T_JTDO
SWIM RST |9 10| T_JTDI
+—-+
[STLink-V2]
Вид на штырьки разъема снаружи:
+—-+
SWIM |3 4| SWDIO
GND |5 6| GND
3. 3V |7 8| 3.3V
5V |9 10| 5V
+—-+
Еще один возможный вариант цоколевки:
+—-+
RST |1 2| SWDIO
GND |3 4| GND
SWIM |5 6| SWCLK
3.3V |7 8| 3.3V
5V |9 10| 5V
+—-+
[Конфигурирование Arduino IDE]
Автор оригинальной статьи [1] использовал Arduino 1.8.1. Я экспериментировал в среде Arduino версии 1.8.13, и все описанное относится к ней. Так что вероятно, что в другой более-менее новой версии Arduino все также будет работать. Процесс по шагам:
1. Зайдите в меню Файл -> Настройки (File -> Preferences) и кликните на кнопку справа от поля ввода “Дополнительные ссылки для Менеджера плат:” (Additional Boards Manager URLs).
2. В окно ввода URL вставьте ссылку
https://github. com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
Закройте окна настроек кликами на OK.
3. Зайдите в меню Инструменты -> плата -> Менеджер плат… (Tools -> Board -> Board Manager). Для ускорения поиска нужного дополнения в выпадающем списке Тип (Type) выберите Внесены (Contributed). Прокрутите до STM32 Cores by STMicroelectronics и нажмите на кнопку Установка (Install).
Установка пакета поддержки STM32 займет несколько минут. Загрузятся утилиты компилирования и отладки ARM (ARM debugging/compiling toolchain).
4. Необходимо добавить поддержку ST-Link. Загрузите Arduino_STM32-master.zip по ссылке [4]. Создайте папку Arduino_STM32 в каталоге arduino-1.8.13\hardware\ (здесь arduino-1.8.13 это корневой каталог установки Arduino IDE, где находится исполняемый файл arduino.exe). Распакуйте содержимое архива Arduino_STM32-master.zip в папку arduino-1.8. 13\hardware\Arduino_STM32.
Перезапустите Arduino IDE.
5. Теперь надо сделать выбор используемой платы и программатора. Зайдите в меню Инструменты (Tools) -> Плата: (Board) -> STM32F1 Boards (Arduino_STM32) -> Generic STM32F103C series. Выбор может быть сделан на основе используемого на плате микроконтроллера.
Пример возможного выбора:
Плата: “Generic STM32F103C series”
Variant: “STM32F103C8 (20k RAM. 64k Flash)”
CPU Speed(MHz): “72 MHz (Normal)”
Optimize: “Smallest (default)”
[Загрузка скетча]
Чтобы убедиться, что все работает, запишем в память STM32103 простейшую программу мигания светодиодом – традиционный “Hello World” в мире микроконтроллеров. Для этого зайдите в меню Файл -> Примеры -> 01.Basics -> Blink (File -> Examples -> 01.Basics -> Blink).
Загрузится скетч Blink.
Соедините STLink с платой Blue Pill четырьмя проводами (см. выше врезку “Цоколевки разъема SWD адаптеров ST-Link”):
Blue Pill | STLink |
3V3 | 3.3V |
SWO | SWDIO |
SWCLK | SWCLK |
GND | GND |
Перемычки BOOT0 и BOOT1 установите в положение 00, что соответствует запуску кода из памяти Flash.
Назначение перемычек BOOT0 и BOOT1
BOOT1 | BOOT0 | Откуда запустится программа |
0 | 0 | Внутренняя память программ FLASH |
1 | 0 | |
0 | 1 | Системная память (встроенный в ROM загрузчик [6]) |
1 | 1 | Внутренняя память RAM |
Нажмите на круглую кнопку со стрелкой вправо (эквивалентно выбору в меню Скетч -> Загрузка Ctrl+U).
[Что дальше?]
Микроконтроллер серии STM32F1 (Arm® Cortex™-M) обладает широким набором аппаратных интерфейсов и возможностей использования.
Поэкспериментируйте с другими примерами кода и проектами из меню Файл -> Примеры. Будьте осторожны с использованием выводов USB- и USB+ (ножки портов PA11 и PA12) – они соединены с выводами коннектора microUSB. Также имейте в виду, что к выводам OSC32IN и OSC32OUT (ножки портов PC14 и PC15) подключен часовой кварцевый резонатор на 32.768 кГц.
[Ссылки]
1. How to program a STM32 Blue Pill with Arduino site:idyl.io.
2. Blue Pill STM32F103C8T6.
3. STM32F103 «Blue Pill» modified board.
4. rogerclarkmelbourne / Arduino_STM32 site:github.com.
5
6. Загрузчик STM32F42xxx и STM32F43xxx.
7. 201222STM32F103C8T6-BluePill.zip – пакеты ПО, документация.
Blue Pill/STM32F103 и Arduino: elchupanibrei — LiveJournal
Микропроцессор STM32 – лучше, быстрее, дешевле AVR. Единственное, что останавливало чайников, вроде меня, от использования шайтан камня – высокий порог вхождения. Не прошло и 5-и лет, как порог опустился ниже плинтуса. И вот как это произошло.
В свое время компания LeafLabs выпустила Maple Mini на базе STM32. К сожалению проект не взлетел. В 2012 году его закрыли, а все наработки отдали в открытый доступ. Сообщество радиогубителей тут же подхватило исходники и начало развивать свой проект – stm32duino. Правда пилят не спеша. Такое положение дел не понравилось rogerclarkmelbourne и он решил сделать свой велосипед с блекджеком и куртизанками.
С начала китайцы копировали только Maple Mini, потом стали выпускать свою версию в тех же размерах. На зарубежных форумах, новой плате дали кличку – Blue Pill. По аналогии с синей таблеткой из фильма “Матрица”. Существует большое количество версий платы. Самая популярная на STM32F103C8T6 и светодиодом на пине C13. Стоит около $2.2. Средняя цена Arduino Nano v3.0 с Ch440 адаптером $2.4. Даже тут STM32 лидирует. UDP: Китайцы наладили выпуск клонов STM32. Умеют маскироваться под оригинал и даже команды совпадают, но дьявол как всегда кроется в деталях. Будьте бдительны. Проверить на подлинность можно загрузив тестовую прошивку – Bluepill Diagnostics.
внешний вид Blue Pill
описание портов Blue Pill (откройте в новом окне для увеличения)
схема Blue Pill (откройте в новом окне для увеличения)
Что же мы получаем за эти деньги?
– Рабочая частота 72Mhz, у AVR 16MHz.
– Объем Flash памяти 64KB, у AVR 32KB. Говорят на самом деле там 128KB. Советую сразу не хакать на максимальный объем, мало какие глюки вылезут. Вот когда код обкатан, можно и посмотреть.
– У STM32 20KB оперативной памяти, у AVR всего 2KB.
– Разрядность АЦП 12-bit, у AVR только 10-bit. Функция analogRead() возвращает аж 0..4095 отсчетов, у AVR только 0..1023.
– Разрядность аппаратного ШИМ-а 16-bit, у AVR только 8-bit. Функция analogWrite() принимает значения в диапазоне от 0 до 65535, у AVR 0..255.
– У STM32 есть аппаратный USB.
– Напряжение питания от 2v до 3.6v. Как раз для двух AA/AAA батареек или аккумуляторов. Рабочий диапазон AVR от 2.7v до 5v и то с оговорками по рабочей частоте.
– У STM32 огромное количество портов и периферии.
– Из минусов, не все входы/выходы STM32 толерантны к 5v. Подключил не к тому и прощай $2. Список GPIO переваривающих 5v, помечены как FT в графе Level, находится здесь.
UDP: Фремйворк stm32duino наконец-то допилили и rogerclarkmelbourne больше не рекомендую (пропускаем простыню и сразу смотрим UDP2 в конце статьи). Github репозиторий гуру-мастера rogerclarkmelbourne бурлит и пенится. Новые глюки добавляются, старые исправляются. Не смотря на весь цирк с багами, число его последователей растет, а у stm32duino уменьшается. Секрет успеха в том, что фреймворк от rogerclarkmelbourne поддерживает заливку кода через usb bootloader. Господа из stm32duino пока научились выгружать код только через ST-Link.
UDP: Фремйворк stm32duino наконец-то допилили и bootloader больше не рекомендую. Все прекрасно шьётся с помощью STLink v2 по SWD из под Arduino IDE (пропускаем простыню про bootloader и сразу смотрим UDP2 в конце статьи). Перед тем как использовать Blue Pill, с фреймворком от rogerclarkmelbourne, ее надо чуть-чуть допилить напильником. Первое – это прошить bootloader. Для этого нам понадобится USB-COM переходник с 3v уровнем сигнала. Ищется по словосочетанию “usb serial 3.3v”
переходник USB-COM, версия раз
переходник USB-COM, версия два
Перемычку на USB-COM адаптере в положение 3.3v и подключаем по следующей схеме:
GND -> G
5V -> 5V
TX -> PA10
RX -> PA9
Качаем и устанавливаем STM32 Flash loader demonstrator. Переводим перемычку “Boot0” в положение “1“, а “Boot1” в положение “0“. Если чип не находится, на помощь приходит кнопка RESET.
грязный хак на 128KB
Заливаем bootloader из папки …/STM32F1/binaries/generic_boot20_pc13.bin, где pc13 на конце означает, что светодиод подключен к пину C13.
bootloader грузить сюда
Возвращаем перемычку “Boot0” в положение “0“. Теперь плата будет определяться в Windows как Maple и в нее можно заливать код через USB.
Качаем архив Arduino_STM32 и копируем его содержимое по адресу …\Documents\Arduino\hardware\Arduino_S
Загружаем Arduino IDE 1.6.9 или выше. Идем в Boards Manager и устанавливаем пакет для Arduino SAM Boards (32-bit ARM Cortex-M3)/Arduino DUE. Перегружаем Arduino IDE, загружаем Blink. PROFFIT!
Попробовал свою LiquidCrystal_I2C и она завелась. Библиотека RotaryEnocder работает быстрее, плавнее и чётче чем на AVR.
LiquidCrystal_I2C на stm32duino
UDP: Тут провели расследование какой камень быстрее всех. STM32 победил.
UDP2: Для установки консервативного фреймворка от stm32duino делаем все как обычно. Дописываем json в “Preferences” и устанавливаем пакет через Boards Manager. После этого BluePill можно програмировать через ST-Link (нужно доставить STM32CubeProgrammer). Чтоб STLink v2 увидел платы с зашитым bootloader-ом, его надо удалить.
Переход с Arduino на микроконтроллеры STM32
Arduino — это фантастическая платформа для изучения электроники и создания экспериментальных прототипов, но обычно она непригодна для коммерческих продуктов. Узнайте, что нужно для перехода с Arduino на микроконтроллер STM32.
Опубликовано
Платформа Arduino предоставила любителям и стартапам невероятно низкий порог входа для разработки собственных встраиваемых устройств.
Широкий выбор плат для разработки, простой интерфейс программирования и загрузки, а также обширное сообщество делают его привлекательным выбором для разработчиков продуктов.
Однако по мере того, как потребности проекта растут и меняются с течением времени, платформа Arduino может начать ощущаться ограничивающей.
Основной причиной этого является относительно ограниченный набор аппаратных средств, вызванный значительным объемом скрытой работы, необходимой для того, чтобы взять коммерческий микроконтроллер и полностью интегрировать его в программное обеспечение Arduino.
Большинство микроконтроллеров Arduino представляют собой 8-битные микросхемы AVR (с учетом ширины внутренней шины данных и архитектуры набора команд), и эти типы процессоров ограничены с точки зрения производительности ЦП.
Снижение производительности усугубляется тем фактом, что при сокрытии от пользователя большей части низкоуровневой конфигурации программное обеспечение, работающее на Arduino, практически гарантированно не будет полностью оптимизировано. Портативность и простота, в первую очередь, подчеркивается платформой.
По этим и другим причинам, когда приходит время повысить производительность и общую гибкость встроенного устройства, обычно наступает время отказаться от Arduino.
В огромном проценте встроенных систем в промышленности используются 32-разрядные микросхемы ARM, приводящие в действие такие устройства, как современные автомобильные компьютеры и многие другие.
Эти чипы не имеют себе равных по соотношению цены и производительности, а процессоры ARM уже давно являются основным продуктом встроенных вычислений, и у них нет никаких признаков падения.
Особенно популярным вариантом, сохраняющим многие преимущества платформы Arduino, являются микроконтроллеры серии STM32.
Благодаря тактовой частоте ЦП, достигающей 550 МГц, и огромному выбору микросхем они открывают совершенно новый мир возможностей.
Миграция — Программное обеспечение
Возможно, вы слышали о таких проектах, как STM32duino, цель которых — сделать некоторые популярные платы разработки STM32 совместимыми с платформой Arduino.
Хотя для некоторых это может быть привлекательной промежуточной точкой, это выходит за рамки этой статьи и может пострадать от проблем с оптимизацией, о которых я только что упомянул.
Наиболее значительным переходом от Arduino к STM32, безусловно, является опыт программирования.
Как правило, проект Arduino будет состоять из одного файла кода, «скетч», с вспомогательными библиотеками, сторонними или иными, включенными в более крупные проекты с использованием инструмента импорта библиотек Arduino и написания «#import
Кроме того, код поставляется предварительно структурированным с функциями настройки и цикла, причем содержимое функции настройки запускается один раз при запуске, а функция цикла запускается снова и снова в течение неопределенного времени после завершения выполнения функции настройки.
Даже с включением сторонних библиотек большая часть предоставленного пользователем кода по-прежнему будет находиться в этом единственном файле эскиза, где пользователь пишет определения для этих функций настройки и циклов, а также, возможно, других вспомогательных функций.
Эти качества специфичны для платформы Arduino, поэтому скетчи Arduino также имеют собственное расширение файла .ino.
Фактическим языком, используемым платформой Arduino, является C++, язык общего назначения, чья истинная структура проекта и поддерживающие программы в значительной степени скрыты средой разработки Arduino IDE.
И C++, и его старший родственный язык C используют два типа файлов как часть кодовой базы, которую пользователь будет писать и/или взаимодействовать с ней программно: исходные файлы, определяемые расширением файла .cpp или .c, и файлы заголовков, определяется расширением файла .h.
Файл .ino функционально идентичен отдельному файлу .c. Там определены переменные, а также функции.
Вместо этого заголовочный файл будет предоставлять такие вещи, как объявления функций для внешних библиотек или, в более общем смысле, объявления для некоторого интерфейса, который также определяется соответствующим исходным файлом.
Это позволяет, например, существование библиотеки для умножения матриц, а фактическая логика для этого определяется в файле с именем «matrix. c».
Если несколько файлов хотят использовать эти функции, расточительно и фактически запрещено эффективно переопределять эти функции снова и снова, повторно включая «matrix.c».
Вместо этого создается второй файл, «matrix.h», содержащий объявлений для этих функций, которые фактически являются просто указателями на функцию, которая была определена только в одном месте.
Теперь вместо этого мы можем просто включить «matrix.h» в каждый файл, который должен использовать библиотеку матриц, что не будет расточительно повторять полные определения функций.
Если эти идеи вам незнакомы, вам следует поискать вводные уроки по программированию на C/C++, поскольку эти концепции являются основополагающими в этом переходе.
Типичный проект C/C++ будет иметь исходный файл с именем main.c, который, как и файл .ino для Arduino, содержит точку входа в приложение, функцию с именем main .
Ключевое отличие состоит в том, что в отличие от файла скетча основная функция является единственной функцией «по умолчанию», которая запускается автоматически при запуске, в отличие от пары функций «настройка» и «цикл», упомянутых выше.
Это незначительная разница, однако структурирование вашей основной функции следующим образом заставит программу выполняться так же, как это делает скетч Arduino: проект, некоторые из которых будут созданы программистом, а некоторые будут предоставлены IDE.
Это подводит нас к следующему важному элементу опыта программирования. Какое программное обеспечение используется для создания и загрузки кода, если не Arduino IDE?
На самом деле это очень открытый вопрос, поскольку даже микросхемы, совместимые с Arduino, могут использоваться вне среды Arduino.
Микроконтроллеры могут быть запрограммированы в среде «голого железа», что означает, что программист использует отдельные, обычно настроенные инструменты для редактирования кода, затем компилирует его в исполняемую программу и загружает в микросхему.
Программирование, подобное этому, — лучший способ для более опытного разработчика действительно максимизировать производительность, но особенно большой скачок произошел с Arduino, который легко сочетает в себе последовательность редактирования, компиляции и прошивки и выполняет всю тяжелую работу под капотом. .
Золотая середина заключается в использовании среды IDE, которая по-прежнему обеспечивает автоматическую компиляцию и загрузку для обеспечения интегрированного опыта, но позволяет снять покров с фактического написания кода и по-прежнему позволяет настраивать процесс компиляции/загрузки. ST, компания, которая производит микроконтроллеры STM32, предоставляет отличный пример этого в виде своей пользовательской IDE, STM32CubeIDE.
STM32CubeIDE намного больше и имеет больше возможностей, чем Arduino IDE. Это IDE на основе Eclipse, что означает, что это модифицированная версия вездесущего универсального редактора кода Eclipse.
Это означает, что код будет иметь такие функции, как автоматическое завершение и возможность поиска определений или объявлений переменных и функций, что значительно упрощает реальный процесс программирования для больших приложений.
Возможно, его наиболее мощной функцией является интеграция с программным обеспечением для создания встроенного ПО STM32, которое предоставляет графический интерфейс для включения и настройки различных аппаратных компонентов в STM32 и автоматического создания встроенного ПО и функций настройки, соответствующих выбранным параметрам.
На следующем изображении показан инструмент распиновки, который доступен практически для каждого доступного микроконтроллера STM32. На изображении ниже используется микросхема STM32F401CCFx и настраивается ее интерфейс I2C1 (из 3 доступных).
Вы можете видеть, что шина I2C1 включена, а два контакта на изображении справа выделены зеленым цветом и помечены, чтобы указать, какие контакты I2C они представляют. В окне слева показаны различные параметры конфигурации, доступные для этой шины I2C, например возможность изменения ее скорости.
Все параметры, выбранные в этом графическом интерфейсе, могут быть переданы в проект в виде автоматически сгенерированного кода путем сохранения конфигурации и выбора параметра «Создать код» на верхней панели инструментов.
Эта функция делает использование всех преимуществ мощных периферийных устройств, доступных для чипов STM32, невероятно простым и избавляет от необходимости тратить время на изучение таблицы данных, чтобы выяснить, как увеличить разрешение вашего аналого-цифрового преобразователя или установить вашу шину SPI в ведомый режим.
Эти параметры были аккуратно представлены в этом графическом интерфейсе! Полученные в результате сгенерированные файлы кода содержат закомментированные блоки, в которых можно написать собственный пользовательский код, который можно увидеть в файле main.c, видимом на предыдущем изображении.
И последнее, но не менее важное: при переключении на STM32 и использовании STM32CubeIDE становится доступным мощный интерфейс отладки в реальном времени, чего не хватает Arduino.
Динамическая отладка позволяет выполнять код построчно во время его выполнения. Вы можете размещать точки останова, чтобы приостанавливать свою программу на определенных строках для проверки, и даже просматривать в реальном времени, постоянно обновляя переменные, без необходимости писать один оператор печати или какой-либо другой код.
Просто нажмите кнопку отладки, когда будете готовы протестировать программу, и код автоматически скомпилируется, загрузится и приостановится в начале выполнения.
Отладка в режиме реального времени значительно повышает производительность при написании и тестировании кода, особенно для встраиваемых систем.
Миграция — аппаратное обеспечение
Еще один необходимый шаг при переходе от Arduino к STM32 — понимание и устранение ключевых аппаратных различий между двумя семействами.
Возможно, наиболее важным, особенно если ваше встроенное устройство встроено в специальную печатную плату, является то, что чипы STM32 используют логический уровень 3,3 В, в отличие от уровня 5 В, используемого в Arduino.
Хотя 3,3 В является более «стандартным» и также будет совместимо с чем-то вроде Raspberry Pi, это все же может быть резким переходом после того, как вы потратили столько времени на работу с уровнями 5 В, используемыми Arduino.
Это означает, что во всех поддерживающих схемах, печатных платах и т. д., в которые вы интегрировали микроконтроллеры Arduino, теперь необходимо обеспечить наличие источника питания 3,3 В, который питает ваш микроконтроллер.
Кроме того, убедитесь, что любые входы, такие как контакты GPIO, считывающие состояние переключателя, или аналоговые контакты, считывающие переменный резистор, ограничены диапазоном от 0 до 3,3 В. Управление контактом GPIO с 5 В обычно разрушает чип!
При работе с такими протоколами связи, как SPI или I2C, либо настройте ведомое устройство (т. е. датчик) на версию 3,3 В, либо используйте преобразователь логического уровня между микроконтроллером и устройством.
Если вы монтируете микроконтроллер на заказную печатную плату, то также необходимо настроить окружающие схемы по сравнению с тем, что можно было сделать для микросхемы Arduino. Точные значения и практика могут немного отличаться от чипа к чипу, но обычно рекомендуется размещать керамический блокировочный конденсатор на каждом входе источника питания микроконтроллера.
Кроме того, требуется один или два обязательных внешних конденсатора, обычно называемых VCAP.
Чтобы в полной мере воспользоваться преимуществами более мощного аппаратного обеспечения, вы также можете снабдить микросхему STM32 внешним тактовым генератором и специальной микросхемой опорного напряжения для аналогового опорного вывода (это делает опорную точку АЦП чрезвычайно стабильной по сравнению с простым подключением к тому же источнику питания, который используется для питания).
Возможно, вы уже делали одну или все эти вещи с микросхемами Arduino, но теперь их следует считать вдвойне важными. Нет смысла менять мощный чип, если он не может полностью раскрыть свой потенциал из-за шумного источника питания или аналогового опорного сигнала.
Наконец, изменился интерфейс загрузки кода в микроконтроллер. Если вы привыкли только к платам для разработки Arduino, то, скорее всего, вы загружали код непосредственно через USB-порт на этих платах.
Те, кто создавал свои собственные печатные платы с микроконтроллерами, совместимыми с Arduino, вероятно, знакомы с программатором AVR-ISP, который подключается к интерфейсу SPI, а также к контакту сброса на микроконтроллере.
Это могло бы иметь форму 6-контактного разъема на печатной плате, который также присутствует на большинстве плат разработки Arduino, использующих микросхемы AVR. По умолчанию микросхема STM32 не может использовать ни один из этих интерфейсов для загрузки кода, а вместо этого использует интерфейс программирования по умолчанию для микроконтроллеров ARM, JTAG/SWD.
Распиновку этого интерфейса можно найти в Интернете, и она может иметь форму либо небольшого 10-контактного интерфейса, либо более крупного 20-контактного интерфейса.
В любом случае вам также потребуется приобрести совместимый отладочный зонд, который будет иметь ленточный кабель на одном конце для подключения к вашему интерфейсу JTAG/SWD, а на другом конце — порт USB для подключения к компьютеру.
Обратите внимание, что это обычно также относится к доскам разработки. Если вы можете загружать код на отладочную плату STM32 напрямую через USB, у вас, вероятно, есть плата Discovery, которая представляет собой отладочную плату производства ST со встроенным чипом для программирования.
Когда дело доходит до выбора отладочного зонда, наиболее простым вариантом является использование собственного отладочного зонда ST, разработанного специально для микросхем STM32, ST-Link. Это будет иметь гарантированную совместимость со всем программным обеспечением STM32Cube, описанным в предыдущем разделе, и, как правило, будет готово к работе из коробки.
Более продвинутые пользователи могут вместо этого использовать отладчики серии J-Link от SEGGER, совместимые с гораздо более широким спектром микроконтроллеров, чем просто микросхемы STM32.
Они могут похвастаться более мощными функциями отладки (такими как неограниченное количество точек останова в отлаживаемых программах) в сочетании с превосходным сопутствующим программным обеспечением. Эти отладочные зонды также официально совместимы с STM32CubeIDE с парой изменений в настройках.
Заключительные замечания
Существует множество отличий и тонкостей, связанных с различиями между разработкой встроенного программного обеспечения на основе платы Arduino и STM32, и на эту тему можно было бы написать еще много статей.
Я надеюсь, что эта статья предоставила общий обзор, который поможет вам перейти и сделает прыжок менее пугающим. Если вы дошли до того, что подумываете сделать это для своего проекта, скорее всего, оно того стоит!
Эта статья была написана Brandon Alba , разработчиком встроенных систем с опытом создания встроенных систем с нуля. Брэндон обладает обширным опытом от проектирования печатных плат до операционных систем реального времени.
Другой контент, который может вам понравиться:
5 6 голосов
Рейтинг статьи
Adafruit Protomatter | Библиотека для светодиодных матриц Adafruit RGB. |
ADCTouchSensor | Создание сенсорных датчиков с одним аналоговым контактом без внешнего оборудования |
АрдТап | Библиотека для управления платой Arduino с мобильного за пару минут. Никакого кодирования, только настройка. |
ArduinoUniqueID | Библиотека Arduinoдля получения серийного номера от микроконтроллеров Atmel AVR, SAM, SAMD, STM32 и ESP. |
АскСинПП | Библиотека протоколов Homematic |
АсинкДНСсервер_STM32 | Библиотека асинхронного DNS-сервера для STM32F/L/H/G/WB/MP1 с использованием LAN8720 или встроенного Ethernet LAN8742A |
AsyncUDP_STM32 | Полностью асинхронная библиотека UDP для STM32 с использованием LAN8720 или встроенного Ethernet LAN8742A. |
AsyncWebServer_STM32 | AsyncWebServer для STM32F/L/H/G/WB/MP1 с использованием LAN8720 или встроенного Ethernet LAN8742A |
Atmel TSS463C VAN bus Библиотека контроллера канала передачи данных | Библиотека для контроллера канала передачи данных Atmel TSS463/TSS461 VAN |
ОСРВ Azure ThreadX | Библиотека Azure RTOS ThreadX для Arduino |
Bh2750 | БиблиотекаArduino для коммутационных плат цифровых датчиков освещенности, содержащая микросхему Bh2750FVI | .
Синий дисплей | Эта библиотека позволяет смартфону или планшету Android выступать в качестве графического дисплея для вашего Arduino. |
Синий дисплей | Эта библиотека позволяет смартфону или планшету Android выступать в качестве графического дисплея для вашего Arduino. |
Библиотека BlueVGA для BluePill | Библиотека VGA для STM32F103C8T6 (BluePill), которая может манипулировать 224×240 пикселей с тайлами 8×8 или символами из определяемого пользователем растрового шрифта |
BlynkEthernet_STM32_WM | Simple Blynk Credentials Manager для плат STM32 с использованием встроенных экранов LAN8742A Ethernet, LAN8720, ENC28J60 или W5x00 Ethernet, с SSL или без него, данные конфигурации сохраняются в EEPROM. |
Ч476мск | Библиотека для чипа управления файловым менеджером Ch476. |
ДейзиДуино | Библиотека Arduinoдля аудиоплатформы Daisy. |
Уведомление о линии ESP | Библиотека уведомлений о линиидля ESP8266 и ESP32. |
Почтовый клиент ESP | Arduino E-Mail Client Library для отправки, чтения и получения входящих уведомлений по электронной почте для устройств ESP32, ESP8266 и SAMD21. |
EthernetWebServer_SSL_STM32 | Простой веб-сервер TLS/SSL Ethernet, HTTP-клиент и клиентская библиотека WebSocket для плат STM32F/L/H/G/WB/MP1, на которых работает веб-сервер с использованием встроенных экранов Ethernet LAN8742A, Ethernet LAN8720, W5x00 или ENC28J60. Теперь он поддерживает клиент Ethernet TLS/SSL. |
EthernetWebServer_STM32 | EthernetWebServer_STM32 — это простая библиотека Ethernet WebServer, HTTP Client и WebSocket Client для плат STM32F/L/H/G/WB/MP1 с использованием встроенных экранов Ethernet LAN8742A, LAN8720, Ethernet W5x00 или ENC28J60 |
Ethernet_Manager_STM32 | Simple Ethernet Manager для плат STM32F/L/H/G/WB/MP1 с Ethernet LAN8720, W5x00, ENC28J60 или встроенными экранами LAN8742A, с SSL или без него, данные конфигурации сохраняются в EEPROM. С функцией DoubleResetDetect. |
Толстяки | Файловая системаFAT на основе решения FatFS с открытым исходным кодом. |
Клиентская библиотека Firebase Arduino для ESP8266 и ESP32 | Клиентская библиотека Google Firebase Arduino для Espressif ESP8266 и ESP32 |
Клиент Firebase ESP32 | База данных Google Firebase Realtime Client Library Arduino для Espressif ESP32 |
Клиент Firebase ESP8266 | База данных Google Firebase Realtime Client Library Arduino для Espressif ESP8266 |
FirebaseJson | Самый простой синтаксический анализатор, сборщик и редактор JSON библиотеки Arduino для ESP8266, ESP32, Teensy 3.x, Teensy 4.x и других микроконтроллеров. |
FlashStorage_STM32 | Библиотека FlashStorage_STM32 предназначена для предоставления удобного способа хранения и извлечения пользовательских данных с использованием энергонезависимой флэш-памяти STM32F/L/H/G/WB/MP1. Он использует буферизованное чтение и запись, чтобы свести к минимуму доступ к Flash. Теперь он поддерживает запись и чтение всего объекта, а не только побайтно. Также теперь поддерживается новое ядро STM32 v2.0.0+. |
FlashStorage_STM32F1 | Библиотека FlashStorage_STM32F1 предназначена для предоставления удобного способа хранения и извлечения пользовательских данных с использованием энергонезависимой флэш-памяти STM32F1/F3. Он использует буферизованное чтение и запись, чтобы свести к минимуму доступ к Flash. Теперь он поддерживает запись и чтение всего объекта, а не только побайтно. Новое ядро STM32 v2.0.0+ теперь поддерживается. |
Пакет драйверов Grove | Пакет драйверов Grove |
Графический интерфейс | GUIslice встроенная библиотека графического интерфейса пользователя с сенсорным экраном на C для Arduino и Raspberry Pi |
IBusBM | Библиотека Arduino для протокола Flysky/Turnigy RC iBUS — сервопривод (прием) и датчики/телеметрия (отправка) с использованием аппаратного UART (архитектуры AVR, ESP32 и STM32) |
ИК-пульт | Отправка и получение инфракрасных сигналов по нескольким протоколам |
ИРМП | Прием и отправка инфракрасных сигналов. |
ЛифониSTM32 | Библиотека для базового комплекта Leafony STM32 |
Локонет | Включает связь Digitrax LocoNet |
мвебсокеты | Простая в использовании реализация WebSockets для микроконтроллеров |
Платформа MCCI Catena Arduino | БиблиотекаArduino для систем MCCI Catena 44xx, 45xx, 46xx и 48xx. |
MCCI FRAM I2C | Драйвер для MCCI Catena на базе I2C FRAM. |
Идентификатор микроконтроллера | Получить серийный номер производителя, хранящийся внутри микроконтроллера |
МджГроув | МджГроув |
МПУ6050 | MPU6050 Библиотека Ардуино. |
NeoPatterns | Шаблоны для полос и матриц NeoPixel, включая шаблоны примера NeoPattern от Adafruit. |
Контроллеры NintendoSTM32 | Поддержка Nunchuck, контроллера GameCube и джойстиков Game Port на STM32F1 |
OneWireNg | Сервисная библиотека Arduino 1-wire. Альтернатива OneWire. |
ОпенМРНлайт | Стек сетевых протоколов для модели железных дорог: реализация OpenLCB и LCC. |
Picovoice_DE | Picovoice для немецкого языка. Picovoice — это комплексная платформа для создания голосовых продуктов на ваших условиях. |
Picovoice_RU | Picovoice для английского языка. Picovoice — это комплексная платформа для создания голосовых продуктов на ваших условиях. |
Picovoice_ES | Picovoice для испанского языка. Picovoice — это комплексная платформа для создания голосовых продуктов на ваших условиях. |
Picovoice_FR | Picovoice для французского языка. Picovoice — это комплексная платформа для создания голосовых продуктов на ваших условиях. |
ПЙОН | PJON — это сетевой протокол мультимедийной шины с открытым исходным кодом и несколькими ведущими устройствами | .
Дикобраз_DE | Дикобраз для немецкого языка. Porcupine — это высокоточный и легкий генератор слов пробуждения. |
Поркобраз_EN | Дикобраз для английского языка. Porcupine — это высокоточный и легкий генератор слов пробуждения. |
Дикобраз_ES | Дикобраз для испанского языка. Porcupine — это высокоточный и легкий генератор слов пробуждения. |
Дикобраз_FR | Дикобраз для французского языка. Porcupine — это высокоточный и легкий генератор слов пробуждения. |
PS2KeyAdvanced | Клавиатура PS2 ПОЛНОЕ управление и обработка ВСЕХ клавиш, а также управление светодиодами. |
ПЗЭМ004Тв30 | Библиотека для монитора мощности и энергии PZEM-004T v3.0 |
ПДУ | Работа с устройствами 433/315 МГц. |
RT-резьба | Портирование операционной системы реального времени для плат Arduino SAM и SAMD |
RTT-CMSIS-ОС | RT-Thread CMSIS RTOS2 |
RTT-Ethernet | Драйвер Ethernet RT-Thread |
Поток РТТ | БиблиотекаArduino для Segger RTT Real-Time Transfer |
СериалВиреВыход | Благодаря последовательному проводному выводу (SWO) stm32duino может записывать трассировку и журналы на ПК на высокой скорости. |
Сервопривод | Обеспечивает плавное движение сервопривода. Предусмотрены линейные, а также другие (кубические, круговые, отскоки и т. д.) движения для облегчения сервоприводов. Поддерживается библиотека Arduino Servo или серворасширители PCA9685. |
SPIMemory | Библиотека памяти SPI для Arduino. (ранее SPIFlash) |
SSL-клиент | Библиотека Arduino для добавления функциональности TLS в любой клиентский класс |
STM32F1_RTC | Позволяет использовать функции RTC плат на базе STM32F1xx с использованием внешнего низкоскоростного генератора. |
STM32_ISR_Servo | Эта библиотека позволяет использовать прерывание от аппаратных таймеров на плате STM32F/L/H/G/WB/MP1 для управления несколькими серводвигателями. |
СТМ32_ШИМ | Эта библиотека-оболочка позволяет использовать аппаратную ШИМ на платах STM32F/L/H/G/WB/MP1 для создания и вывода ШИМ на выводы. |
STM32_Slow_PWM | Эта библиотека позволяет использовать аппаратные таймеры на платах STM32F/L/H/G/WB/MP1 для создания и вывода ШИМ на выводы. |
STM32_TimerInterrupt | Эта библиотека позволяет использовать прерывание от аппаратных таймеров на плате на базе STM32F/L/H/G/WB/MP1 |
СТМ32ад9833 | Библиотека Arduino STM32 для модуля Analog Devices ad9833 DDS |
STM32duino ASM330LHH | Автомобильный инерциальный измерительный блок. |
STM32duinoBLE | Форк библиотеки ArduinoBLE для добавления поддержки модулей STM32WB, SPBTLE-RF, SPBTLE-1S, BLUENRG-M2SP и BLUENRG-M0 BLE. |
STM32duino Примеры | Содержит несколько примеров ядра Arduino для микроконтроллеров STM32. |
STM32duino FP_Examples | Предоставляет несколько функциональных пакетов, которые объединяют использование нескольких плат X-NUCLEO |
STM32duino FreeRTOS | Операционная система реального времени реализована для STM32 |
STM32duino HTS221 | Емкостный цифровой датчик относительной влажности и температуры. |
STM32duino I-NUCLEO-LRWAN1 | Эта библиотека содержит драйвер LoRa® для платы расширения I-NUCLEO-LRWAN1. |
STM32duino IIS2DLPC | Высокопроизводительный трехмерный акселерометр со сверхнизким энергопотреблением. |
STM32duino IIS2MDC | Трехмерный магнитометр со сверхнизким энергопотреблением. |
STM32duino ISM330DHCX | Высокопроизводительный цифровой 3D-акселерометр и цифровой 3D-гироскоп. |
STM32duino ISM330DLC | 3D-акселерометр и 3D-гироскоп. |
STM32duino ISM43362-M3G-L44 | Эта библиотека включает драйверы для WiFi-устройства Inventek Systems с именем ISM43362-M3G-L44. |
STM32duino LIS2DU12 | Трехмерный акселерометр со сверхнизким энергопотреблением. |
STM32duino LIS2DW12 | Трехмерный акселерометр со сверхнизким энергопотреблением. |
STM32duino LIS2MDL | Трехмерный магнитометр со сверхнизким энергопотреблением. |
STM32duino LIS3MDL | Высокопроизводительный трехмерный магнитометр. |
STM32duino малой мощности | Функции примитивов энергосбережения для плат STM32 |
STM32duino LPS22DF | Нанодатчик давления. |
STM32duino LPS22HB | Барометр с абсолютным цифровым выходом, 260–1260 гПа. |
STM32duino LPS22HH | Нанодатчик давления. |
СТМ32дуино ЛПС25ХБ | Барометр с абсолютным цифровым выходом, 260–1260 гПа. |
STM32duino LSM303AGR | Трехмерный акселерометр и трехмерный магнитометр. |
STM32duino LSM6DS0 | 3D-акселерометр и 3D-гироскоп. |
STM32duino LSM6DS3 | 3D-акселерометр и 3D-гироскоп. |
STM32duino LSM6DSL | 3D-акселерометр и 3D-гироскоп. |
STM32duino LSM6DSO | Инерциальный измерительный блок сверхмалой мощности. |
STM32duino LSM6DSR | Инерциальный измерительный блок iNEMO. |
STM32duino LwIP | Облегченный стек TCP/IP |
STM32duino M24SR64-Y | Эта библиотека включает драйверы для метки ST M24SR64-Y NFC/RFID. |
STM32duino M95640-R | Эта библиотека включает драйверы для ST M95640-R EEPROM. |
STM32duino MotionFX | Позволяет запускать алгоритмы Sensor Fusion с датчиками ST MEMS на платах STM32 |
СТМ32дуино МХ25Р6435Ф | Библиотека флэш-памяти Quad-SPI NOR. |
STM32duino NFC-RFAL | Позволяет управлять компонентами считывателя карт ST NFC на основе RFAL | .
STM32duino Жест приближения | Позволяет выполнять обнаружение простых жестов с помощью датчиков приближения |
STM32duino RTC | Позволяет использовать функции RTC плат на базе STM32. |
STM32duino S2-LP | Эта библиотека включает драйверы для приемопередатчика ST S2-LP с частотой менее 1 ГГц. |
STM32duino SPBTLE-РФ | Эта библиотека включает драйверы для устройства BlueNRG/BlueNRG-MS Bluetooth Low Energy компании ST. |
STM32duino ST25DV | Позволяет управлять NFC ST25DV |
СТМ32дуино СТ25Р3911Б | Позволяет управлять компонентом ST ST25R3911B |
STM32duino ST25R3916 | Позволяет управлять компонентом ST ST25R3916 |
STM32duino ST25R95 | Позволяет управлять компонентом ST ST25R95 |
STM32duino STM32Ethernet | Включает сетевое подключение (локальное и Интернет) с использованием платы STM32. |
STM32duino STM32SD | Позволяет читать и записывать на SD-карту, используя слот для SD-карты, подключенный к аппаратному обеспечению SDIO/SDMMC микроконтроллера STM32. Для слотов, подключенных к SPI-оборудованию, используйте стандартную библиотеку Arduino SD. |
STM32duino STTS22H | цифровой датчик температуры. |
STM32duino STTS751 | цифровой датчик температуры. |
STM32duino VL53L0X | Позволяет управлять VL53L0X (датчик времени полета и обнаружения жестов) |
STM32duino VL53L1 | Позволяет управлять VL53L1 (Time-of-Flight) |
STM32duino VL53L1X | Позволяет управлять VL53L1X (датчик времени полета и обнаружения жестов) |
STM32duino VL53L3CX | Позволяет управлять VL53L3CX (времяпролетный дальномер с обнаружением нескольких целей) |
STM32duino VL53L5CX | Позволяет управлять VL53L5CX (времяпролетный многозонный дальномер 8×8 с широким полем обзора) |
STM32duino VL6180 | Позволяет управлять VL6180 (датчик приближения) |
STM32duino VL6180X | Позволяет управлять VL6180X (датчик приближения и освещенности (ALS)) |
STM32duino X-NUCLEO-53L0A1 | Позволяет управлять датчиками VL53L0X на борту X-NUCLEO-53L0A1 |
STM32duino X-NUCLEO-53L1A1 | Позволяет управлять датчиками VL53L1X на борту X-NUCLEO-53L1A1 |
STM32duino X-NUCLEO-53L1A2 | Позволяет управлять датчиками VL53L1 на борту X-NUCLEO-53L1A2 |
STM32duino X-NUCLEO-53L3A2 | Позволяет управлять датчиками VL53L3CX на борту X-NUCLEO-53L3A2 |
STM32duino X-NUCLEO-53L4A1 | Позволяет управлять датчиками VL53L4CD на борту X-NUCLEO-53L4A1 |
STM32duino X-NUCLEO-53L4A2 | Позволяет управлять датчиками VL53L4CX на борту X-NUCLEO-53L4A2 |
STM32duino X-NUCLEO-53L5A1 | Позволяет управлять датчиками VL53L5CX на борту X-NUCLEO-53L5A1 |
STM32duino X-NUCLEO-6180A1 | Позволяет управлять датчиками VL6180 на борту X-NUCLEO-6180A1 |
STM32duino X-NUCLEO-6180XA1 | Позволяет управлять датчиками VL6180X на плате X-NUCLEO-6180XA1 |
STM32duino X-NUCLEO-GNSS1A1 | Позволяет управлять X-NUCLEO-GNSS1A1 (плата расширения GNSS на базе Teseo LIV3F) |
STM32duino X-NUCLEO-IDB05A1 | Позволяет управлять платой расширения ST X-NUCLEO-IDB05A1 |
STM32duino X-NUCLEO-IHM01A1 | Позволяет управлять платой расширения ST X-NUCLEO-IHM01A1 |
STM32duino X-NUCLEO-IHM02A1 | Позволяет управлять платой расширения ST X-NUCLEO-IHM02A1 |
STM32duino X-NUCLEO-IHM05A1 | Позволяет управлять платой расширения ST X-NUCLEO-IHM05A1 |
STM32duino X-NUCLEO-IHM12A1 | Позволяет управлять платой расширения ST X-NUCLEO-IHM12A1 |
STM32duino X-NUCLEO-IHM15A1 | Позволяет управлять платой расширения ST X-NUCLEO-IHM15A1 |
STM32duino X-NUCLEO-IKA01A1 | Позволяет управлять платой расширения ST Microelectronics X-NUCLEO-IKA01A1 |
STM32duino X-NUCLEO-IKS01A1 | Позволяет управлять платой расширения ST X-NUCLEO-IKS01A1 |
STM32duino X-NUCLEO-IKS01A2 | Позволяет управлять платой расширения ST X-NUCLEO-IKS01A2 |
STM32duino X-NUCLEO-IKS01A3 | Позволяет управлять платой расширения ST X-NUCLEO-IKS01A3 |
STM32duino X-NUCLEO-IKS02A1 | Позволяет управлять платой расширения ST X-NUCLEO-IKS02A1 |
STM32duino X-NUCLEO-IKS02A1 Аудио | Цифровой микрофон IMP34DT05. |
STM32duino X-NUCLEO-LED61A1 | Позволяет управлять платой расширения ST Microelectronics X-NUCLEO-LED61A1 |
STM32duino X-NUCLEO-NFC01A1 | Позволяет управлять платой расширения ST X-NUCLEO-NFC01A1 |
STM32duino X-NUCLEO-NFC03A1 | Позволяет управлять платой расширения ST X-NUCLEO-NFC03A1 |
STM32duino X-NUCLEO-NFC04A1 | Позволяет управлять платой расширения ST X-NUCLEO-NFC04A1 |
STM32duino X-NUCLEO-NFC05A1 | Позволяет управлять платой расширения ST X-NUCLEO-NFC05A1 |
STM32duino X-NUCLEO-NFC06A1 | Позволяет управлять платой расширения ST X-NUCLEO-NFC06A1 |
STM32duino X-NUCLEO-S2868A1 | Позволяет управлять радиомодулем S2-LP на плате X-NUCLEO-S2868A1 |
STM32duino X-NUCLEO-S2868A2 | Позволяет управлять радиомодулем S2-LP на плате X-NUCLEO-S2868A2 |
STM32duino X-NUCLEO-S2915A1 | Позволяет управлять радиомодулем S2-LP на плате X-NUCLEO-S2915A1 |
СТМ32мкп4151 | Arduino STM32 библиотека для микрочипа mcp 4151 цифровой потенциометр |
Радиостанция | Речевая библиотека для Arduino. |