Не так давно помогал с освоением микроконтроллеров одной малоизвестной фирмы — Миландр. Официальная среда разработки 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.

Комментарии (11)


  1. xztau
    17.09.2019 08:13

    А прошиватор то какой?


    1. staticmain
      17.09.2019 09:08

      Правка файла конфигурации openocd и вот уже всё прошивается
      Или вы про железку? Для железки скорее всего stlink


      1. xztau
        17.09.2019 09:14

        Да. Я про железку.


        1. Amomum
          17.09.2019 18:25

          st-link вроде не умеет шить 1986ВЕ1


    1. WicRus Автор
      17.09.2019 15:54

      Прошивали клоном j-link'а. Думаю st-link тоже подойдёт, нужно будет только файл подредактировать.


  1. Tishka17
    17.09.2019 10:59

    Актуально с учетом того, что Qt решила год назад прекратить разработку qbs.


    1. WicRus Автор
      17.09.2019 16:04

      The Qt Company announced that it will discontinue the further development of Qbs by the end of 2019 deprecated. The project is maintained by the community as part of the Qt Project.
      Источник
      Проект переносится в разработку сообщества. Моё мнение — рано qbs закапывать.


  1. jaha33
    17.09.2019 21:23

    А можете чуть подробнее рассказать как на винду поставить openocd и прикрутить его к среде разработки?
    P.S. За статью спасибо :)


    1. WicRus Автор
      18.09.2019 16:44

      С openocd на windows по сути одна проблема, нужно добавить в переменную $PATH ту папку, где лежит бинарник openocd. К шаблону он уже прикручен, как прикрутить для отладки есть в картинках.


  1. NordicEnergy
    18.09.2019 16:15

    А как там с процессом отладки?


    1. WicRus Автор
      18.09.2019 16:50

      Отладка работает. Проверяли на MDR1986VE1T с помощью китайского клона j-link'а. Запускается по кнопке «Начать отладку». Обычный функционал, который предоставляет gdb, натянутый на QtCreator. Единственный нюанс с отладкой описан в статье, он некритичный, просто не очень удобный.