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

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

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

  1. QtCreator, вестимо
  2. Python 2.7 (нужен для отладчика)
  3. MinGW
  4. ARM Embedded Toolchain
  5. OpenOCD
  6. Проект с makefile для stm32 (можно и другие системы сборки, которые поддерживает QtCreator).

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

|310

Далее устанавливаем 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.

|545

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

Тыкаем применить.

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

|517

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

|353

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

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

|354

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

|638

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

|

Жмём OK. Всё.

Добавляем наш проект:

|
|
|667

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

|625

Пробуем собрать:

|621

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

|470

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

openocd -f /interface/stlink-v2.cfg -f target/stm32f1x.cfg
|

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

|

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

Исправляю, запускаю:

647

Бинго!

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

Makefile для STM32F103

comments powered by Disqus