Однажды понадобилось написать программку с использованием 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 файл:
Теперь пора проверять что получилось. Запускаем OpenOCD вручную через cmd (для моей stm32f103c8t6):
openocd -f /interface/stlink-v2.cfg -f target/stm32f1x.cfg
В QtCreator куда-то ставим брэйкпоинт и наконец-то запускаем отладку:
Почему Command aborted? Да потому что я не применил изменения и у меня запускался обычный GDB от MinGW.
Исправляю, запускаю:
Бинго!
Да, про автоматический запуск. Прошу простить, инструкции не будет, так как это был костыль с правкой плагина HEX редактором. Если в новых версиях QtCreator это не исправят, то напишу тут.