Stm32 qt creator windows

Stm32 qt creator windows

Некоторые гарнитуры Nokia можно использовать в качестве звуковой карты для компьютера.

Сайт больше не работает
на Raspberry Pi

Программируем и отлаживаем STM32 в QtCreator

Однажды понадобилось написать программку с использованием Qt. Как выяснилось, лучше всего это делать в специализированной для этого дела среде разработки — QtCreator. Поработав в ней некоторое время я понял, что это весьма неплохая IDE. И решил попробовать использовать её не совсем по назначению — программировать STM32.

Итак, что нам понадобится (далее рассматривается windows, но для остальных ОС мало что изменится):

Установку QtCreator рассматривать не буду, про MinGW знает, наверное, каждый, кто пишет на Qt по Windows. Из этого пакета нам понадобится только утилита make. Папку с исполняемыми файлами MinGW я добавил в системную переменную PATH. Python также устанавливаем в PATH.

Далее устанавливаем ARM тулчейн. Ну как устанавливаем — скачиваем zip версию и распаковываем в удобное место.

Папку bin также добавляем в PATH.

С OpenOCD те же манипуляции — распаковываем, добавляем bin (или bin-x64 для 64-разрядных систем) в PATH.

Открываем консоль и проверяем наличие всех программ (просто ввводим make, arm-none-eabi-gcc, openocd). Картина должна быть такой:

Теперь начинаются пляски с QtCreator. Первым делом нужно включить плагин для «голого железа» — BareMetal. Для этого заходим в Справка -> О Модулях.

И включаем там BareMetal. Перезагружаем QtCreator.

Далее добавляем наш компилятор. Заходим в Инструменты -> Параметры.

Находим там категорию Сборка и запуск. Открываем вкладку Компилятор, нажимаем Добавить -> GCC -> C. Прописываем полный путь к arm-none-eabi-gcc.exe или просто пишем arm-none-eabi-gcc. Обзываем как угодно, я назвал ARM-GCC.

При надобности те же манипуляции проводим с arm-none-eabi-g++, выбрав C++.

Теперь неплохо бы добавить устройство. Сначала выбираем сервер отладки. Открываем категорию Устройства, потом вкладку Голое железо. Жмём ДобавитьOpenOCD. Ничего не меняем, жмём применить. Да, QtCreator может запускать openocd автоматически, но моя сборка не может. Как я организовал автоматический запуск будет написано в конце. Тыкаем Применить.

Добавляем само устройство. Открываем вкладку Устройства, жмём Добавить -> Голое железо. Обзываем как-то (я обозвал stm32). Выбираем OpenOCD.

Ну и Завершить, Применить, естетственно.

Теперь добавляем отладчик. Снова открываем категорию Сборка и запуск, выбираем вкладку Отладчики , добавляем новый и прописываем туда arm-none-eabi-gdb -py именно с суффиксом py, так как QtCreator’у нужна версия отладчика с поддержкой питона. Обзываем arm-gdb или как-то ещё. Применить.

Добавляем тулчейн. Выбираем вкладку Комплекты и добавляем новый. Обзываем и выбираем компиляторы, отладчик, устройство.

И последнее — категория Отладчик, вкладка GDB, расширенные и включаем там Использовать асинхронный режим. Без этого QtCreator при отладке будет падать.

Жмём OK. Всё.

Открываем вкладку проекты, слева отключаем Qt, выбираем наш тулчейн, добавляем/настраиваем команды сборки:

Снова открываем проекты, настраиваем запуск. Конфигурация запуска — через сервер GDB. В качестве программы нужно выбрать скомпилированный elf файл:

Читайте также:  Oracle linux ��� kde

Теперь пора проверять что получилось. Запускаем OpenOCD вручную через cmd:

> openocd -f /interface/stlink-v2.cfg -f target/stm32f1x.cfg (для моей stm32f103c8t6)

В QtCreator куда-то ставим брэйкпоинт и наконец-то запускаем отладку:

Почему Command aborted? Да потому что я не применил изменения и у меня запускался обычный GDB от MinGW.

Да, про автоматический запуск. Прошу простить, инструкции не будет, так как это был костыль с правкой плагина HEX редактором. Если в новых версиях QtCreator это не исправят, то напишу тут.

mcu.by

Embedded Software

Базовый шаблон проекта для stm32f746g-disco на qbs в Qt Creator

Вам надоел MDK KEIL, IAR и миллион различных версий eclipse от каждого vender-а производящего те или иные ЦПУ, тогда тебе сюда. Приветствую тебя уважаемый читатель данной статьи.

Речь пойдет о том, как на стороне Linux поднять необходимые компоненты для старта написания встраиваемого программного обеспечения для микроконтроллеров (mcu) используя для этого openocd, кросскомпилятор для bare metal и qbs (системы сборки от Qt).

Все ниже описанные процедуры протестированы на Ubuntu 17.10.

Особенности qbs:

  • Позволяет собирать проекты для разных платформ в той же командной оболочке (shell);
  • Позволяет параллельно собирать множество конфигураций одного проекта;
  • Предоставляет быстрые инкрементальные сборки;
  • Использует QML-подобный язык;
  • Поддерживается c Qt Creator 2.8;
  • Не привязан к версии Qt, т.е. смена используемой версии Qt не заставляет менять версию инструментария сборки.

Собирает проект qbs очень быстро, особенно когда в проекте множество файлов, процесс сборки в разы быстрее, чем у описанных выше IDE (по мнению автора).

openocd

Установите следующие пакеты:

  • git clone http://openocd.zylin.com/openocd
  • git fetch http://openocd.zylin.com/openocd refs/changes/18/3918/16 && git checkout FETCH_HEAD
  • ./bootstrap
  • ./configure –enable-ft2232_ftd2xx
  • make
  • sudo make install

Подключите stm32f746g-disco к ПК, откройте терминал и выполните следующую команду:

openocd -f board/stm32f746g-disco.cfg -c “init” -c “reset init” -c “reset” -c “shutdown”

Вы должны увидеть информацию следующего характера:

При сборке проекта в Qt Creator происходит прошивка внутренней и внешней памяти (важно! openocd должен быть отключен).

Для отладки должен быть выбран debug режим и запущен openocd, для запуска выполните команду в терминале:

openocd -f board/stm32f746g-disco.cfg -c “init” -c “reset init”

arm-none-eabi

Установите arm-none-eabi (кросскомпилятор)

Toolchain-ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, вендор и ОС, вендор зачастую опускается.

  • none-eabi — toolchain для компиляции проекта работающего в bare metal;
  • none- или -unknown, после архитектуры – это вендор, но имя может опускаться;
  • eabi — toolchain для компиляции проекта работающего в какой-либо ОС. ABI определитель;
  • gnueabi- означает, что toolchain использует GNU EABI, и соответственно, glibc/eglibc.
  • gnueabihf- тоже самое, но используется GNU EABI с Hard Float;
  • uclibcgnueabi- или -uclibc- – означает, что компилятор будет генерировать код в GNU EABI, но вместо glibc, будет использоваться uClibc;
  • newlib- обычно пишется не в ABI, а в ОС, такие toolchain-ы тоже, как правило, bare-metal;
  • Если toolchain не для arm-архитектуры, то EABI/ABI, обычно, опускается. И пишется просто -uclibc-, -gnu- или вообще -elf-;
  • eabihf — же самое, что и eabi, но с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float;
  • Если в названии toolchain, есть -elf-, -eabi- или -newlib- то это toolchain вскоре всего для bare-metal;
  • Если в названии toolchain есть -uclibcgnueabi- или -uclibc- – то это toolchain с linux-headers и uClibc;
  • Если в названии toolchain встречается -gnu- или -gnueabi-, то это toolchain с linux-headers и glibc/eglibc;
Читайте также:  Запуск диспетчера устройств командной строки windows

Данное описание неполное, оно захватывает только область embedded под микроконтроллеры.

Настройка Qt Creator

Предварительно заходим по ссылке и выбираемые Qt Creator для скачивания. После процедуры установки, необходимо сконфигурировать необходимый qt kit для работы, для этого нужно выполнить действия показанные на скриншотах ниже. При сборки проекта Вы должны выбирать kit созданный для сборки под микроконтроллеры.


Вся магия сокрыта в qbs файле. В данном файле описываются все необходимые зависимости, так же данный пример содержит комментарии, благодаря которым Вы с легкостью сможете перейти на qbs.

Базовый шаблон проекта для stm32f746g-disco на qbs в Qt Creator можно скачать по ссылке с guthub или

Портирование Qt на STM32

Добрый день! Мы в проекте Embox запустили Qt на STM32F7-Discovery и хотели бы об этом рассказать. Ранее, мы уже рассказывали как нам удалось запустить OpenCV.

Qt — это кроссплатформенный фреймворк, который включает в себя не только графические компоненты, но и такие вещи как QtNetwork, набор классов для работы с базами данных, Qt for Automation (в том числе, для реализации IoT) и многое другое. Разработчики команды Qt заранее предусмотрели использование Qt во встроенных системах, поэтому библиотеки довольно хорошо конфигурируются. Однако до недавних пор, мало кто задумывался о портировании Qt на микроконтроллеры, вероятно потому, что такая задача выглядит сложной — Qt большое, MCU маленькие.

С другой стороны, на данный момент существуют микроконтроллеры, предназначенные для работы с мультимедиа и превосходящие первые Pentium-ы. Около года назад в блоге Qt появился пост. Разработчики сделали порт Qt под ОС RTEMS, и запустили примеры с виджетами на нескольких платах под управлением stm32f7. Нас это заинтересовало. Было заметно, и сами разработчики об этом пишут, что Qt тормозит на STM32F7-Discovery. Нам стало интересно, сможем ли мы запустить Qt под Embox, при этом не просто нарисовать виджет, а запустить анимацию.

В Embox уже давно портировано Qt 4.8, поэтому решили попробовать на нем. Выбрали приложение moveblocks — пример пружинистой анимации.

Для начала конфигурируем Qt по возможности с минимальным набором компонент, требуемым для поддержки анимации. Для этого существует опция “-qconfig minimal,small,medium . ”. Она подключает конфигурационный файл из состава Qt c множеством макросов — что включить / что отключить. После этой опции добавляем в конфигурацию другие флаги, если хотим еще что-то отключить дополнительно. Вот пример нашей конфигурации.

Для того, чтобы Qt заработало, нужно добавить слой совместимости с ОС. Один из способов — реализовать QPA (Qt Platform Abstraction). За основу взяли уже готовый плагин fb_base в составе Qt, на базе которого работает QPA для Линукс. В итоге получился небольшой плагин emboxfb, который предоставляет Qt фреймбуфер Embox’a, а дальше оно рисует туда уже без посторонней помощи.

Читайте также:  Canon мфу сканнер linux

В итоге с включенной оптимизацией компилятора по размеру памяти -Os образ библиотеки получился 3.5 Мб, что конечно не влезает в основную память STM32F746. Как мы уже писали в нашей другой статье про OpenCV, на этой плате имеется:

  • 1 Мб ROM
  • 320 Кб RAM
  • 8 Мб SDRAM
  • 16 Мб QSPI

Так как для OpenCV уже была добавлена поддержка исполнения кода из QSPI, мы решили начать с того, что загрузили образ Embox c Qt в QSPI целиком. И ура, все почти сразу же запустилось из QSPI! Но как и в случае с OpenCV оказалось, что работает слишком медленно.

Поэтому решили делать так — сначала копируем образ в QSPI, затем загружаем его в SDRAM и выполняемся оттуда. Из SDRAM стало немного быстрей, но все равно далеко от QEMU.

Далее была идея включить плавающую точку — ведь Qt делает некоторые вычисления координат квадратов в анимации. Попробовали, но здесь не получили видимого ускорения, хотя в статье разработчики Qt утверждали, что FPU дает значительный прирост в скорости для “dragging animation” на touchscreen’e. Возможно, в moveblocks существенно меньше вычислений с плавающей точкой, и это зависит от конкретного примера.

Самым же эффективным оказалась идея перенести фреймбуфер из SDRAM во внутреннюю память. Для этого мы сделали размеры экрана не 480×272, а 272×272. Еще понизили глубину цвета с A8R8G8B8 до R5G6B5, таким образом сократив размер одного пикселя с 4 до 2 байт. Получили размер фреймбуфера 272 * 272 * 2 = 147968 байт. Это дало значительное ускорение, пожалуй, самое заметное, анимация стала почти плавной.

Последней оптимизацией стало выполнение кода Embox из RAM, а Qt из SDRAM. Для этого мы сначала как обычно линкуем статически Embox вместе с Qt, но сегменты text, rodata, data и bss библиотеки размещаем в QSPI, с тем чтобы потом скопировать в SDRAM.

За счет выполнения кода Embox из ROM тоже получили ощутимое ускорение. В итоге анимация получилось достаточно плавной:

Уже в самом конце, подготавливая статью и пробуя разные конфигурации Embox’a, выяснилось, что Qt moveblocks замечательно работает и из QSPI с фреймбуфером в SDRAM, а узким местом был именно размер фреймбуфера! По-видимому, чтобы преодолеть начальное “слайдшоу” хватало ускорения в 2 раза за счет банального уменьшения размера фреймбуфера. А добиться такого результата переносом только лишь кода Embox в различные быстрые памяти не удалось (ускорение получалось не в 2, а примерно в 1.5 раза).

Как попробовать самому

Если у Вас имеется STM32F7-Discovery, Вы можете запустить Qt под Embox сами. Прочитать как это делается можно на нашем вики.

Заключение

В итоге нам удалось запустить Qt! Сложность задачи, на наш взгляд, несколько преувеличена. Естественно нужно учитывать специфику микроконтроллеров и вообще понимать архитектуру вычислительных систем. Результаты оптимизации указывают на известный факт, что самое узкое место в вычислительной системе, это не процессор, а память.

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

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