Давно хотел это опробовать, да руки не доходили. Наконец-то освободился и решил это освоить — превращение Visual Studio Code в IDE для написания и отладки прошивок под микроконтроллеры, и как первые ласточки опробованы Wi-Fi SoC RTL8195AM и Cortex-M4 STM32F407VGT6. Пример-описание в статье будет для STM32F407VGT6.

Подготовка Visual Studio Code
Для примера используется Visual Studio Code v1.33.1, на старых версиях могут быть небольшие отличия в плане конфигурационных json файлов.
Предполагается, что у вас уже установлена или есть портативная версия Visual Studio Code. Для работы с C\C++ и отладчиком Cortex-M нам потребуются следующие расширения:
- C/C++ for Visual Studio Code — IntelliSense, подсветка кода;
- Cortex-Debug — поддержка ARM Cortex-M GDB отладки.
Установить их можно прямо в VS Code, поиском по имени в окне расширений:

Настраивать особо там ничего не требуется.
Установка тулчейна, драйверов отладчика
Ставим драйвера на J-Link — тут совсем ничего сложного, скачать их можно тут — J-Link Software and Documentation Pack.
Далее нам потребуются инструменты, которыми мы будем собирать и заливать прошивку. Cкачиваем официальный тулчейн GNU Arm Embedded Toolchain версии x32 или лучше GNU MCU Eclipse ARM Embedded GCC arm-none-eabi-gcc-xpack x64 версию, т. к. в официальной последней х32 я столкнулся с багом objcopy.exe в GNU Arm Embedded Toolchain, который выглядит во время сборки проекта вот так (более подробно по ссылке выше):

Также скачиваем GNU MCU Eclipse Windows Build Tools — это инструменты для сборки, Windows порт. Далее распаковываем тулчейн и инструменты в 2 разные папки, без кириллицы в пути (в идеале без длинного пути и без пробелов). Теперь прописываем их в пользовательский Path (можно и в глобальный):

У меня это выглядит вот так:

Как можно видеть выше, у меня прописаны пути аж к Visual Studio тулчейну\инструментам (чтобы не делать две копии на ПК), и я могу тем самым делать проекты как в большой и могучей Visual Studio, так и в сторонних приложениях (как мы сейчас разбираем, Visual Studio Code). Да, GNU MCU Eclipse ARM Embedded GCC я просто распаковал взамен стокового (очень старого) тулчейна, устанавливаемого с Visual Studio.
Пути, которые я добавил (у вас будут явно другие, просто пример, до каких папок необходимо указывать):
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Linux\gcc_arm\bin C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Linux\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin C:\Data\JLink_V640
Тестовый проект
В качестве тестового проекта возьмем любимый всеми STM32CubeMX и сгенерируем в нём для старючей STM32F4DISCOVERY (просто она есть под рукой) минимальный проект, чтобы не собирать исходники и не писать самому makefile (предполагается, что вы уже знаете уже, как это делается). В проекте задействуем кнопку и светодиоды:

Не забываем выбрать тип проекта/IDE — Makefile:

Подготовка проекта и компиляция
Теперь осталось немного подготовить проект к работе в VS Code. Я не буду подробно описывать, что и как, пример проекта, уже готового к работе в VS Code, лежит здесь — STM32F407_VSC_Example.

Вкратце же изменения и дополнения следующие:
- В корне проекта появилась папка JLink (название и расположение может быть любое другое, не принципиально) со скриптами для записи, чтения и затирания прошивки, а также тут лежит SVD-файл, описывающий всю периферию в микроконтроллере;
- В корне проекта появилась папка .vscode (название и расположение важны!), тут хранятся все настройки и задачи для VS Code, минимальное необходимое содержание следующее:
- Файл c_cpp_properties.json — тут определяются директории, которые будет сканировать IntelliSense, путь к компилятору для него, а также все объявления в проекте (дублируются из makefile);
- Файл launch.json — это файл конфигурации для отладчика, здесь описывается, откуда и чего брать и как подключаться;
- Файл settings.json — это дополнительный файл конфигурации для отладчика, здесь прописываем полный путь к GDB серверу (без полного пути отладка не запускалась, какой-то баг в расширении);
- Файл tasks.json — описание всех задач, компиляция, прошивка, сброс и, как дополнительный пример, запуск GDB-сервера дополнительным окном.
Все объявленные задачи можно посмотреть здесь:


Удобно, кстати, назначить задачи на горячие клавиши.
Приводить здесь код из файлов не вижу смысла (и еще wordpress часто коробит код в вставках, уже надоело бороться с этими приколами…), поэтому переходите по ссылкам и изучайте, копируйте, что нужно. :)
Да, разве что небольшой нюанс касательно makefile, который генерирует STM32CubeMX. Если его не править, то при сборке в терминал будет выводиться только следующее:

А во время сборки вообще ничего не выводится, т. е. непонятно, что в данный момент делается и какой файл компилируется. Подправить это легко, заходим в makefile и добавляем 2 строчки:

Строки 162 и 166, результат:

Отладка
Ну и последнее, самое простое (если всё настройки верны и пути к файлам указаны верно) — запуск отладчика (предварительно необходимо прошить микроконтроллер актуальной версией прошивки, которую хотите отлаживать):

После нажатия на кнопку и ожидания 2-5 секунд отладчик будет готов к работе и покажет текущее местоположение выполняемого шага, на котором зафризился микроконтроллер при подключении к нему отладчика.
Для примера пара гифок. Добавляем в watch переменную:

Смотрим и изменяем значения регистров напрямую (необходим SVD-файл):

На этом всё, спасибо, что прочитали! Удачного кодинга. ;)
UPDATE 2020.05.07:
- Тулчейн x64 переехал сюда — xpack-dev-tools/arm-none-eabi-gcc-xpack, скачать можно в Releases.
- Исправлен скрипт FlashMCU.jlink, работавший со старыми драйверами J-Link, но переставший корректно работать с новыми (не заливается прошивка с различными ошибками).
Ссылки
- STM32F407_VSC_Example — исходный проект для STM32F407VGT6;
- Visual Studio Code — скачать редактор тут и сделать из него портативную версию;
- GNU Arm Embedded Toolchain — 32-битный тулчейн;
GNU MCU Eclipse ARM Embedded GCC — 64-битный тулчейн;- arm-none-eabi-gcc-xpack — 64-битный тулчейн;
- GNU MCU Eclipse Windows Build Tools — инструменты для сборки, Windows порт;
- Cortex-Debug — описание расширения для VS Code, его настройка и профили отладки;
- CMSIS-SVD Repository and Parsers — репозиторий с кучей SVD-файлов;
- J-Link Software and Documentation Pack — драйвера, документация для J-Link;
- STM32CubeMX — всеми любимый генератор кода и проекта для STM32.