STM32 Blue Pill в PlatformIO
Я провел довольно много лет, работая со встроенными системами, и в последние годы я склоняюсь к платформе Arduino из-за ее простоты использования. Несмотря на то, что Arduino невероятно гибок и универсален (в настоящее время есть несколько производителей, которые используют программную платформу Arduino для своих продуктов в качестве дополнения к своим собственным инструментам), некоторых программных инструментов у него нет. Но они входят в PlatformIO (PIO).
Ребята из PlatformIO (https://platformio.org/) разработали инструмент, который интегрируется с несколькими средами разработки, причем Visual Studio Code является основной на данный момент. Это в отличие от IDE Arduino и некоторых других IDE микроконтроллеров является значительным улучшением, т.к привносит в мир микроконтроллеров испытанные и общепринятые возможности IDE платформ, используемых для разработки программного обеспечения.
В последнее время я много работал с платой STM32 Blue Pill, в которой установлен микроконтроллер STM32F103C8T6, что является чудом для таких размеров платы. Тактовая частота 72 МГц - это невероятно мощный и универсальный микроконтроллер, который может программироваться с помощью Arduino IDE через USB, как любая другая плата Arduino. Существует множество блогов и учебных пособий, показывающих, как это делается, например,
Проблема возникает при попытке использовать PIO на Blue Pill. В файле .ini проекта PIO необходимо внести и изменить некоторые параметры. Эта статья - моя попытка описать то, что я нашел в сети, как настроить проект PIO для работы с Blue Pill и запрограммировать его через USB.
Во-первых, необходимо создать новый проект со следующими настройками:
- плата STM32F103C8 ( 20 КБ ОЗУ, 64 КБ Flash) (Generic)
- Framework - Arduino.
Жмем Finish
Как только процесс будет завершен, будет создан новый проект, в корне которого есть файл platformio.ini. Он будет иметь базовую конфигурацию, которую PIO настроил для проекта. Файл выглядит следующим образом.
Файл platformio.ini сообщает PlatformIO, какой framework следует использовать (в основном, какой компилятор и дополнительные библиотеки могут понадобиться), а также какая используется плата. Дополнительную информацию можно найти в документации (
Первое, что следует отметить, это то, что выбранная плата является платой общего назначения (generic), но основана на микроконтроллере, используемом в Blue Pill. К счастью, PIO позволяет нам указать такие варианты плат, что необходимо для использования определенного загрузчика.
Еще одна важная вещь, которую стоит отметить, это то, что выбираемая платформа - это ststm32, а не какая-либо из версий Maple. При первых попытках я использовал Maple 1.0, и 2.0. Хотя мне удавалось запрограммировать эту плату, она тут же разрывала USB-соединение, и это означало, что я не мог запрограммировать ее во второй раз и даже увидеть вывод в последовательный порт USB.
Однако просто указав ststm32 в качестве платформы, PIO подскажет использовать стандартный загрузчик для Arduino, который не работает с USB напрямую;
Чтобы это исправить, нам нужно добавить еще один параметр, который называется board_build.variant, и сказать ему, что мы будем использовать Blue Pill на основе микроконтроллеров серии F103.
На этом этапе мы можем запрограммировать плату через USB несколько раз и ничего не сломать )). Тем не менее, с этой конфигурацией, мы не получим никакого выхода с USB (как с последовательного порта на Arduino). Чтобы добиться этого, нам нужно включить параметр [build_flags = - PIO_FRAMEWORK_ARDUINO_ENABLE_CDC], чтобы указать плате во время работы использовать USB-порт в качестве последовательного устройства вывода.
Надеюсь, что это было полезно для всех.