MyTetra Share
Делитесь знаниями!
Настройка QtCreator для программирования и отладки STM32F103 (Blue Pill) в Debian Linux
Время создания: 02.04.2022 12:04
Автор: xintrea
Текстовые метки: linux, stm32, STM32F103, STM32F103C8T6, blue pill, QtCreator, настройка, отладка
Раздел: Компьютер - Аппаратное обеспечение - Микроконтроллеры ARM
Запись: xintrea/mytetra_syncro/master/base/1648890260jeim93wb70/text.html на raw.github.com

На 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 году.


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


arm-none-eabi-gdb


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



Настройка openocd


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


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


Примеры:



#Stellaris/Tiva Launchpad ICDI

SUBSYSTEM=="usb", ATTR{idVendor}=="1cbe", ATTR{idProduct}=="00fd", MODE="0600", OWNER="your_username"


#ST-Link/v2

SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0600", OWNER="your_username"


#Segger J-Link

SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0101", MODE="0600", OWNER="your_username"



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


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



SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \

MODE="660", GROUP="plugdev", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1", \

SYMLINK+="stlinkv2_%n"



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


Перед запуском 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, можно добавить строку:



set CPUTAPID 0x2ba01477



После этого исправления, 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

For bug reports, read

http://openocd.org/doc/doxygen/bugs.html

Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.

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


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



https://github.com/0xebef/qube



В 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

monitor reset halt

load

monitor reset halt


  • Команды сброса:


monitor reset halt


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"



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



Программирование микроконтроллера STM32F4 в Qt Creator



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


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



Итог


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


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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования