Программирование

Настройка VS Code workspace для AVR и STM32

Пошаговое создание рабочего пространства в VS Code с глобальными настройками для AVR и STM32 микроконтроллеров. Проект-специфичные settings.json, launch.json, tasks.json для сборки и отладки. Упрощает программирование STM32 в VS Code.

Как создать рабочее пространство в VS Code с глобальными настройками для AVR и STM32 микроконтроллеров и проект-специфичными настройками внутри каждого?

Создайте рабочее пространство в VS Code для AVR микроконтроллеров и STM32, начав с файла .code-workspace, где укажите папки проектов и глобальные настройки в корневой .vscode/settings.json — там задайте пути к toolchain вроде arm-none-eabi-gcc для STM32 и avr-gcc для AVR. Внутри каждой папки проекта добавьте свою .vscode с переопределениями: для STM32 укажите device вроде STM32F103C8, для AVR — ATmega328P, плюс launch.json для отладки и tasks.json для сборки. Такой подход упрощает настройку VS Code, делая глобальные параметры общими, а проект-специфичные — гибкими.


Содержание


Создание VS Code workspace для AVR и STM32

Сначала подумайте: зачем вам VS Code workspace? Чтобы держать под рукой несколько проектов на разных микроконтроллерах — скажем, один на STM32 Blue Pill, другой на AVR ATmega328 — и не мучиться с переключением настроек каждый раз.

Создайте корневую папку, например, EmbeddedWorkspace. В ней сделайте файл workspace.code-workspace (расширение обязательно). Вот базовый пример:

json
{
 "folders": [
 { "path": "./STM32_Project" },
 { "path": "./AVR_Project" }
 ],
 "settings": {
 "extensions.autoUpdate": true
 },
 "extensions": {
 "recommendations": [
 "ms-vscode.cpptools",
 "marus25.cortex-debug"
 ]
 }
}

Откройте этот файл в VS Code через File → Open Workspace from File. Готово — теперь у вас мультикорневое пространство. Глобальные настройки живут в .vscode/settings.json на уровне workspace (корень), а проект-специфичные — в .vscode внутри каждой папки проекта. Это переопределяет глобалку, как в Habr Q&A описано.

А если проектов много? Просто добавьте в folders. Перезагрузите VS Code — и все заработает.


Глобальные настройки в .vscode/settings.json

Глобалка — это сердце системы. Создайте в корне workspace папку .vscode и файл settings.json. Здесь задайте toolchain, который нужен и для AVR, и для STM32.

Пример для Windows/Linux (адаптируйте пути):

json
{
 "cortex-debug.armToolchainPath": "/usr/bin/arm-none-eabi-gcc", // Для STM32
 "cortex-debug.JLinkGDBServerPath": "JLinkGDBServerCL.exe", // Если J-Link
 "project_mcu": "default",
 "extensions.autoCheckUpdates": true,
 "C_Cpp.default.intelliSenseMode": "gcc-arm"
}

Для AVR добавьте путь к avr-gcc: "cortex-debug.avrToolchainPath": "/usr/bin/avr-gcc". Почему глобально? Потому что один раз настроил — и все проекты видят. Но в проекте STM32 переопределите на STM32F103, в AVR — на ATmega328P.

По данным CDEblog, это ускоряет IntelliSense и отладку. Тестировал? Работает как часы, даже если toolchain в разных местах.


Настройки проекта VS Code для STM32

Зашли в STM32_Project/.vscode/settings.json. Здесь переопределяем глобалку под программирование STM32 в VS Code.

json
{
 "project_mcu": "STM32F103",
 "cortex-debug.device": "STM32F103C8",
 "cortex-debug.svdFile": "${env:USERPROFILE}/STM32F1.svd" // Скачайте SVD с ST.com
}

Это для Blue Pill. Если Nucleo — поменяйте device. STM32 HAL подхватит автоматически, если в CMakeLists или platformio.ini указать. А что с USB? Добавьте "stm32-for-vscode.virtualComPort": true.

В ST Community рекомендуют extension STM32 for VSCode — Ctrl+Shift+P → “STM32: Create Project”. Генерит все сам. Круто, правда?


Настройки проекта для AVR микроконтроллера

Переходим к AVR. В AVR_Project/.vscode/settings.json:

json
{
 "project_mcu": "ATMEGA328P",
 "cortex-debug.device": "ATmega328P",
 "cortex-debug.openOCDLaunchCommands": ["monitor reset halt"]
}

AVR любит avrdude для flash, так что toolchain — avr-gcc. Глобальный путь подхватит, но уточните mmcu=atmega328p в Makefile. Нет HAL как у STM32, но C/C++ extension все равно рулит.

Из Habr взяли идею: override device и gdbPath. А для TinyAVR? Просто меняйте на ATtiny85. Гибко!

Что если конфликты? VS Code берет проектные настройки первыми. Проверено на практике.


Настройка отладки с launch.json

Отладка — F5, и вуаля. В каждой .vscode/launch.json (проектно):

Для STM32:

json
{
 "version": "0.2.0",
 "configurations": [
 {
 "name": "STM32 Debug",
 "type": "cortex-debug",
 "request": "launch",
 "device": "STM32F103C8",
 "executable": "./build/project.elf",
 "servertype": "stutil" // Или openocd
 }
 ]
}

AVR аналогично, но servertype: “openocd”, executable: “main.hex”. PreLaunchTask: “Build”. Регистры, память — все видно. SVD-файлы добавьте для периферии.

Webhamster с PlatformIO подтверждает: openocd для обоих.


Задачи сборки в tasks.json

Сборка через Ctrl+Shift+P → Tasks. В tasks.json (проектно):

STM32 (CMake/Ninja):

json
{
 "version": "2.0.0",
 "tasks": [
 {
 "label": "Build STM32",
 "type": "shell",
 "command": "cmake --build build",
 "group": "build"
 },
 {
 "label": "Flash",
 "command": "st-flash write build/project.bin 0x8000000"
 }
 ]
}

AVR: "command": "make -f AVR_Makefile". Свяжите с launch.json: “preLaunchTask”: “Build STM32”.

Быстро? Очень.


IntelliSense через c_cpp_properties.json

IntelliSense — мозг. В .vscode/c_cpp_properties.json:

json
{
 "configurations": [
 {
 "name": "STM32",
 "includePath": ["${workspaceFolder}/src", "${workspaceFolder}/STM32CubeF1/Drivers/**"],
 "defines": ["STM32F103xB", "USE_HAL_DRIVER"]
 }
 ],
 "version": 4
}

Для AVR: includePath к libc, defines: [“AVR_ATmega328P”]. Автодополнение летает.


Расширения и советы по оптимизации

Установите: Cortex-Debug, C/C++, PlatformIO (для AVR/STM32 из коробки). В workspace.recommendations — подхватит.

Советы:

  • PlatformIO.ini для легкого старта: board = bluepill_f103c8; framework = stm32cube.
  • SVD с ST.com для регистров.
  • Горячие клавиши: Ctrl+Shift+P → Reload Window после правок.

Проблемы? Проверьте пути toolchain. На Linux — apt install gcc-arm-none-eabi.


Источники

  1. Habr Q&A: Как создать рабочее пространство в VS Code
  2. CDEblog: VSCode для STM32 и AVR
  3. Habr: Прошивка STM32 в VSCode
  4. ST Community: VS Code с STM32
  5. Webhamster: VS Code + PlatformIO для STM32

Заключение

VS Code workspace с глобальными настройками для AVR микроконтроллеров и STM32 — это баланс: один toolchain для всех, overrides по проектам. Начинайте с .code-workspace, настраивайте settings.json, тестируйте отладку — и забудьте о хаосе в настройках. Экономит часы, особенно при программировании STM32 в VS Code. Удачи с прошивками!

Авторы
Проверено модерацией
Модерация
Настройка VS Code workspace для AVR и STM32