Pull to refresh

QBS шаблон для программирования микроконтроллеров в QtCreator на примере контроллеров Миландр

Reading time4 min
Views7.7K
Не так давно помогал с освоением микроконтроллеров одной малоизвестной фирмы — Миландр. Официальная среда разработки Keil. Мне она не приглянулась, но процессор на архитектуре ещё одной малоизвестной фирмы ARM, а значит под него есть gcc компилятор. А где есть gcc, там можно и QtCreator применить в качестве IDE.

метал керамические корпуса прекрасны

Введение


Изначально задача ставилась довольно просто. Найти нужные файлы для сборки проекта. Взять уже когда-то сделанный проект под stm32f407 и обработать напильником. Однако во время выполнения столь простого плана, возникло желание сделать чуть более интересный проект, чем предполагалось вначале.

Подготовка


Для начала нужно будет скачать компилятор и отладчик для микроконтроллеров на базе ядер серии Cortex-M. Свежая версия лежит тут [ 1 ]. Также понадобится QtCreator, не ленивые могут собрать из исходников, ленивые могут взять здесь [ 2 ]. Ещё нам понадобится openocd для прошивки и отладки микроконтроллера. [ 3 ] GCC компилятора для Cortex-M на сайте ARM [ 9 ]

Устанавливаем указанное программное обеспечение, а также все зависимости по необходимости. После чего переходим к настройке среды.

Настройка QtCreator'a в картинках
Если не включена, включаем поддержку bare metal (Голое железо) в Справка -> О модулях
Добавляем компиляторы

g++



gcc



Добавляем отладчик gdb



Создаём профиль отладки openocd, тут небольшой костыль. Путь к файлу конфигурации нужно указать абсолютный. Файл для каждого микроконтроллера разный, это вносит определённые неудобства.



Настройка bare metal



И собираем это всё в один комплект



Библиотеки для микроконтроллеров


Беглый поиск по сайту Миландра выдал не официальную сборку библиотек для работы с периферией и ядром микроконтроллера. Сборка поддерживает gcc и находится на гитхабе [ 4 ]. На готовый проект для stm32f407 сборка легла довольно легко и после исправления в паре мест, уже радостно рвалась прошивать микроконтроллер. Правка файла конфигурации openocd и вот уже всё прошивается. Ещё немного слесарных работ и уже работает отладка. И кажется, что вот уже всё — лёгкая победа. Но библиотеки поддерживают несколько микроконтроллеров. А микроконтроллеры на разных ядрах и ещё используют разные библиотеки периферии. Сразу появилась мысль сделать один проект, чтобы можно было легко выбрать нужный микроконтроллер, а среда сама выберет нужные библиотек ядра и периферии. Эта идея приходила мне ещё в то время, когда я осваивал stm32f407. Возможность реализовать такую довольно интересную задумку нельзя было упускать.

Пара вечеров ковыряния в библиотеках и qbs [ 5 ] дали положительный результат. Удалось настроить компиляцию для следующих микроконтроллеров MDR1901VC1T (1901ВЦ1Т), MDR1986VE1T (1986ВЕ1T), MDR1986VE3 (1986ВЕ3), MDR1986BE4 (1986ВЕ4х), MDR1986VE8T (1986ВЕ8х), MDR1986VE9x (1986ВЕ9х). Хотя в описании исходных библиотек не было поддержки MDR1986VE8T, зато имелось часть файлов библиотек ядра и библиотеки периферии. Не хватало некоторых заголовочных файлов, которые были найдены в репозитории компании ARM [ 6 ].

Финальный проект


Получился довольно скромный шаблон, позволяющий писать проекты под несколько микроконтроллеров. Лежит шаблон на гитхабе [ 7 ]. Исходная библиотека претерпела ряд косметических изменений. Хоть и хотелось сохранить совместимость с оригинальным проектом, пришлось сделать форк [ 8 ] и потерять совместимость, но это плата за универсальность. Скачать проект можно следующим образом.

git clone https://github.com/WicRus/emdr1986x-std-per-lib-qbs.git --recursive 

Так же можно проект клонировать прям из QtCreator'а, указав адрес репозитория и поставив галочку Рекурсивно.

Выведение


Главный результат — универсальный шаблон с поддержкой нескольких микроконтроллеров с различными библиотеками ядра и периферии. Однако возник ряд моментов, которые стоит отметить:

  • Проверить прошивку и отладку удалось только на MDR1986VE1T.
  • Target файлы конфигурации openocd нашлись только для MDR1986VE1T и MDR1986VE9x. Для остальных контроллеров нужно где-то брать или писать самостоятельно.
  • Библиотеки для MDR1986VE8T были собраны без особого вникания в вопрос. Необходимо проверить корректность работы.
  • Исходные библиотеки были ощутимо изменены. Возможны проблем при слияния.
  • При сборке для MDR1901VC1T, MDR1986BE4, MDR1986VE9x выдаётся предупреждение об устаревших библиотеках ядра. Необходимо обновить библиотеки ядра по аналогии с MDR1986VE8T, после чего проверить корректность работы.
  • Особенность создания конфигурации openocd. Для каждого отдельного типа микроконтроллера возможно понадобится отдельный комплект сборки в QtCreator'е.

Ссылки

Осторожно, ссылки открываются в этом окне.

0. Основа для КДПВ с сайта Миландр
1. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
2. https://www.qt.io/download-qt-installer
3. http://openocd.org
4. https://github.com/eldarkg/emdr1986x-std-per-lib
5. https://doc.qt.io/qbs/
6. https://github.com/ARM-software/CMSIS_5
7. https://github.com/WicRus/emdr1986x-std-per-lib-qbs
8. https://github.com/WicRus/emdr1986x-std-per-lib
9. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
История правок.
17.09.19 Добавлена ссылка на GNU Arm Embedded Toolchain.
Tags:
Hubs:
+17
Comments13

Articles