name: stm32-vscode-cmake-scaffold description: Создает базовую структуру окружения VS Code, CMake и GCC+Ninja для STM32 проектов, сгенерированных в CubeMX (Makefile). Поддерживает серии F0, F1, F4, F7. Настраивает отладку (OpenOCD, JLink, PyOCD, ST-Link, QEMU) и автоматически ищет локальный ARM GCC тулчейн.
Генерация окружения STM32 для VS Code & CMake
Этот навык настраивает современную среду разработки C/C++ для микроконтроллеров STM32 с использованием VS Code, CMake, кросс-компилятора GCC ARM и системы сборки Ninja. Навык исходит из предположения, что пользователь уже сгенерировал файлы проекта с помощью STM32CubeMX, выбрав Toolchain/IDE = "Makefile" (исходники аккуратно разложены по папкам Core/ и Drivers/).
Пошаговая инструкция для ИИ-ассистента
Когда пользователь просит инициализировать, настроить или создать окружение для STM32, выполни следующие шаги:
1. Анализ файла .ioc
Найди в корне рабочего пространства (workspace) файл конфигурации .ioc (STM32CubeMX). Прочитай его, чтобы извлечь следующие данные:
- Полное название МК (MCU Line/Name): например,
STM32F411CEUx - Семейство МК (MCU Family): например,
STM32F4 - Макрос компилятора (Compiler define): например,
STM32F411xE(обычно образуется из названия МК путем замены последних букв корпуса наxxилиxE).
2. Настройка окружения .vscode и поиск тулчейна
Создай директорию .vscode в корне проекта.
Прочитай шаблоны конфигураций из папки assets/ данного навыка и создай следующие файлы в директории .vscode пользователя:
c_cpp_properties.json— скопируй содержимое изassets/c_cpp_properties.jsonбез изменений.extensions.json— скопируй содержимое изassets/extensions.jsonбез изменений.launch.json— скопируй содержимое изassets/launch.jsonбез изменений.tasks.json— скопируй содержимое изassets/tasks.jsonбез изменений.settings.json— прочитайassets/settings.json, но ИЗМЕНИ следующие поля:- Данные микроконтроллера:
"device": Установи точное имя микроконтроллера без суффикса корпуса (например,"STM32F411CE")."svdFile": Установи путь к SVD файлу${workspaceRoot}/<ИМЯ_МК>.svd(например,${workspaceRoot}/STM32F411.svd)."targetFamily": Установи семейство для OpenOCD в нижнем регистре с суффиксом 'x' (например,"stm32f4x","stm32f1x","stm32f0x","stm32f7x").
- Поиск тулчейна ARM GCC:
- Выполни поиск компилятора
arm-none-eabi-gccв системе хоста. - Проверь переменную окружения
PATH. - Проверь домашнюю директорию пользователя (
~на Linux/macOS или%USERPROFILE%на Windows). Ищи папки, соответствующие маскеxpack-arm-none-eabi-gcc-*(где * — версия, например14.2.1-1.1). - Если тулчейн найден, установи в поле
"toolchain"путь к его корневой директории (без/bin).
- Выполни поиск компилятора
- Настройка отладчика (cortex-debug):
- Определи операционную систему пользователя (Windows или Linux/macOS).
- Обнови поле
"cortex-debug.gdbPath.windows"(или аналогичное для linux/mac), установив путь к GDB:${config:toolchain}/bin/arm-none-eabi-gdb.exe(на Linux без.exe).
- Данные микроконтроллера:
3. Загрузка SVD файла
Сформируй URL для скачивания из репозитория modm-io по следующему шаблону:
https://raw.githubusercontent.com/modm-io/cmsis-svd-stm32/main/stm32[СЕМЕЙСТВО_МК_В_НИЖНЕМ_РЕГИСТРЕ]/[ИМЯ_МК_БЕЗ_КОРПУСА].svd
(Пример: https://raw.githubusercontent.com/modm-io/cmsis-svd-stm32/main/stm32f4/STM32F411.svd)
Используй терминал (curl или wget), чтобы скачать этот файл прямо в корень проекта.
4. Настройка системы сборки CMake
- Создай папку
cmakeв корне проекта. - Скопируй файл
assets/gcc-arm-none-eabi.cmakeвcmake/gcc-arm-none-eabi.cmake. - Создай файл
CMakeLists.txtв корне проекта. Используйassets/CMakeLists.template.txtкак образец, но сгенерируй его динамически:- Просканируй папки
Core/иDrivers/, чтобы собрать полные списки всех.cи.sфайлов. - Найди сгенерированный CubeMX скрипт компоновщика (
.ldфайл) в корне проекта и укажи его в переменнойLINKER_FILE. - Укажи правильный макрос (define) серии МК в
target_compile_definitions. - Убедись, что все пути к папкам
Inc/(заголовочные файлы) указаны вtarget_include_directories. - ВНИМАНИЕ (Архитектурные флаги): Примени правильные архитектурные флаги на основе семейства МК (смотри шпаргалку ниже). Эти флаги ОБЯЗАТЕЛЬНО должны быть добавлены как в
target_compile_options, так и вtarget_link_options. Если их не добавить линкеру, сборка упадет с ошибкой "uses VFP register arguments".
- Просканируй папки
Шпаргалка: Флаги архитектуры для CMakeLists.txt (вставить в обе секции!)
- Серия F0 (Cortex-M0):
-mcpu=cortex-m0 -mthumb -mfloat-abi=soft - Серия F1 (Cortex-M3):
-mcpu=cortex-m3 -mthumb -mfloat-abi=soft - Серия F4 (Cortex-M4):
-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 - Серия F7 (Cortex-M7):
-mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-d16(илиfpv5-sp-d16).
5. Завершение и инструкции для пользователя
Когда всё готово, выведи отчет и обязательно проинструктируй пользователя выполнить следующие действия:
- Перезагрузить окно VS Code, чтобы плагин CMake Tools подхватил новые конфигурации. (Команда:
Ctrl+Shift+P->Developer: Reload Window). - После перезагрузки выбрать тулчейн (Kit) компилятора из выпадающего списка в статус-баре или через команду
CMake: Select a Kit(указать GCC ARM). - Выбрать тип конфигурации (Debug или Release) через
CMake: Select Variant. - Проверить пути к нужным отладочным серверам (OpenOCD, J-Link и т.д.) в файле
.vscode/settings.json, так как ИИ настроил только пути к тулчейну и GDB.