Настройка 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
- Глобальные настройки в .vscode/settings.json
- Настройки проекта VS Code для STM32
- Настройки проекта для AVR микроконтроллера
- Настройка отладки с launch.json
- Задачи сборки в tasks.json
- IntelliSense через c_cpp_properties.json
- Расширения и советы по оптимизации
- Источники
- Заключение
Создание VS Code workspace для AVR и STM32
Сначала подумайте: зачем вам VS Code workspace? Чтобы держать под рукой несколько проектов на разных микроконтроллерах — скажем, один на STM32 Blue Pill, другой на AVR ATmega328 — и не мучиться с переключением настроек каждый раз.
Создайте корневую папку, например, EmbeddedWorkspace. В ней сделайте файл workspace.code-workspace (расширение обязательно). Вот базовый пример:
{
"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 (адаптируйте пути):
{
"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.
{
"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:
{
"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:
{
"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):
{
"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:
{
"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.
Источники
- Habr Q&A: Как создать рабочее пространство в VS Code
- CDEblog: VSCode для STM32 и AVR
- Habr: Прошивка STM32 в VSCode
- ST Community: VS Code с STM32
- Webhamster: VS Code + PlatformIO для STM32
Заключение
VS Code workspace с глобальными настройками для AVR микроконтроллеров и STM32 — это баланс: один toolchain для всех, overrides по проектам. Начинайте с .code-workspace, настраивайте settings.json, тестируйте отладку — и забудьте о хаосе в настройках. Экономит часы, особенно при программировании STM32 в VS Code. Удачи с прошивками!