
Бесплатных IDE для разработки микроконтроллеров не так уж много, а их интерфейс, основанный на Eclipse, вызывает у меня только страдания. В итоге разработка превращается в постоянное переключение с VSCode для редактирования кода в CubeIDE для его сборки и отладки.
Но почему бы не собрать все инструменты в VSCode в едином расширении, заодно подогнав автогенерацию проектов под стиль компании/личные предпочтения? Об и будет моя первая статья. Привет, Хабр!
В процессе поиска альтернативных решений была найдена система сборки Xmake, основанная на Lua. Сама по себе она уже поддерживает разработку на ARM, но я бы не назвал ее полноценной заменой CubeIDE из-за отсутствия удобного GUI, да и быстро запустить разработку на ней у меня не получилось. Но сама система меня завлекла и было принято решение создать поверх неё узкоспециализированное расширение, которое позволит через графический интерфейс настроить проект, скомпилировать и запустить отладку, но чтобы все это занимало минимум времени.
Так появилось расширение Xbuild MCU, предназначенное для разработки проектов на STM32.
Важное замечание: мой опыт в создании расширений для VSCode минимальный, а знакомство с Xmake не было углубленным. Расширение было проверено на нескольких проектах и показало свою работоспособность, но разработка все еще продолжается. Если у Вас будут указания на ошибки или предложения по улучшению, я с радостью приму их.
Основной функционал расширения: автогенерация структуры проекта, импорт системных файлов из CubeMX, настройка сборки через GCC/G++ и прошивка через JLink.

Основное меню, используемое для работы с проектом - Project Configuration. Для создания нового проекта достаточно открыть пустую папку через VSCode и зайти в настройки проекта. Система определит, что в текущей папке нет базового скрипта xmake.lua и предложит его сгенерировать автоматически.
Внешний вид


Для первичной настройки проекта проще всего выбрать один из готовых пресетов, а затем изменить под реальные данные. Основные поля, которые необходимо настроить, находятся в подпунктах MCU и Paths.
STM32 SDK Path - это путь до папки ARM GCC
JLINK_PATH = "c:/Programs/JLink_V872a/JLink.exe"
STM32_SDK = "c:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.14.3.rel1.win32_1.0.0.202510090749/tools"
Далее необходимо настроить все дефайны и файлы, включаемые в сборку. Это так же проще сделать через "Reset to STM32F103 Defaults", а затем изменить под нужные в текущем проекте.
Если Вы не знаете, что туда вписать, то значения для всех этих полей можно найти в через интерфейс CubeIDE.
Вероятнее всего, вы создавали стартовый код проекта через CubeMX. Тогда можно быстро импортировать его основные файлы, указав путь до проекта. Расширение скопирует startup файл, linker script и драйверы. Файлы с кодом по типу main.c не копируются: предполагается, что структура проекта может отличаться от стандартно сгенерированной CubeMX, и эти файлы либо вообще не переносятся, либо копируются отдельные блоки.
Расширение позволяет управлять Git-сабмодулями. Так, например, если в Вашей компании в каждом проекте используется определенный набор сабмодулей, их можно указать в User Settings VSCode, и тогда расширение позволит подключать/удалять их по нажатию одной кнопки. Подробнее о настройке можно прочитать в README репозитория.
Внешний вид


Для генерации начальной структуры проекта удобно использовать шаблоны. Расширение предполагает, что в корне проекта может находиться папка templates, в которой собраны шаблоны со структурой папок и дефайнами. Удобнее всего добавлять эту папку как сабмодуль, после генерации структуры ее можно будет безболезненно убрать из проекта.
Расширение автоматически генерирует .vscode/launch.json для работы с плагином Cortex-Debug.
Кроме того, расширение поддерживает два типа сборки: Debug и Release. Для каждого из них можно настроить степень оптимизации. После сборки проекта открывается окно, в котором показывается, какой процент Flash и Ram памяти микроконтроллера использован под программу (по аналогии с ESP-IDF).
Внешний вид подпункта Optimization

В раскрывающемся списке "Available Optimization Levels" есть краткое описание доступных вариантов уровня оптимизации.
Если в системе установлен Doxygen, то доступна генерация документации через соответствующий пункт меню.ma
Данное расширение создавалось под конкретные входные условия, из-за чего его нельзя назвать по-настоящему универсальным, но мне кажется, оно может стать достойной заменой CubeIDE, ориентируясь больше на лаконичность и удобство интерфейса. А благодаря поддержке шаблонов и простому редактированию Lua скрипта его можно подогнать под конкретные требования Вашей команды или личные предпочтения. Прошу относиться к этому проекту как к демонстрации жизнеспособности идеи. Работа над дальнейшим улучшением функционала и исправлением ошибок будет продолжаться. Если Вы нашли критические ошибки или у Вас есть предложения, как сделать расширение более гибким, пожалуйста, поделитесь этой информацией.
