stm32-vscode-cmake-scaffold

star 0

Создает базовую структуру окружения VS Code, CMake и GCC+Ninja для STM32 проектов, сгенерированных в CubeMX (Makefile). Поддерживает серии F0, F1, F4, F7. Настраивает отладку (OpenOCD, JLink, PyOCD, ST-Link, QEMU) и автоматически ищет локальный ARM GCC тулчейн.

ViacheslavMezentsev By ViacheslavMezentsev schedule Updated 2/24/2026

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 пользователя:

  1. c_cpp_properties.json — скопируй содержимое из assets/c_cpp_properties.json без изменений.
  2. extensions.json — скопируй содержимое из assets/extensions.json без изменений.
  3. launch.json — скопируй содержимое из assets/launch.json без изменений.
  4. tasks.json — скопируй содержимое из assets/tasks.json без изменений.
  5. 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

  1. Создай папку cmake в корне проекта.
  2. Скопируй файл assets/gcc-arm-none-eabi.cmake в cmake/gcc-arm-none-eabi.cmake.
  3. Создай файл 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. Завершение и инструкции для пользователя

Когда всё готово, выведи отчет и обязательно проинструктируй пользователя выполнить следующие действия:

  1. Перезагрузить окно VS Code, чтобы плагин CMake Tools подхватил новые конфигурации. (Команда: Ctrl+Shift+P -> Developer: Reload Window).
  2. После перезагрузки выбрать тулчейн (Kit) компилятора из выпадающего списка в статус-баре или через команду CMake: Select a Kit (указать GCC ARM).
  3. Выбрать тип конфигурации (Debug или Release) через CMake: Select Variant.
  4. Проверить пути к нужным отладочным серверам (OpenOCD, J-Link и т.д.) в файле .vscode/settings.json, так как ИИ настроил только пути к тулчейну и GDB.
Install via CLI
npx skills add https://github.com/ViacheslavMezentsev/demo-stm32-skills --skill stm32-vscode-cmake-scaffold
Repository Details
star Stars 0
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator
ViacheslavMezentsev
ViacheslavMezentsev Explore all skills →