Qt creator stm32 linux

Qt creator stm32 linux

На 2022 год информация о том, как настраивать QtCreator в виде embadded IDE для программирования и отладки STM32 очень разрозненна и неоднозначна. Здесь собираются сведения о том, что нужно установить и что где надо прописать на примере Debian Linux 11.

Для разработки потребуются следующие пакеты:

  • binutils-arm-none-eabi
  • gcc-arm-none-eabi
  • openocd
  • libstdc++-arm-none-eabi-newlib
  • libnewlib-arm-none-eabi
  • picolibc-arm-none-eabi
  • gdb-multiarch (этот пакет установит бинарник gdb-multiarch, который заменяет устаревшие бинарники пакета gdb-arm-none-eabi)

Среда QtCreator устанавливается с официального сайта qt.io. В данном тексте используется QtCreator v.5.13.1. Эта версия QtCreator несколько устарела (примерно 2019 год), но умельцы настраивали QtCreator для работы с STM32 и в 2011 году.

Примечание: ранее, после установки этих пакетов становился доступен бинарник:

Однако теперь его место занимает gdb-multiarch .

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

Для того, чтобы openocd видел железо, надо прописать следующие правила в файл /etc/udev/rules.d/51-arm-development.rules (если такового или похожего нет, то его надо создать). Правила позволят пользователю, под которым работает разработчик, получать доступ к оборудованию по USB.

#Stellaris/Tiva Launchpad ICDI

SUBSYSTEM==»usb», ATTR==»1cbe», ATTR==»00fd», MODE=»0600″, OWNER=»your_username»

SUBSYSTEM==»usb», ATTR==»0483″, ATTR==»3748″, MODE=»0600″, OWNER=»your_username»

SUBSYSTEM==»usb», ATTR==»1366″, ATTR==»0101″, MODE=»0600″, OWNER=»your_username»

В данном коде надо не забыть вместо your_username написать имя желаемого пользователя.

Возможно, что вместо вышеуказанных строк надо написать так (пример для STLink v.2):

Похоже, что такая настройка даст доступ всем пользователям к вставленному устройству.

Перед запуском QtCreator, надо проверить запуск openocd. Запуск осуществляется следующей командой:

openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg

В ответ на эту команду, возможно, появится два предупреждения, приводящих к ошибке запуска:

WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg

Warn : UNEXPECTED idcode: 0x2ba01477

Error: expected 1 of 1: 0x1ba01477

Первое предупреждение исправляется указанием файла stlink.cfg вместо файла stlink-v2.cfg . Однако предупреждение и ошибка с неправильным idcode останется. Данная ошибка возникает, если используется китайская реплика Blue Pill. Для ее устранения можно отредактировать файл /usr/share/openocd/scripts/target/stm32f1x.cfg . В начале этого файла, после директив source , можно добавить строку:

После этого исправления, openocd можно гарантированно запустить командой:

openocd -f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg

Если все настроено правильно, этот запуск можно делать от обычного пользователя, не от root. При успешном запуске в консоль будет выдано примерно следующее:

Читайте также:  Континент ап нарушена целостность файлов линукс

Open On-Chip Debugger 0.11.0-rc2

Licensed under GNU GPL v2

Info : auto-selecting first available session transport «hla_swd». To override use ‘transport select ‘.

Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD

Info : Listening on port 6666 for tcl connections

Info : Listening on port 4444 for telnet connections

Info : clock speed 1000 kHz

Info : STLINK V2J39S7 (API v2) VID:PID 0483:3748

Info : Target voltage: 2.434086

Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

Info : starting gdb server for stm32f1x.cpu on 3333

Info : Listening on port 3333 for gdb connections

Данная проверка будет гарантировать то, что последующая настройка OpenOCD в среде Qt Creator будет производиться без ошибок.

Настройка среды Qt Creator

Далее настройка происходит примерно так, как написано в статье:

1. Добавить компиляторы языков C и C++ из состава gcc-arm-none-eabi на вкладке Комплекты — Компиляторы, если их среда автоматически не увидела. Компиляторы располагаются так:

  • GCC (C++, ARM 32 bit in /usr/bin) — /usr/bin/arm-none-eabi-g++
  • GCC (C, ARM 32 bit in /usr/bin) — /usr/bin/arm-none-eabi-gcc

2. Активировать плагин Bare-Metal (Голое железо) в меню Справка — О модулях. Перегрузиться.

3. В разделе Устройства во вкладке Bare Metal настроить/добавить OpenOCD.

  • Режим запуска: Запуск в локальном режиме (pipe)
  • Исполняемый файл: openocd
  • Корень каталога скриптов: /usr/share/openocd/scripts
  • Дополнительные параметры:

-f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg

или без указания полного пути

-f interface/stlink.cfg -f target/stm32f1x.cfg

такая конфигурация позволит автоматически запускаться openocd.

set remote hardware-breakpoint-limit 6

set remote hardware-watchpoint-limit 4

set mem inaccessible-by-default off

monitor arm semihosting enable

4. В разделе Устройства во вкладке Устройства добавить устройство Голое устройство с типом Голое железо. Тип сервера GDB — OpenOCD.

5. В разделе Комплекты во вкладке Отладчики добавить отладчик, назвав его GDB ARM none EABI или GDB Multiarch (for STM32), и указав бинарник /usr/bin/gdb-multiarch , если среда Qt Creator не обнаружила его автоматически.

6. В разделе Комплекты во вкладке Комплекты создать комплект с названием STM32 Embedded. Настройки приведены на скриншоте:

Не забыть выставить данный комплект как комплект по-умолчанию.

Настройка среды сборки QBS в Qt Creator

Действия далее не проверялись. Для их выполнения необходима установленная бесплатная проприетарная среда STM32CubeIDE.

По информации на 2014 год действия следующие:

  1. In your STM32Cube project choose «Makefile» as your «Toolchain / IDE» in the «Project» tab of the «Project Settings» window
  2. Select the «Copy only the necessary library files» radio-button in the «Code Generator» tab of the «Project Settings» window
  3. Generate the code using the «Project -> Generate Code» menu entry or the toolbar button or the «Ctrl+Shift-G» shortcut
  4. Copy the contents of one of this repository’s template directories (correcsponding to your microcontroller series) to the generated project’s directory
  5. Rename the template-stm32xy.qbs file to your-project-name.qbs (optional)
  6. Open your-project-name.qbs file using Qt Creator ‘s «Open Project» button
  7. If the «ARM-None-EABI» kit wasn’t selected as default in your Settings you will have to open the «Project» tab and activate the «ARM-None-EABI» kit under «Build & Run» while disactivating the other kits
  8. Open the your-project-name.qbs file using the code editor and tune the project’s properties according to your needs
  9. Don’t forget to set the microcontroller_series property in the Qbs file to choose your exact microcontroller series
  10. If you need semihosting in your DEBUG build you should change the libc_sys property in the Qbs file to «semihosting»
Читайте также:  Mouse and keyboard sharing linux

По информации на 2020 год действия можно выполнять согласно следующей видео-инструкции (на русском):

Но тогда QBS вроде как не используется. Все сводится к тому, что в STM32CubeIDE создается проект, использующий makefile. Затем он полностью копируется в другой каталог, и данный проект открывается в Qt Creator в режиме «существующий проект», «на основе makefile». После этого в Makefile надо сделать пару правок, потому что STM32CubeIDE генерирует его под свое окружение, которого нет в обычной Linux-системе, в видео этот момент показан.

При выборе такого типа проекта, далее разработка будет постоянно связана с корректировкой файла Makefile, который тот еще застарелый монстр.

Настраивать разработку под STM32 в Qt Creator в Linux неимоверно сложно. Информация постоянно меняется, готовых действующих рецептов в Интернете нет. Я видел вживую одного человека, который смог настроить весь этот стек технологий, но сделал он это под Windows, поэтому его опыт не точно пересекается с тем, что описано в данной статье. Он мне демонстрировал работу отладчика в Qt Creator, он действительно работает, и все прекрасно. Настраивал он все это дело тоже с дикими муками, и точно вспомнить где что он крутил, он уже не в состоянии, потому что действия, естественно, не записывал.

Так что имеем то что имеем: каждый разработчик должен долбаться сам в надежде что что-то получится. Или использовать другие среды разработки. Многообещающе выглядит Open Source среда Microsoft VS Code с плагином PlatformIO . Данная среда доступна под Linux, а информации о ее использовании и настройке достаточно много.

  • Начинаем изучать ARM Cortex-M на примере STM32
  • USB HID для микроконтроллеров STM32F103 без использования библиотек
  • Установка битовых флагов через удобный макрос
  • GPIO выход в режиме OpenDrain
  • Начало работы с STM32F103C8T6 Blue Pill
  • Перечень 5В-толерантных пинов для STM32F103C8T6
  • Как прошивать Blue Pill STM32 F103 через обычный USB-кабель в Linux
  • Книги и учебные материалы по STM32 на русском языке
  • Как быстро освоить STM32
  • STM32: Урок 1 — Настраиваем IDE
  • От Arduino к STM32
  • ARM. Учебный курс. Внешние прерывания
  • Битовые операции, которые удобно использовать для установки регистров в STM32/Arduino
  • Программируем микроконтроллеры stm32 при помощи QtCreator
  • Настройка QtCreator для программирования и отладки STM32F103 (Blue Pill) в Debian Linux
  • Настройка VS Code + PlatformIO для программирования и отладки STM32F103 (Blue Pill) под Linux
  • Как в PlatformIO посмотреть полный вывод компилятора
  • Как в PlatformIO переключиться на другой открытый проект и собрать/запустить его
  • Пример мигания светодиодом для BluePill STM32F103C8T6 через CMSIS
  • Пример быстрого ногодрыганья на BluePill STM32F103C8T6 через CMSIS (период 60 наносекунд)
  • Аббревиатуры, используемые в документации к контроллерам STM32
  • Регистры настройки портов ввода-вывода GPIOA, GPIOB и т. д. в STM32
  • Введение в библиотеку CMSIS
  • Функции задержек на заданное количество машинных циклов и миллисекунд для STM32
  • Как посмотреть дизассеблерный код для бинарника под ARM-архитектуру
  • Что быстрее: работа с регистрами CRL/CRH напрямую или через переменную?
  • Маркировка микроконтроллеров STM32
  • С++, метапрограммирование и регистры микроконтроллера STM32
  • Как бороться с ошибкой Please select first the target STM32F10x device
  • Как в PlatformIO быстро запустить сбоку и заливку прошивки
  • Как освободить ножки PB3, PB4, PA15 на STM32 BluePill через CMSIS
  • Почему не срабатывает брекпоинт при отладке платы STM32?
  • Как вывести шестнадцатеричное HEX-значение для типа int при отладке в PlatformIO
Читайте также:  Run rust on linux

Источник

Оцените статью
Adblock
detector