В этом руководстве объясняются шаги по эффективной разработке и отладке приложения STM32 в Visual Studio Code с использованием генератора сборки CMake , инструмента сборки Ninja и компилятора GCC .
Вещи, которые вы узнаете
Как установить и настроить все инструменты
Как создать новый проект STM32 с помощью инструментов STM32CubeMX или STM32CubeIDE.
Как установить и настроить рекомендуемые расширения для Visual Studio Code для упрощения разработки.
Как настроить списки CMake и предустановки CMake
Как создать систему сборки для компилятора
Как скомпилировать проект с помощью GCC
Как прошить и отладить приложение для цели STM32
В этом руководстве используется операционная система Windows . Аналогичная процедура будет применяться для операционных систем Linux и MAC.
Учебное пособие по установке инструментов поможет вам понять, какие инструменты необходимы для работы с STM32, и, как правило, полезно для новичков, чтобы освоиться и правильно понять необходимые требования.
С некоторого времени у ST появился новый программный инструмент STM32CubeCLT, который включает в себя инструменты сборки, необходимые для vscode, включая систему сборки Ninja и генератор сборки CMake . STM32CubeCLT (инструменты командной строки) — это простой и легкий способ быстро освоить разработку vscode. Он также автоматически настроит переменные среды сборки ( Path в случае Windows), что позволит вам вызывать ninja , cmake или другие команды непосредственно из инструмента командной строки.
Установив STM32CubeCLT , вы не получите ни графический инструмент STM32CubeIDE , ни какие-либо возможности инструмента настройки MCU, а только инструменты командной строки для вызова сборки и отладки, обычно из vscode . Вам все равно придется отдельно установить vscode и необходимые расширения.
Первым шагом является установка STM32CubeIDE, которая будет использоваться для легкого запуска нового проекта STM32 и поставляется со встроенным инструментом STM32CubeMX , позволяющим нам осуществлять графическую настройку.
STM32CubeIDE также предоставляет необходимые инструменты, которые понадобятся позже для разработки VSCode.
ARM нет eabi GCC-компилятор
ST-LINK GDBServer для отладки
Инструмент STM32CubeProgrammer для загрузки кода и соответствующих драйверов ST-Link.
Папка с SVD-файлами STM32
Драйвера для ST-Link
Настройка экологического пути
К настройкам среды из установки STM32CubeIDE следует добавить 3 пути, по одному пути для каждого из вышеупомянутых инструментов. В случае моего компьютера, использующего STM32CubeIDE 1.8 (обновленного через eclipse, поэтому мой фактический путь установки все еще показывает версию 1.0.2 ), пути определяются как:
Компилятор GCC: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsbin
Сервер ST-Link GDB: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_2.0.100.202109301221toolsbin
Интерфейс командной строки STM32Cube Programmer: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.100.202110141430toolsbin
Ваши пути могут отличаться в номерах версий.
Проверьте правильность настройки пути, запустите:
arm-none-eabi-gcc --version STM32_Programmer_CLI --version ST-LINK_gdbserver --version
Это должно дать результат, аналогичный изображенному ниже.
Этот шаг не обязателен, если вы установили инструменты сборки с STM32CubeCLT.
Загрузите и установите CMake.
Мастер установки попросит вас добавить CMake в пути среды. Выберите этот параметр или добавьте папку bin папки установки CMake в путь к среде.
Этот шаг не обязателен, если вы установили инструменты сборки с STM32CubeCLT.
Загрузите систему сборки Ninja со страницы выпусков Github. Он поставляется в виде переносимого исполняемого файла, без необходимости ничего устанавливать. Однако он должен быть виден на уровне среды, как и все предыдущие инструменты.
Проверьте установку CMake и Ninja , запустите:
cmake --version ninja --version
Вывод должен быть чем-то похожим на
Загрузите и установите VSCode. После установки и открытия окно будет выглядеть так, как показано ниже.
Visual Studio Code — это легкий текстовый редактор с возможностью его расширения с помощью расширений.
Список полезных расширений для разработки STM32 с использованием CMake:
ms-vscode.cpptools : подсветка синтаксиса и другие основные функции для разработки на C/C++.
ms-vscode.cmake-tools : основные инструменты CMake, инструмент генератора системы сборки.
twxs.cmake : выделение цвета CMake.
marus25.cortex-debug : расширение отладки Cortex-M, обязательное для отладки STM32 из VSCode.
dan-c-underwood.arm : подсветка синтаксиса сборки ARM.
zixuanwang.linkerscript : подсветка синтаксиса сценария GCC Linker.
Вы можете установить их, скопировав приведенные ниже команды во внутреннем окне терминала VSCode.
code --install-extension ms-vscode.cpptools code --install-extension ms-vscode.cmake-tools code --install-extension twxs.cmake code --install-extension marus25.cortex-debug code --install-extension dan-c-underwood.arm code --install-extension zixuanwang.linkerscript
Перейдите в Терминал -> Новый терминал , чтобы открыть новое окно терминала.
Альтернативный способ — использовать графический интерфейс поиска расширений и установить их вручную.
На этом этапе все инструменты установлены правильно – вы на правильном пути к успеху.
Фундаментальным требованием для продвижения вперед является наличие работающего проекта, который будет конвертирован в CMake и разработан в VSCode . Для этой цели я проведу вас через простое создание нового проекта с использованием программных инструментов STM32CubeMX или STM32CubeIDE .
Вы можете пропустить эту часть, если у вас уже есть проект, над которым нужно работать.
Для этой демонстрации я использовал инструмент STM32CubeIDE и плату STM32H735G-DK.
Откройте STM32CubeIDE и начните новый проект.
Выберите микроконтроллер STM32 — я выбрал STM32H735IG , который используется на плате STM32H735G-DK.
Выберите имя и путь проекта, затем создайте проект и дождитесь открытия представления распиновки .
Наша задача — создать простой проект, который будет переключать светодиоды. Светодиоды подключены к PC2 и PC3 соответственно, активный НИЗКИЙ уровень. Выводы могут быть настроены в двухтактном или открытом стоковом режиме.
Установите контакты как выходы с дополнительными метками LED1 и LED2 соответственно.
Если вы используете STM32CubeMX , перейдите в Диспетчер проектов , установите имя проекта и убедитесь, что STM32CubeIDE выбран в качестве Toolchain .
Перейдите в дополнительные настройки и выберите LL в качестве драйверов для сгенерированного кода.
В этом уроке мы используем драйверы LL для простоты.
Повторно сгенерируйте проект, нажав красную кнопку или сохранив проект с помощью сочетания клавиш CTRL + S
Проект теперь (пере)генерирован. Файлы, выделенные желтым цветом, являются источниками для сборки. Синий — скрипт компоновщика.
Вот и все, первый запуск, мы готовы к компиляции. Нажмите CTRL + B или щелкните значок молотка , чтобы начать. STM32CubeIDE скомпилирует проект, вы должны увидеть то же самое, что на рисунке ниже. Теперь все готово для прошивки микроконтроллера и начала отладки.
Это конец первой части, в которой мы успешно создали наш проект. На данный момент мы считаем, что проект готов к переносу в систему сборки на основе CMake.
В будущем вы сможете продолжить разработку с помощью STM32CubeIDE, добавлять новые исходные коды, изменять код, компилировать, прошивать двоичный файл и отлаживать непосредственно микроконтроллер. Это предпочтительная студия разработки STM32, разработанная и поддерживаемая STMicroelectronics.
Ожидается, что проект для разработки в VSCode уже создан. Мы продолжим работу над компилятором GCC, но можно использовать и другие.
С выпуском Visual Studio Code многие разработчики используют этот инструмент для многих языков программирования и, к счастью, также могут разрабатывать приложения STM32 с помощью одного инструмента. Если вы один из разработчиков, которым нравится VSCode, самый элегантный способ двигаться вперед — перенести проект на основе STM32CubeIDE в CMake , разработать код в VSCode и скомпилировать его с помощью системы сборки Ninja с использованием компилятора GCC. Он быстрый и легкий.
Разработка в VSCode предназначена для пользователей среднего или опытного уровня. Я предлагаю всем новичкам STM32 продолжать использовать набор инструментов разработки STM32CubeIDE . Будет очень легко двигаться дальше и перейти к теме VSCode позже.
Каждому приложению на основе CMake требуется файл CMakeLists.txt в корневом каталоге , который описывает проект и предоставляет входную информацию для создания системы сборки.
Корневой файл
CMakeLists.txtиногда называют файлом CMake верхнего уровня.
Важные вещи, описанные в файле CMakeLists.txt :
Информация о наборе инструментов, такая как конфигурация GCC с флагами сборки.
Название проекта
Исходные файлы для сборки с помощью компилятора, файлов C, C++ или ассемблера.
Список включаемых путей для компилятора для поиска функций, определяет, ... ( -I )
Путь к сценарию компоновщика
Определяет компиляция или иногда называется определением препроцессора ( -D ).
Cortex-Mxx и настройки с плавающей запятой для генерации набора команд
Код Visual Studio установлен и будет использоваться в качестве дальнейшего редактора файлов.
Найдите сгенерированный путь к проекту и откройте папку с помощью VSCode:
Вариант 1. Перейдите в папку с проводником, затем щелкните правой кнопкой мыши и выберите Open in Code .
Вариант 2. Альтернативно откройте VScode как новое пустое решение и добавьте к нему папку вручную. Используйте File -> Open Folder... чтобы открыть папку.
Вариант 3. Перейдите в папку с помощью инструмента cmd или powershell и запустите code .
Конечный результат должен выглядеть примерно так, как показано ниже.
CMake должен знать об Toolchain, который мы хотели бы использовать для окончательной компиляции проекта. Поскольку одна и та же цепочка инструментов обычно повторно используется в разных проектах, рекомендуется создать эту часть в отдельном файле для облегчения повторного использования. Это общие настройки компилятора, которые не связаны напрямую с самими проектами.
Простой файл .cmake можно использовать, а затем повторно использовать в различных проектах. Для этого урока я использую имя cmake/gcc-arm-none-eabi.cmake , и ниже приведен его пример:
set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_PROCESSOR Arm)# Некоторые настройки GCC по умолчанию# Arm-none-eabi- должны быть частью пути -specs=nano.specs -Wl,--gc-sections")set(CPP_FLAGS "-fno-rtti -fno-Exceptions -fno-threadsafe-statics")# Определить настройки компилятораset(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc ${FLAGS})set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ ${FLAGS} ${CPP_FLAGS})set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size)set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) Создайте файл в папке cmake/ корневого каталога проекта.
Если установлен плагин подсветки CMake, VSCode будет красиво выделять для вас команды CMake.
Настройка Toolchain завершена. Вы можете свободно закрыть файл и перейти к следующему шагу.
Нам нужно создать основной файл CMakeLists.txt , также называемый корневым файлом CMake.
Убедитесь, что вы действительно назвали его
CMakeLists.txt, используя правильные символы верхнего и нижнего регистра.
Я подготовил для вас простой файл шаблона, который в будущем можно будет повторно использовать во всех ваших проектах. Вам просто нужно будет изменить такие вещи, как имя проекта, исходные файлы, пути включения и т. д.
cmake_minimum_required(VERSION 3.22)# Настройка параметров компилятораset(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("Тип сборки: " ${CMAKE_BUILD_TYPE})## Основные настройки проекта#project(имя-вашего-проекта)enable_language(C CXX ASM)## Core Флаги MCU, ЦП, набор команд и настройка FPU# Необходимо установите правильно для вашего MCU#set(CPU_PARAMETERS
-mthumb# Это требует внимания, чтобы правильно настроить используемый MCU-mcpu=cortex-m7.
-mfpu=fpv5-d16
-mfloat-abi=жесткий
)# Установить набор сценариев компоновщика(linker_script_SRC ${PROJ_PATH}/path-to-linker-script.ld)set(EXECUTABLE ${CMAKE_PROJECT_NAME})## Список исходных файлов для компиляции#set(sources_SRCS# Поместите сюда исходные файлы, один в каждой строке относительно местоположения файла CMakeLists.txt)## Включить каталоги#set(include_path_DIRS# Поместите сюда ваши каталоги включения, по одному в каждой строке, относительно местоположения файла CMakeLists.txt)## Определение символов#set(symbols_SYMB# Поместите сюда свои символы (определяет препроцессор), по одному в каждой строке# Инкапсулируйте их в двойные кавычки в целях безопасности)# Исполняемые файлыadd_executable(${EXECUTABLE} ${sources_SRCS})# Include pathstarget_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})# Projectsymbolstarget_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})# optiontarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-Вестра
-Педантический
-Wno-unused-parameter# Полная конфигурация отладки-Og -g3 -ggdb
)# Optionstarget_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # Поддержка форматирования чисел с плавающей точкой STDIO-Wl,--start-group
-lc
-лм
-lstdС++
-lsupc++
-Wl,--конечная группа
-Wl,-печать-использование памяти
)# Выполните пост-сборку для печати sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# Преобразование вывода в шестнадцатеричный и двоичныйadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# Преобразовать в файл bin -> добавить условную проверку?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O двоичный файл $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)Исходные файлы такие же, как в проекте STM32CubeIDE . Вы можете проверить предыдущее изображение с источниками, выделенными желтым цветом.
Символы и пути включения можно найти в STM32CubeIDE в настройках проекта. 2 картинках ниже показано, как обстоят дела в случае с демо-проектом.
Настройка Cortex-Mxx требует особого внимания, особенно при настройке с плавающей запятой. Для STM32H735xx настройки должны быть установлены, как показано ниже.
установить (CPU_PARAMETERS
-мпалец
-mcpu=cortex-m7 # Установить Cortex-M CPU-mfpu=fpv5-d16 # Установить тип с плавающей запятой-mfloat-abi=hard # Режим аппаратного ABI)Общие правила настроек приведены в таблице ниже.
| Семейство STM32 | -MCPU | -мфпу | -mfloat-аби |
|---|---|---|---|
| СТМ32Ф0 | cortex-m0 | Not used | soft |
| СТМ32Ф1 | cortex-m3 | Not used | soft |
| СТМ32Ф2 | cortex-m3 | Not used | soft |
| СТМ32Ф3 | cortex-m4 | fpv4-sp-d16 | hard |
| СТМ32Ф4 | cortex-m4 | fpv4-sp-d16 | hard |
| СТМ32Ф7 СП | cortex-m7 | fpv5-sp-d16 | hard |
| СТМ32Ф7 ДП | cortex-m7 | fpv5-d16 | hard |
| СТМ32Г0 | cortex-m0plus | Not used | soft |
| СТМ32C0 | cortex-m0plus | Not used | soft |
| СТМ32Г4 | cortex-m4 | fpv4-sp-d16 | hard |
| СТМ32H5 | cortex-m33 | fpv5-sp-d16 | hard |
| СТМ32H7 | cortex-m7 | fpv5-d16 | hard |
| СТМ32L0 | cortex-m0plus | Not used | soft |
| СТМ32L1 | cortex-m3 | Not used | soft |
| СТМ32L4 | cortex-m4 | fpv4-sp-d16 | hard |
| СТМ32L5 | cortex-m33 | fpv5-sp-d16 | hard |
| СТМ32U0 | cortex-m0plus | Not used | soft |
| СТМ32У5 | cortex-m33 | fpv5-sp-d16 | hard |
| СТМ32ВБ | cortex-m4 | fpv4-sp-d16 | hard |
| STM32WBA | cortex-m33 | fpv5-sp-d16 | hard |
| СТМ32ВЛ СМ4 | cortex-m4 | Not used | soft |
| СТМ32ВЛ СМ0 | cortex-m0plus | Not used | soft |
Эта таблица является предметом потенциальных ошибок и не проверена компилятором GCC для всех строк. Для
STM32F7перейдите на официальный сайт STM32F7xx и проверьте, имеет ли ваше устройство FPU одинарной или двойной точности, а затем примените соответствующие настройки. Список продукции не является исчерпывающим.
Окончательный файл CMakeLists.txt после исходных файлов включает в себя пути, настройки ядра MCU и определения:
cmake_minimum_required(VERSION 3.22)# Настройка параметров компилятораset(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("Тип сборки: " ${CMAKE_BUILD_TYPE})## Основные настройки проекта#project(STM32H735G-DK-LED) # Modifiedenable_language(C CXX ASM)## Флаги ядра MCU, ЦП, набор инструкций и настройка FPU# Необходимо правильно настроить для вашего набора MCU#(CPU_PARAMETERS
-mthumb# Требуется правильно настроить используемый MCU-mcpu=cortex-m7 # Modified-mfpu=fpv5-d16 # Modified-mfloat-abi=hard # Modified)# Установить набор сценариев компоновщика (linker_script_SRC ${PROJ_PATH}/STM32H735IGKX_FLASH. ld) # Modifiedset(ИСПОЛНЯЕМЫЙ ${CMAKE_PROJECT_NAME})## Список исходных файлов для компиляции#set(sources_SRCS # Изменено${PROJ_PATH}/Core/Src/main.c${PROJ_PATH}/Core/Src/stm32h7xx_it.c${PROJ_PATH}/Core/Src/syscalls.c${PROJ_PATH}/Core/Src/sysmem.c$ { PROJ_PATH}/Core/Src/system_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32h735igkx.s${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm3 2h7xx_ll_exti.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_gpio.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_l l_pwr.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_rcc.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_utils.c
)## Включить каталоги#set(include_path_DIRS # Modified${PROJ_PATH}/Core/Inc${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Inc${PROJ_PATH}/Drivers/CMSIS/Device/ST/STM32H7xx/Include${PROJ_PATH}/ Драйверы/CMSIS/Включить
)## Определение символов#set(symbols_SYMB # Modified"DEBUG""STM32H735xx""USE_FULL_LL_DRIVER""HSE_VALUE=25000000")# Исполняемые файлыadd_executable(${EXECUTABLE} ${sources_SRCS})# Include pathstarget_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})# Projectsymbolstarget_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})# optiontarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-Вестра
-Педантический
-Wno-unused-parameter# Полная конфигурация отладки-Og -g3 -ggdb
)# Optionstarget_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # Поддержка форматирования чисел с плавающей точкой STDIO-Wl,--start-group
-lc
-лм
-lstdС++
-lsupc++
-Wl,--конечная группа
-Wl,-печать-использование памяти
)# Выполните пост-сборку для печати sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# Преобразование вывода в шестнадцатеричный и двоичныйadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# Преобразовать в файл bin -> добавить условную проверку?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O двоичный файл $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)В VSCode хорошо выделено, это выглядит так
CMakePresets.json — это специальный файл, доступный начиная с CMake 3.18 и предоставляющий определение пользовательской конфигурации, аналогичной конфигурации отладки и выпуска , известной в eclipse. Наличие этого файла позволяет разработчику быстро переключаться между режимами отладки и выпуска или даже между загрузчиком и основным приложением , что является распространенным вариантом использования во встроенных приложениях.
В этом руководстве не будут подробно рассмотрены подробности файла, а предоставлен предоставленный файл шаблона.
В файле описывается:
Путь к каталогу сборки для каждой конфигурации сборки.
Тип сборки по умолчанию для каждой конфигурации ( Debug , Release ,...)
Путь к дескриптору цепочки инструментов .cmake
В шаблоне настроено
4пресета для каждой конфигурации CMake по умолчанию.
{"версия": 3,"configurePresets": [
{"name": "default", "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/build/${presetName}", "toolchainFile": "${sourceDir} /cmake/gcc-arm-none-eabi.cmake","cacheVariables": {"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"}
},
{"name": "Отладка", "наследует": "default", "cacheVariables": {"CMAKE_BUILD_TYPE": "Отладка"}
},
{"name": "RelWithDebInfo", "inherits": "default", "cacheVariables": {"CMAKE_BUILD_TYPE": "RelWithDebInfo"}
},
{"name": "Release", "inherits": "default", "cacheVariables": {"CMAKE_BUILD_TYPE": "Release"}
},
{"name": "MinSizeRel", "inherits": "default", "cacheVariables": {"CMAKE_BUILD_TYPE": "MinSizeRel"}
}
]
}Всегда актуальный файл доступен в
templates/CMakePresets.json
Мы настроили CMake с информацией о проекте и теперь готовы запускать команды CMake.
VSCode поставляется с плагином CMake Tools — отличным помощником для команд CMake. После установки в нижней части активного окна VSCode доступны несколько опций.
Как видите, предустановка конфигурации не выбрана.
Если вы не видите такой информации, нажмите
CTRl + ALT + Pи запустите командуCMake: Quick Start.
Следующий шаг – выбор текущего пресета . Нажмите «Не настраивать предустановку» , чтобы открыть окно сверху и выбрать предустановку . Для этого урока я выбрал отладку .
При выборе текст изменится на метку выбранной предустановки .
Теперь эта предустановка активна, и каждый раз, когда пользователь будет изменять файл CMakeLists.txt , благодаря расширению CMake-Tools VSCode будет автоматически вызывать команду создания сборки для применения новых изменений.
Наш проект готов к сборке и компоновке. Если этап создания сборки CMake не завершился неудачно, у нас должен быть каталог сборки, готовый к вызову системы сборки ниндзя .
Следующий шаг — нажать кнопку «Создать », как показано зеленым прямоугольником. CMake выполнит команды:
Запустить генератор сборки для выбранного пресета
На самом деле создайте код с помощью Ninja
Если все построено хорошо, последним шагом на выходе является печать использования памяти с различными разделами.
В результате мы получили некоторый вывод в каталоге build/<presetname>/ :
Файл project-name.elf с полной информацией об исполняемом файле.
project-name.hex HEX-файл
project-name.bin файл
файл карты project-name.map
В конфигурации по умолчанию файлы .hex и .bin не генерируются и использование памяти не отображается. Наш подготовленный файл CMakeLists.txt включает параметры POST_BUILD для выполнения дополнительных команд после успешной сборки. Код уже находится в вашем файле CMakeLists.txt , поэтому ничего делать не нужно, просто наблюдайте.
Он выполняет команду:
Вывести используемый размер каждого региона + окончательное потребление памяти исполняемым файлом
Создать файл .hex из исполняемого файла
Создать файл .bin из исполняемого файла.
# Выполните пост-сборку для печати sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# Преобразование вывода в шестнадцатеричный и двоичныйadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# Преобразовать в файл bin -> добавить условную проверку?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O двоичный файл $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)Чтобы отключить создание файла
.bin, просто удалите строкуPOST_BUILDдля.binи заново создайте команды системы сборки CMake. Создание файлов.binможет иметь отрицательный эффект, если память разделена между внутренней и внешней флэш-памятью. Он может создавать очень большие файлы (>= 2GB) с большим количеством неиспользуемых нулей.
Существует список полезных команд, которые следует учитывать при разработке проекта:
Изменения сборки
Чистый проект
Перестроить проект, сначала очистить
Флэш-проект
Полный синтаксис легко забыть, поэтому давайте создадим файл .vscode/tasks.json со списком команд для быстрого запуска:
{ "версия": "2.0.0", "задачи": [
{"type": "cppbuild","label": "Построить проект","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- j", "8"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {"kind": «сборка», «isDefault»: правда}
},
{"type": "shell","label": "Перестроить проект","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "--clean-first", "-v", "-j", "8"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"] ,
},
{"type": "shell","label": "Очистить проект","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- -target", "clean"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": []
},
{"type": "shell","label": "CubeProg: Flash-проект (SWD)","command": "STM32_Programmer_CLI","args": ["--connect","port=swd","- -download", "${command:cmake.launchTargetPath}","-hardRst"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": []
},
{"type": "shell","label": "CubeProg: Flash-проект с определенным серийным номером (SWD) — сначала необходимо установить серийный номер",