Настройка кода Visual Studio stm32

Обновлено: 21.11.2024

В этом руководстве показано, как создать простой проект «Мигающий светодиод» для платы STM32100B-EVAL с помощью Visual Studio.

Прежде чем мы начнем, убедитесь, что VisualGDB установлен.

  1. Запустите Visual Studio. Перейдите в Файл->Создать->Проект:
  2. Выберите VisualGDB -> Мастер встроенных проектов. Укажите каталог проекта и введите имя проекта:
  3. Выберите «Встроенный двоичный файл». Если вы хотите, чтобы VisualGDB генерировал файл .bin в дополнение к файлу .elf, убедитесь, что соответствующий флажок установлен.
  4. На следующей странице выберите цепочку инструментов arm-eabi. Если он не установлен, VisualGDB установит его автоматически:
  5. После выбора цепочки инструментов ARM VisualGDB покажет список совместимых целей. Если вы еще не создавали проекты на основе STM32 с помощью VisualGDB, нажмите «Установить», чтобы автоматически загрузить и установить необходимые файлы:
  6. После установки пакета STM32 вы сможете настраивать различные свойства устройства (например, запускать из FLASH или SRAM):
  7. VisualGDB создаст пример проекта «Мигающий светодиод» по умолчанию. Вы можете выбрать номер порта и задержку мигания на следующей странице:
  8. На последней странице мастера вы можете выбрать метод отладки. VisualGDB автоматически обнаружит и настроит большинство адаптеров JTAG/SWD. Просто подключите его к USB-порту и выберите в списке:
  9. В этом руководстве мы покажем, как использовать VisualGDB с Segger J-Link с использованием пакета программного обеспечения Segger. Если вы хотите использовать ST-Link или другой отладчик JTAG/SWD, просто выберите его из списка. VisualGDB позволит вам автоматически загрузить пакет метода отладки, если он отсутствует:
  10. Если вы еще не установили программный пакет Segger, перейдите по ссылке в мастере VisualGDB, чтобы установить его. После установки укажите его расположение в поле «Каталог Segger J-Link»:
  11. Используйте кнопку "Проверить", чтобы автоматически проверить подключение к устройству:
  12. Нажмите "Готово", чтобы завершить работу мастера. VisualGDB создаст проект Visual Studio для вашего устройства STM32. Нажмите Ctrl-Shift-B, чтобы построить его:
  13. Чтобы начать отладку, просто включите плату и подключите к ней отладчик JTAG. Убедитесь, что Windows распознает устройство и загружает соответствующие драйверы. Установите точку останова внутри цикла и нажмите F5, чтобы начать отладку. Вы можете отлаживать свою прошивку так же, как обычную программу Windows:
  14. Нажмите F10, чтобы перейти через линию, которая включает светодиод. Вы увидите, как загорится светодиод:
  15. Вы можете настроить различные параметры проекта, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав «Свойства проекта VisualGDB». Например. вы можете ссылаться на различные фреймворки, включенные в пакет STM32, на странице Embedded Frameworks. VisualGDB автоматически обновит ваш make-файл и синхронизирует настройки IntelliSense:
  16. VisualGDB автоматически проиндексирует ваши исходные коды (и исходные коды пакетов STM32) и позволит вам перемещаться по ним с помощью CodeJumps. Просто нажмите на ярлыки CodeJumps рядом с объявлениями функций, чтобы просмотреть ссылки, деревья вызовов, функции, «реализующие» определенные указатели на функции и т. д.:
  17. Используйте View->Embedded Memory Explorer, чтобы получить подробный отчет о структуре вашего встроенного двоичного файла, включая расположение разделов в памяти, размеры отдельных функций, их дизассемблированное представление и анализ стека в наихудшем случае:
  18. Вы также можете использовать OpenOCD для отладки ваших проектов STM32. Следуйте соответствующим руководствам для получения дополнительной информации.

    Руководство по программированию и отладке встроенных проектов с использованием микроконтроллеров STM32 Arm Cortex в Visual Studio Code.

    29 марта 2020 г. 5 минут чтения

    Энрике Баселар

    Блог, в котором я почти никогда не пишу об электронных и связанных с ними статьях.

    Visual Studio Code внесла большой вклад в мир программирования. Благодаря тысячам плагинов, тем и отличному IntelliSense, это отличный кроссплатформенный редактор кода для работы. Однако для встроенных проектов для микроконтроллеров, таких как созданные для микроконтроллеров STM32 Arm Cortex, важно знать все, что необходимо настроить для разработки и отладки проекта.

    Поэтому в этой статье я объясню все шаги, необходимые для этого. Я предполагаю, что у вас уже есть структурированный код и файл Makefile, сгенерированный либо генератором кода инициализации STM32CubeMX, либо загруженный с соответствующего веб-сайта вашего MCU. Больше информации на официальном сайте.

    В этом руководстве я буду использовать отладочную плату STM32 Nucleo-F101RB с микроконтроллером STM32F103RB. Я буду работать с Linux (Ubuntu).

    Все, что необходимо установить, указано ниже.

    • Код Visual Studio
    • Подключаемый модуль VSCode C/C++
    • Подключаемый модуль отладки VSCode Cortex
    • Встраиваемый инструментарий GNU Arm
    • Утилита STM32 ST-LINK
    • Открыть ОКР

    Код Visual Studio

    Главного героя этой истории, Visual Studio Code (теперь он называется vscode), можно скачать здесь.

    Плагины

    После установки vscode откройте его и откройте вкладку «Расширения», щелкнув его значок на левой панели или нажав Ctrl+Shift+X . Найдите C/C++ и установите его или загрузите его с торговой площадки vscode здесь. Этот подключаемый модуль обеспечивает языковую поддержку C/C++ для vscode, включая такие функции, как IntelliSense и отладка.

    Однако для отладки мы будем использовать подключаемый модуль Cortex-Debug. На той же панели расширений найдите Cortex-Debug и установите его. Вы также можете загрузить его из магазина здесь.

    Встраиваемый инструментарий GNU Arm

    Инструментарий GNU Arm Embedded можно загрузить из диспетчера пакетов Ubuntu.

    Для отладки мы будем использовать отладчик GNU, который можно установить вместе с

    Утилита ST-LINK

    STM32 ST-LINK Utility — это полнофункциональный программный интерфейс для программирования микроконтроллеров STM32. Он обеспечивает простую в использовании и эффективную среду для чтения, записи и проверки устройства памяти. Особенно нужно будет запрограммировать чип.

    В основном, чтобы установить его в Ubuntu, просто введите на своем терминале

    Открыть ОКД

    Наконец, последнее программное обеспечение, которое необходимо установить, — это OpenOCD. Открытый встроенный отладчик необходим для отладки нашего кода.

    Откройте корневую папку вашего проекта на vscode. Открыв файл, например main.c, вы заметите, что будет много ошибок включения. По умолчанию vscode будет рекурсивно искать во всех папках внутри той, которую вы открыли в своем проекте. Поскольку все файлы драйверов API находятся внутри этих папок, все должно работать нормально. Однако некоторые определения должны быть переданы в конфигурацию плагина C/C++. Эти определения можно найти внутри вашего Makefile, так как они также передаются компилятору.

    Откройте конфигурацию подключаемого модуля C/C++, нажав Ctrl+Shift+P и выполнив поиск Edit Configurations (JSON). Файл JSON с именем c_cpp_properties.json откроется в новой папке с именем .vscode, созданной в корне вашего проекта.

    Откройте файл Makefile и найдите переменную с именем C_DEFS, как показано ниже.

    Вернувшись в файл конфигурации JSON, удалите все, что сейчас находится в теге defines, и скопируйте те, которые мы будем использовать без -D . Ваш файл должен выглядеть так

    Закройте vscode и снова откройте его. Теперь все должно быть в порядке, и все ошибки включения исчезли.

    По сути, просто добавьте следующие строки в конец файла Makefile

    Теперь, после компиляции, вы можете прошить код, просто набрав make flash на терминале в корне проекта. Это сотрет флэш-память и запрограммирует чип с позиции памяти 0x8000000.

    Чтобы настроить отладку, откройте вкладку «Отладка» на левой панели vscode или нажмите Ctrl+Shift+D . Поскольку конфигурации пока нет, мы настроим запуск и отладку, создав файл launch.json. После нажатия на эту опцию вы увидите несколько сред для выбора. Выберите Cortex-Отладка. Файл будет создан в папке .vscode и открыт.

    Конфигурация зависит от используемого микроконтроллера и платы. Как я упоминал ранее, я использую макетную плату STM32 Nucleo-F101RB с микроконтроллером STM32F103RB. Моя конфигурация выглядит следующим образом

    Важно изменить исполняемый тег, чтобы он указывал на файл .elf вашего проекта. Тег servertype должен быть настроен как openocd, а устройство и configFiles должны соответствовать вашему микроконтроллеру и плате. Дополнительную информацию можно найти на вики плагина Cortex-Debug.

    Важно отметить, что в теге configFiles указан путь к файлу .cfg, который будет передан OpenOCD. При установке OpenOCD также устанавливаются некоторые файлы конфигурации с некоторых общих плат, но вы всегда можете создать свои собственные. Вы можете получить дополнительную информацию о Руководстве OpenOCD. Вы можете проверить доступные файлы .cfg, поставляемые с установкой OpenOCD, в папке /usr/share/openocd.

    Теперь, если вы попытаетесь начать отладку, вы получите сообщение об ошибке, поскольку плагин Cortex Debug попытается запустить arm-none-eabi-gdb, который больше не поставляется с последними доступными версиями GNU Arm Embedded Toolchain. в репозитории Ubuntu. Вот почему мы установили gdb-multiarch. В этом случае мы можем создать следующую символическую ссылку, чтобы перенаправить команду arm-none-eabi-gdb на двоичный файл gdb-multiarch.

    Теперь вы наконец-то можете вернуться на вкладку "Выполнение и отладка" и начать отладку.

    Это руководство поможет вам установить и настроить Visual Studio Code для программирования и отладки плат STM32.

    Я тестировал это руководство в Arch Linux и Ubuntu 18.04.Если вы заставите его работать с другими настройками, сообщите мне, чтобы я обновил шаги с дополнительной информацией.

    Если вы раньше использовали STM32CubeIDE или SystemWorkbench, вам необходимо преобразовать свои проекты, чтобы они заработали. Процедура преобразования полностью обратима.
    До момента написания этого руководства было невозможно использовать STM32CubeIDE и Visual Studio Code в одном проекте, если только в CubeIDE не были внесены некоторые изменения конфигурации. Кроме того, рекомендуется, чтобы каждый человек, работающий над проектом, работал в одной и той же рабочей среде.

    Если у вас уже установлен CubeMX, вы можете пропустить этот шаг

    Установите stm32cubemx из AUR. Если у вас нет доступа к AUR или вы просто не хотите его использовать, выполните шаг ниже.

    Неполноценные операционные системы (Windows, Ubuntu, Temple OS. )

    Загрузите ZIP-файл отсюда (необходимо зарегистрироваться на веб-сайте ST) и установите версию, подходящую для вашей ОС.

    <р>2. Цепочка встроенных инструментов GNU ARM

    Это инструменты, необходимые для компиляции и отладки кода.

    Установите arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-newlib .

    Установите gcc-arm-none-eabi gdb-multiarch libnewlib-arm-none-eabi .

    Установите набор инструментов с веб-сайта компании Arm

    Установите make из менеджера пакетов

    Установите make с этой страницы (обновлено в 2006 году). Должна быть возможность получить текущую версию make через WSL, но у меня нет с этим опыта.

    Open On-Chip Debugger — это программное обеспечение, которое позаботится о загрузке скомпилированного программного обеспечения в STM32, а во время отладки оно откроет соединение между компьютером и STM32.
    Если вы работаете в Windows, вы, вероятно, можете установить OpenOCD, но я понятия не имею, как это сделать. Свяжитесь со мной, если хотите найти способ.

    Установите openocd из диспетчера пакетов

    <р>5. Код Visual Studio

    Следующие шаги на самом деле не нужны, чтобы все заработало. Вы можете просто использовать терминал и свой любимый редактор, и у вас будут (почти) все функциональные возможности полной установки. Visual Studio Code — это просто красивый внешний интерфейс.

    Эта страница содержит инструкции по установке последней версии VSCode во многих дистрибутивах.

    Скачать и установить программу с официального сайта.

    Это расширение позаботится об интеллектуальном анализе, подсветке синтаксиса и многом другом.
    Установите это расширение в Visual Studio Code.

    То же, что и выше, но с этим расширением.

    По умолчанию CubeMX создает проекты в формате EWARM. К сожалению, EWARM в настоящее время не поддерживается расширением VSCode, но поддерживается более общая структура Makefile. Чтобы настроить CubeMX для поддержки VSCode, вам нужно перейти в Project Manager->Project->Toolchain/IDE и установить Makefile.

    На вкладке Генератор кода включите параметр Копировать все используемые библиотеки в папку проекта. Этот шаг необходим, поскольку stm32-for-vscode еще не поддерживает неявное включение библиотек.
    После этого нажмите СОЗДАТЬ КОД ; Вы должны увидеть создание новой структуры проекта Makefile.

    <р>2. Visual Studio

    С помощью меню "Открыть папку" в Visual Studio Code перейдите в корневую папку проекта и откройте ее. Теперь откройте палитру команд (Ctrl+Shift+P или F1) и запустите Build STM32 Project. Должен появиться терминал, и вы увидите, как gcc (надеюсь) компилирует ваш проект.

    После того, как вы вызовете сборку проекта STM32 в первый раз, stm32-for-vscode создаст две настраиваемые задачи (доступ к которым можно получить, нажав Ctrl+Shift+B ) для сборки вашего кода и его прошивки на плату STM32.

    Для отладки кода просто нажмите F5 внутри VSCode, и отладчик запустится автоматически. Не забудьте остановить отладчик перед прошивкой нового кода.

    Ошибка: сбой libusb_open() с LIBUSB_ERROR_ACCESS во время загрузки

    Это происходит из-за того, что у вас нет разрешения на открытие последовательного устройства. Чтобы исправить это, вам нужно добавить своего пользователя в группу, которой принадлежит последовательный интерфейс. Чтобы получить имя последовательного интерфейса, вы можете запустить dmesg | grep tty после подключения STM32. Прочтите последнюю строку, вы должны увидеть что-то вроде:

    В этом примере ttyACM0 — это имя устройства.
    Теперь, когда вы знаете имя, вы можете получить владельца, выполнив ls -l /dev/ttyACM0 . Вывод выглядит следующим образом:

    группа указывает имя группы.

    Теперь вам просто нужно добавить своего пользователя в группу, выполнив sudo usermod -aG group $USER , заменив group именем группы, которое вы обнаружили выше.

    Готово. Выйдите из своей учетной записи и войдите снова, чтобы применить изменения.

    Каждый день мир программного обеспечения отходит от традиционных программных и аппаратных средств, заменяя их лучшими и более быстрыми альтернативами с открытым исходным кодом. Сегодня наиболее привлекательные альтернативы с открытым исходным кодом для разработки встраиваемых систем ARM основаны на Eclipse.Настройка идеального рабочего процесса для разработки встраиваемого программного обеспечения без затрат на лицензирование может оказаться непростой задачей, если вы не знаете, с чего начать.

    Поскольку я не фанат Eclipse, я покажу вам, как настроить VS Code для этой задачи. Я выбрал эту IDE, потому что она работает молниеносно, Intellisense всегда работает и поддерживает широкие возможности настройки с помощью подключаемых модулей и файлов конфигурации.

    В этом руководстве мы будем использовать адаптер ST-Link для программирования и отладки. Если вы хотите использовать полностью открытый исходный код, вам поможет исследование черной магии.

    Должен ли я это сделать?

    Ну, это зависит. Если вы работаете над крупномасштабным проектом, вам, вероятно, лучше использовать традиционные платные IDE, такие как uVision или IAR, из-за их более широкой совместимости со многими версиями продуктов и операционными системами. Кроме того, если вы ищете способ программирования устройств ARM Cortex, который является бесплатным и более простым в настройке, вы можете попробовать VisualGDB, SW4STM32 или другую альтернативу на основе Eclipse.

    Однако, если вы хотите, чтобы все возможности Intellisense всегда были у вас под рукой, а время сборки сократилось, это то, что вам нужно. Поверьте мне, это сильно меняет процесс разработки.

    Предпосылки

    Комплект разработки NUCLEO-F303K8 или аналогичная плата ST. Для других плат вам необходимо обновить файлы конфигурации, указав имя и серию вашего процессора. Все внешние инструменты, необходимые для создания и прошивки встроенного программного обеспечения ARM Cortex, будут помещены в папку VSARM.

    Конфигурация среды

    Откройте диалоговое окно настройки переменных среды. В зависимости от конфигурации вашей системы и прав администратора вы можете изменить переменные пользователя или системные переменные. Внесите следующие изменения:

    1. Создайте новую переменную с именем VSARM, указывающую на C:\VSARM\

    1. Добавьте C:\VSARM\stlink\bin в переменную Path на панели переменных
    2. Добавьте C:\VSARM\armcc\bin в переменную Path на панели переменных
    3. Добавьте C:\VSARM\mingw\mingw32\bin в путь на панели переменных

    Убедитесь, что исполняемые файлы присутствуют во всех трех подпапках, указанных выше.

    Конфигурация кода VS

    После установки Visual Studio Code откройте интегрированную среду разработки, перейдите на вкладку "Расширения" или нажмите Ctrl + Shift + X.

    Установите следующие расширения:

    Нажмите F1 и введите настройки пользователя json. Выберите Открыть настройки (JSON). В открывшемся файле добавьте следующее свойство и сохраните.

    Настройка рабочего пространства STM32

    Мы создадим папку, которая будет служить рабочим пространством для наших проектов. Мы настроим два проекта, чтобы начать разработку. В качестве первого шага создайте на рабочем столе папку с именем STM32_Projects.

    Затем создайте две подпапки, одну с именем template_F3 и одну с именем blink. В VS Code перейдите на вкладку «Файлы» или нажмите Ctrl + Shift + E. Нажмите «Добавить папку в рабочую область». Перейдите в папку STM32_Projects и выберите ее.

    Нажмите F1 и введите сохранить рабочую область. Выберите Рабочие пространства: Сохранить рабочее пространство как. Перейдите в папку STM32_Projects и сохраните файл под соответствующим именем.

    Нажмите F1 и введите "Сохранить проект". Нажмите Enter и задайте имя проекта template_F3.

    Нажмите F1, чтобы редактировать проекты. Измените параметр rootPath, чтобы он указывал на подпапку template_F3, как показано ниже.

    Дублируйте запись проекта JSON, чтобы создать другой проект с именем blink, указывающим на нашу подпапку blink. Сохраните файл и нажмите F1, чтобы открыть список проектов, и щелкните проект template_F3, чтобы открыть его. Теперь ваш проект шаблона открыт.

    Вам нужно будет обновить этот файл при создании новых проектов, чтобы расширение Project Manager знало, где находятся ваши материалы.

    Настройка проекта STM32

    Нажмите F1, введите edit config и выберите C/CPP: Edit Configurations…. Замените содержимое c_cpp_properties.json следующей конфигурацией.

    Настройте раздел defines в соответствии с используемым микроконтроллером и частотой HSE. Чтобы создать конфигурацию выпуска, продублируйте объект конфигурации, удалите определение USE_FULL_ASSERT и замените DEBUG на NDEBUG в разделе определений.

    Нажмите F1 и введите config task. Выберите Задачи: настроить задачи. Нажмите «Создать файл tasks.json из шаблона» и выберите «Другое». Откроется файл tasks.json.Замените содержимое этого файла следующим и сохраните файл. Настройте параметр ядра -j для вашего процессора и измените уровень оптимизации с помощью переменной OPT.

    Конфигурация создает две задачи: одну для сборки проекта, а другую для прошивки микроконтроллера.

    Запустить конфигурации

    Нажмите F1, введите launch и выберите Debug: Open launch.json. Выберите параметр «Отладка Cortex». Замените содержимое файла launch.json следующим:

    Загрузите соответствующий файл для вашего процессора и вставьте его в папку template_F3. Затем настройте параметр sdvFile в конфигурации запуска.

    Пример мерцания CubeMX

    Перейдите к подпапке template_F3. Скопируйте содержимое этой папки в вашу папку blink. Если папка .vscode не видна, убедитесь, что у вас установлен флажок «Показывать скрытые файлы и папки» в параметрах «Папка» и «Поиск».

    Откройте CubeMX и создайте новый проект. Найдите свой микроконтроллер и дважды щелкните, чтобы создать проект. Сохраните проект в STM32_Projects/blink/ как blink.ioc.

    Появится графический интерфейс для редактирования периферийных устройств. Проверьте схемы вашей платы, чтобы найти контакты для светодиодов. Для платы NUCLEO-F303K8 светодиод находится на контакте PB3. Нажмите на контакт светодиода, чтобы изменить его функцию на GPIO_Output.

    Сохранить и нажать «Создать исходный код» в меню «Проект»/«Создать код».

    Появится диалоговое окно настроек проекта. Внесите следующие изменения.

    • Установите имя проекта таким же, как имя папки (мигание)
    • Установите папку рабочей области (STM32_Projects)
    • Убедитесь, что для параметра Toolchain IDE установлено значение Makefile.
    • На вкладке "Генератор кода" убедитесь, что флажок "Удалить ранее созданные файлы, если они не созданы повторно" не установлен.

    Нажмите «ОК» и разрешите перезапись. Код инициализации теперь генерируется для проекта. При первом создании кода Cube удалит папку .vscode. Скопируйте и вставьте файлы json из шаблона, а также файл svd.

    Добавление сочетаний клавиш

    Чтобы упростить жизнь, мы добавим ярлыки для задач сборки и прошивки. Нажмите F1 и найдите сочетания клавиш. Откройте файл JSON и добавьте следующие ярлыки:

    Программирование и отладка

    Вернитесь в Visual Studio Code, нажмите F1 и введите список проектов. Выберите мигающий проект. Отредактируйте файл main.c, затем добавьте код для мигания светодиодов.

    Сохраните и нажмите F5, чтобы построить, и F6, чтобы прошить. Если все прошло хорошо, он должен работать отлично с первой попытки. Теперь вы можете начать отладку, перейдя на панель отладки. Если файл SVD присутствует, он позволит вам проверить состояние периферийных регистров.

    Когда ваш код увеличится в размере, вы захотите разделить его на разные модули. Для этого вам нужно добавить путь к файлам C в Makefile. STM32Cube отлично справляется с сохранением ваших изменений при повторной генерации кода.

    Хотя это экспериментальный подход, и его настройка требует некоторого времени, я надеюсь, что производительность, которую вы сможете получить от него, убедит вас рассмотреть этот подход в производственных средах.

    Читайте также: