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 год действия следующие:
- In your STM32Cube project choose «Makefile» as your «Toolchain / IDE» in the «Project» tab of the «Project Settings» window
- Select the «Copy only the necessary library files» radio-button in the «Code Generator» tab of the «Project Settings» window
- Generate the code using the «Project -> Generate Code» menu entry or the toolbar button or the «Ctrl+Shift-G» shortcut
- Copy the contents of one of this repository’s template directories (correcsponding to your microcontroller series) to the generated project’s directory
- Rename the template-stm32xy.qbs file to your-project-name.qbs (optional)
- Open your-project-name.qbs file using Qt Creator ‘s «Open Project» button
- 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
- Open the your-project-name.qbs file using the code editor and tune the project’s properties according to your needs
- Don’t forget to set the microcontroller_series property in the Qbs file to choose your exact microcontroller series
- If you need semihosting in your DEBUG build you should change the libc_sys property in the Qbs file to «semihosting»
По информации на 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