Как создать рабочее пространство в VS Code с глобальными настройками для AVR и STM32 микроконтроллеров и проект-специфичными настройками внутри каждого?
Настройка рабочего пространства в VS Code для AVR и STM32 микроконтроллеров требует создания иерархической структуры конфигурационных файлов, где глобальные настройки определяют общие параметры, а проект-специфические настройки переопределяют их для конкретных проектов.
Содержание
- Понимание структуры рабочих пространств VS Code
- Создание глобальных настроек для AVR и STM32
- Настройка проект-специфических конфигураций
- Интеграция с расширениями для микроконтроллеров
- Примеры конфигурационных файлов
- Управление несколькими проектами
- Оптимизация рабочего процесса
Понимание структуры рабочих пространств VS Code
VS Code использует гибкую систему конфигурации, которая позволяет разделять глобальные и локальные настройки. Для разработки микроконтроллеров AVR и STM32 эта структура становится особенно важной.
Рабочее пространство в VS Code может состоять из нескольких уровней:
- Глобальные настройки (
settings.json) - применяются ко всем проектам - Настройки рабочей области (
workspace.json) - применяются ко всем проектам в текущей папке - Настройки конкретного проекта (
.vscode/settings.json) - применяются только к этому проекту
Для AVR и STM32 разработки рекомендуется создать следующую структуру:
~/.vscode/
├── settings.json (глобальные настройки)
MyProjects/
├── .vscode/
│ ├── settings.json (настройки для всех проектов в папке)
│ └── extensions.json
├── AVR_Projects/
│ ├── Project1/
│ │ ├── .vscode/settings.json
│ │ └── ...
│ └── Project2/
│ ├── .vscode/settings.json
│ └── ...
└── STM32_Projects/
├── ProjectA/
│ ├── .vscode/settings.json
│ └── ...
└── ProjectB/
├── .vscode/settings.json
└── ...
Создание глобальных настроек для AVR и STM32
Глобальные настройки определяют общие параметры, которые будут использоваться во всех проектах микроконтроллерной разработки.
Базовая конфигурация глобальных настроек
Создайте файл ~/.vscode/settings.json со следующим содержимым:
{
"files.associations": {
"*.c": "c",
"*.h": "c",
"*.cpp": "cpp",
"*.hpp": "cpp",
"*.s": "arm",
"*.S": "arm",
"*.asm": "arm"
},
"C_Cpp.default.configurationProvider": "ms-vscode.cpptools",
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.defaultProfile.osx": "bash",
"terminal.integrated.defaultProfile.windows": "PowerShell",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"cSpell.words": [
"STM32",
"HAL",
"LL",
"LLD",
"CMSIS",
"UART",
"GPIO",
"I2C",
"SPI",
"ADC",
"DMA",
"NVIC",
"SysTick",
"USART",
"TIM",
"RCC",
"PWR",
"FLASH",
"SRAM",
"CRC",
"IWDG",
"WWDG"
],
"git.ignoreLimitWarning": true,
"search.exclude": {
"**/build": true,
"**/obj": true,
"**/.git": true,
"**/node_modules": true,
"**/Debug": true,
"**/Release": true,
"**/dist": true
},
"files.exclude": {
"**/build": true,
"**/obj": true,
"**/.git": true,
"**/node_modules": true,
"**/Debug": true,
"**/Release": true,
"**/dist": true,
"**/.vscode/settings.json": true
}
}
Специфичные настройки для разработки микроконтроллеров
Добавьте в глобальные настройки параметры, специфичные для AVR и STM32:
{
"avr-tools.path": "/usr/bin/avr-gcc",
"avr-tools.makePath": "/usr/bin/make",
"stm32cube.ide.path": "/opt/STM32CubeIDE",
"stm32cube.ide.toolchain.path": "/opt/st/STM32CubeIDE_1.15.0/STM32CubeIDE",
"platformio-ide-terminal.integrated.env.windows": {
"PATH": "${env:PATH};C:\\Program Files (x86)\\Atmel Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin"
},
"platformio-ide-terminal.integrated.env.linux": {
"PATH": "${env:PATH}:/usr/bin/avr-gcc:/opt/STM32CubeIDE_1.15.0/STM32CubeIDE/plugins/ctools/arm-none-eabi-gcc/bin"
}
}
Настройка проект-специфических конфигураций
Для каждого проекта AVR или STM32 создайте отдельную конфигурацию в папке .vscode.
Пример настройки для AVR проекта
В корне AVR проекта создайте папку .vscode с файлом settings.json:
{
"cmake.configureOnOpen": true,
"cmake.generator": "Unix Makefiles",
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "Build AVR Project",
"type": "shell",
"command": "make",
"args": [
"all"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": "$gcc"
},
{
"label": "Clean AVR Project",
"type": "shell",
"command": "make",
"args": [
"clean"
],
"group": "build"
},
{
"label": "Flash AVR",
"type": "shell",
"command": "avrdude",
"args": [
"-p",
"${input:mcu}",
"-c",
"${input:programmer}",
"-U",
"flash:w:build/main.hex:i",
"-P",
"${input:port}",
"-b",
"${input:baudrate}"
],
"group": "build",
"problemMatcher": []
}
]
},
"inputs": [
{
"id": "mcu",
"type": "pickString",
"description": "Выберите микроконтроллер",
"options": [
"atmega328p",
"atmega2560",
"atmega168",
"atmega88"
],
"default": "atmega328p"
},
{
"id": "programmer",
"type": "pickString",
"description": "Выбмите программатор",
"options": [
"arduino",
"usbasp",
"avrisp",
"stk500"
],
"default": "arduino"
},
{
"id": "port",
"type": "promptString",
"description": "Порт подключения",
"default": "/dev/ttyUSB0"
},
{
"id": "baudrate",
"type": "pickString",
"description": "Скорость порта",
"options": [
"19200",
"38400",
"57600",
"115200"
],
"default": "115200"
}
]
}
Пример настройки для STM32 проекта
Для STM32 проекта настройка будет более сложной из-за необходимости работы с STM32CubeIDE:
{
"cmake.configureOnOpen": true,
"cmake.generator": "Unix Makefiles",
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "Generate STM32 Project",
"type": "shell",
"command": "${workspaceFolder}/scripts/generate_project.sh",
"args": [
"${input:mcu}",
"${input:core}"
],
"group": "build",
"problemMatcher": []
},
{
"label": "Build STM32 Project",
"type": "shell",
"command": "make",
"args": [
"-j4"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": "$gcc"
},
{
"label": "Flash STM32",
"type": "shell",
"command": "${workspaceFolder}/scripts/flash.sh",
"args": [
"${input:interface}",
"${input:port}"
],
"group": "build",
"problemMatcher": []
}
]
},
"inputs": [
{
"id": "mcu",
"type": "pickString",
"description": "Выберите микроконтроллер STM32",
"options": [
"STM32F103C8T6",
"STM32F103ZET6",
"STM32F407VGT6",
"STM32F411CEU6",
"STM32L476RG"
],
"default": "STM32F103C8T6"
},
{
"id": "core",
"type": "pickString",
"description": "Выберите ядро процессора",
"options": [
"M0",
"M3",
"M4",
"M7"
],
"default": "M3"
},
{
"id": "interface",
"type": "pickString",
"description": "Интерфейс программирования",
"options": [
"stlink",
"jlink",
"serial"
],
"default": "stlink"
},
{
"id": "port",
"type": "promptString",
"description": "Порт программатора",
"default": "/dev/ttyACM0"
}
]
}
Интеграция с расширениями для микроконтроллеров
Необходимые расширения
Для эффективной работы с AVR и STM32 в VS Code установите следующие расширения:
- C/C++ (Microsoft) - расширение для разработки на C/C++
- PlatformIO IDE - для управления проектами микроконтроллеров
- STM32 for VS Code - специализированное расширение для STM32
- Arduino - для Arduino-совместимых проектов
- Makefile Tools - для работы с Makefile
- CMake Tools - для управления CMake проектами
Конфигурация расширений
Создайте файл ~/.vscode/extensions.json для управления расширениями:
{
"recommendations": [
"ms-vscode.cpptools",
"platformio.platformio-ide",
"stm32-for-vscode.stm32-for-vscode",
"vsciot-vscode.vscode-arduino",
"ms-vscode.makefile-tools",
"ms-vscode.cmake-tools",
"streetsidesoftware.code-spell-checker",
"ms-python.python",
"ms-vscode.vscode-json"
]
}
Для автоматической установки расширений используйте файл extensions.json в корне рабочего пространства:
{
"recommendations": [
"ms-vscode.cpptools",
"platformio.platformio-ide",
"stm32-for-vs-code.stm32-for-vscode"
]
}
Примеры конфигурационных файлов
Флаги компиляции для AVR
Создайте файл .vscode/c_cpp_properties.json для настройки компилятора:
{
"configurations": [
{
"name": "AVR",
"includePath": [
"${workspaceFolder}/**",
"/usr/lib/avr/include",
"${workspaceFolder}/lib",
"${workspaceFolder}/src"
],
"defines": [
"F_CPU=16000000UL",
"AVR_ATmega328P",
"__AVR_ATmega328P__"
],
"compilerPath": "/usr/bin/avr-gcc",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
Флаги компиляции для STM32
{
"configurations": [
{
"name": "STM32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/Drivers/CMSIS/Include",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Core/Inc"
],
"defines": [
"USE_HAL_DRIVER",
"STM32F103xx",
"DEBUG"
],
"compilerPath": "/opt/st/STM32CubeIDE_1.15.0/STM32CubeIDE/plugins/ctools/arm-none-eabi-gcc/bin/arm-none-eabi-gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-arm"
}
],
"version": 4
}
Управление несколькими проектами
Для эффективного управления несколькими проектами используйте workspace-файлы.
Создание workspace файла
Создайте файл microcontroller.code-workspace:
{
"folders": [
{
"path": "./AVR_Projects"
},
{
"path": "./STM32_Projects"
},
{
"path": "./Shared_Libraries"
}
],
"settings": {
"cmake.configureOnOpen": true,
"files.associations": {
"*.c": "c",
"*.h": "c"
}
},
"extensions": {
"recommendations": [
"ms-vscode.cpptools",
"platformio.platformio-ide",
"stm32-for-vscode.stm32-for-vscode"
]
}
}
Иерархическая система настроек
Реализуйте систему наследования настроек:
- Глобальные настройки (
~/.vscode/settings.json) - базовые параметры - Настройки рабочего пространства - общие параметры для всех проектов в папке
- Настройки конкретного проекта - уникальные параметры для каждого проекта
Пример структуры наследования:
~/.vscode/settings.json (глобальные)
├── MyProjects/.vscode/settings.json (общие для всех проектов)
├── AVR_Projects/Project1/.vscode/settings.json
├── AVR_Projects/Project2/.vscode/settings.json
├── STM32_Projects/ProjectA/.vscode/settings.json
└── STM32_Projects/ProjectB/.vscode/settings.json
Оптимизация рабочего процесса
Автоматизация сборки и прошивки
Создайте скрипты для автоматизации рутинных операций:
Сборка AVR проекта:
#!/bin/bash
# scripts/build_avr.sh
MCU=${1:-atmega328p}
F_CPU=${2:-16000000}
make MCU=$MCU F_CPU=$F_CPU clean
make MCU=$MCU F_CPU=$F_CPU all
Прошивка STM32:
#!/bin/bash
# scripts/flash_stm32.sh
INTERFACE=${1:-stlink}
PORT=${2:-/dev/ttyACM0}
if [ "$INTERFACE" = "stlink" ]; then
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program build/main.elf verify reset exit"
elif [ "$INTERFACE" = "jlink" ]; then
JLinkExe -if SWD -device STM32F103C8 -autoconnect 1 -speed 4000 -CommanderScript flash.jlink
fi
Интеграция с системой контроля версий
Настройте .gitignore для проектов микроконтроллеров:
# AVR проекты
*.hex
*.elf
*.o
*.d
build/
obj/
# STM32 проекты
*.elf
*.bin
*.hex
*.map
*.d
Debug/
Release/
build/
# Сгенерированные файлы
*.dep
*.i
*.s
# IDE файлы
.project
.cproject
.settings/
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
Профили разработки
Создайте профили для разных сценариев разработки:
Профиль отладки:
{
"configurations": [
{
"name": "AVR Debug",
"includePath": [
"${workspaceFolder}/**",
"/usr/lib/avr/include"
],
"defines": [
"F_CPU=16000000UL",
"DEBUG",
"AVR_ATmega328P"
],
"compilerPath": "/usr/bin/avr-gcc",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "linux-gcc-x64"
}
]
}
Профиль релиза:
{
"configurations": [
{
"name": "STM32 Release",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/Drivers/CMSIS/Include"
],
"defines": [
"NDEBUG",
"USE_HAL_DRIVER",
"STM32F103xx"
],
"compilerPath": "/opt/st/STM32CubeIDE_1.15.0/STM32CubeIDE/plugins/ctools/arm-none-eabi-gcc/bin/arm-none-eabi-gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-arm"
}
]
}
Источники
- Официальная документация VS Code - Рабочие пространства и папки
- Руководство по настройке C/C++ расширения
- Документация PlatformIO IDE
- STM32 для VS Code - официальное расширение
- Настройка Makefile в VS Code
Заключение
- Создайте иерархическую структуру настроек с глобальными и проект-специфическими конфигурациями
- Используйте workspace-файлы для управления несколькими проектами одновременно
- Настройте специализированные расширения для AVR и STM32 разработки
- Реализуйте автоматизацию для сборки и прошивки микроконтроллеров
- Используйте систему наследования настроек для переиспобщения общих параметров
- Создайте профили разработки для разных сценариев (отладка, релиз, тестирование)
- Интегрируйте систему контроля версий с правильным игнорированием сгенерированных файлов
Эта конфигурация позволит вам эффективно работать с проектами AVR и STM32, сохраняя при этом гибкость и переиспользование общих настроек.