Не так давно помогал с освоением микроконтроллеров одной малоизвестной фирмы — Миландр. Официальная среда разработки Keil. Мне она не приглянулась, но процессор на архитектуре ещё одной малоизвестной фирмы ARM, а значит под него есть gcc компилятор. А где есть gcc, там можно и QtCreator применить в качестве IDE.
Изначально задача ставилась довольно просто. Найти нужные файлы для сборки проекта. Взять уже когда-то сделанный проект под stm32f407 и обработать напильником. Однако во время выполнения столь простого плана, возникло желание сделать чуть более интересный проект, чем предполагалось вначале.
Для начала нужно будет скачать компилятор и отладчик для микроконтроллеров на базе ядер серии Cortex-M. Свежая версия лежит тут [ 1 ]. Также понадобится QtCreator, не ленивые могут собрать из исходников, ленивые могут взять здесь [ 2 ]. Ещё нам понадобится openocd для прошивки и отладки микроконтроллера. [ 3 ] GCC компилятора для Cortex-M на сайте ARM [ 9 ]
Устанавливаем указанное программное обеспечение, а также все зависимости по необходимости. После чего переходим к настройке среды.
Беглый поиск по сайту Миландра выдал не официальную сборку библиотек для работы с периферией и ядром микроконтроллера. Сборка поддерживает 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 ] и потерять совместимость, но это плата за универсальность. Скачать проект можно следующим образом.
Так же можно проект клонировать прям из 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
Введение
Изначально задача ставилась довольно просто. Найти нужные файлы для сборки проекта. Взять уже когда-то сделанный проект под stm32f407 и обработать напильником. Однако во время выполнения столь простого плана, возникло желание сделать чуть более интересный проект, чем предполагалось вначале.
Подготовка
Для начала нужно будет скачать компилятор и отладчик для микроконтроллеров на базе ядер серии Cortex-M. Свежая версия лежит тут [ 1 ]. Также понадобится QtCreator, не ленивые могут собрать из исходников, ленивые могут взять здесь [ 2 ]. Ещё нам понадобится openocd для прошивки и отладки микроконтроллера. [ 3 ] GCC компилятора для Cortex-M на сайте ARM [ 9 ]
Устанавливаем указанное программное обеспечение, а также все зависимости по необходимости. После чего переходим к настройке среды.
Настройка QtCreator'a в картинках
Если не включена, включаем поддержку bare metal (Голое железо) в Справка -> О модулях
Добавляем компиляторы
g++
gcc
Добавляем отладчик gdb
Создаём профиль отладки openocd, тутнебольшой костыль. Путь к файлу конфигурации нужно указать абсолютный. Файл для каждого микроконтроллера разный, это вносит определённые неудобства.
Настройка 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)
jaha33
17.09.2019 21:23А можете чуть подробнее рассказать как на винду поставить openocd и прикрутить его к среде разработки?
P.S. За статью спасибо :)WicRus Автор
18.09.2019 16:44С openocd на windows по сути одна проблема, нужно добавить в переменную $PATH ту папку, где лежит бинарник openocd. К шаблону он уже прикручен, как прикрутить для отладки есть в картинках.
NordicEnergy
18.09.2019 16:15А как там с процессом отладки?
WicRus Автор
18.09.2019 16:50Отладка работает. Проверяли на MDR1986VE1T с помощью китайского клона j-link'а. Запускается по кнопке «Начать отладку». Обычный функционал, который предоставляет gdb, натянутый на QtCreator. Единственный нюанс с отладкой описан в статье, он некритичный, просто не очень удобный.
xztau
А прошиватор то какой?
staticmain
xztau
Да. Я про железку.
Amomum
st-link вроде не умеет шить 1986ВЕ1
WicRus Автор
Прошивали клоном j-link'а. Думаю st-link тоже подойдёт, нужно будет только файл подредактировать.