Большинство разработчиков, интересующихся программированием микроконтроллеров, сталкивались с фреймворком arm mbed. Он предназначен для разработки встраиваемых программ для работы с “интернетом вещей” IoT(internet of things) под различные аппаратные микроконтроллерные платформы.

Мое первоначальное знакомство с фреймворком началось и закончилось регистрацией на сайте и созданием учетной записи для использования онлайн-компилятора. Открыв страницу поддержки отладочных плат , я обнаружил, что в наличии у меня нет ни одной из поддерживаемых mbed-ом плат.

Особенно странным показалось отсутсвие в списке поддерживаемых в mbed плат такой распространенной платы как STM32F4Discovery.
Думаю, что многих постигло то-же разочарование. Но не стоит судить о фреймворке arm mbed по одежке. При более глубоком ознакомлении выяснилось, что кроме работы с онлайн-компилятором arm mbed поддерживает работу в “offline” режиме. Поддержка платы STM32F4Discovery там также имеется.

Данный режим называется mbed command line interface(mbed-cli). Разработчики фреймворка создали набор утилити на языке Python для автоматизации выполнения большинства действий, таких как разрузка библиотек, сборка проекта и т.д
Но это совсем не означает, что вам придется работать из командной строки. Инстументарий mbed-cli поддерживает экспорт проектов практически во все среды разработки для микроконтроллеров.

Я постараюсь не дублировать документацию arm mbed, поэтому установить mbed-cli вам необходимо самостоятельно , прочитав краткое руководство по установке вот здесь Offline — Arm Mbed CLI.

В этом же руководстве указано как можно загрузить с помощью инструментов mbed-cli новый проект, собрать его или экпортировать в свою среду разработки.
В качестве примера используется mbed-os-example-blinky , мерцание светодиодом с помощью фреймворка mbed и операционной системы реального времени mbed-os.
На самом деле mbed-os является интерфейсной оберткой поверх реальной RTOS Keil RTX.
Новые версии mbed-os используют интерефейс CMSIS_OS2.
Загружаем пример mbed-os-example-blinky и экспортируем его в среду разработки eclipse-cdt :

Список всех поддерживаемых для экспорта сред разработки можно посмотреть , если ввести неправильное название среды разработки. Аналогичным образом можно поступить для выяснения названий поддерживаемых плат.

Если все-таки необходимой вам платы нет в списке поддерживаемых, то ее можно добавить самостояттельно. Важным моментом в данной ситуации является поддержка целевого микроконтроллера в mbed. Если ваш микрконтроллер не поддерживается в mbed, то придется проделать очень большую работу для добавления новой платы.
Список поддерживаемых микроконтроллеров можно просмотреть прямо в структуре директорий mbed .
Для этого открываем mbed-os/targets и выбираем производителя микроконтроллера.
Платформенно-зависимый код для платы STM32F4Discovery находится в mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG.

По этому пути вы найдете четыре файла. Именно эти файлы и отвечают за поддержку целевой платы в фреймворке mbed.
Как несложно догадаться файл system_clock.c отвечает за начальную инициализацию системы тактирования микроконтроллера.
В файле PinNames.h находится опредение названий выводов микроконтроллера, которые можно переопределять по собственному желанию.
В файле PeriphiralPins.c необходимо выполнить инициализацию по-умолчанию каждого из описанных выводов микроконтроллера. Эти параметры будут использоваться при начальной инициадлизации микроконтроллера. Перед определением параметра указывается MBED_WEAK , что позволяет переопределить инициализацию нужного вывода по-умолчанию в любом-другом месте программы.
Структура PinMap достаточно простая :

PinName мы определили в файле PinNames.h , значение параметра peripheral находится в файле PeripheralNames.h и представляем из себя базовый адрес периферийного модуля , приведенный к типу int. Последний параметр function представляет собой строку инициализации соответсвующего вывода, включающую основные настройки GPIO.
Инициализация производится функцией pinmap_pinout().
Как вы уже наверное заметили вся низкоуровневая инициализация выполняется на языке C.
Весь аппаратно-зависимый слой предоставляется производителем микроконтроллера. В нашем случае STM предоставляет свою библиотеку HAL , поверх которой написан еще один интерфейсный слой на языке C.
Слудeет заметить, что производитель(STMicroelecronics) предоставляет для mbed поддержку далеко не всех аппартных модулей своих микрокотроллеров. К примеру на момент написания статьи поддержка модуля DMA для микрокотроллеров STM32 в mbed не реализована. Та же ситуация с модулем QUAD SPI.

Для добавления собственной платы с оригинальным названием на основе микроконтроллера STM32F407VG необходимо создать каталог на том же уровне, что и TARGET_DISCO_F407VG с названием TARGET_[boardname]. Далее можно скопировать и переделать вышеописанные четыре файла из директории TARGET_DISCO_F407VG либо создать их самостоятельно.
Вопросы добавления официальной поддержки вашей новой платы в фреймворке arm mbed в данной публикации я не затрагиваю, эту информацию вы можете получить самостоятельно на официальном сайте фремворка.
Для того, чтобы утилиты mbed-cli “видели” вашу плату при выполнении компиляции или экспортировании проекта необходимо также добавить описание новой платы в JSON- файл mbed-os/targets/targets.json.
Для выполнения экспорта проекта под новую плату в нужную среду разработки придется также добавить информацию о плате или микроконтроллере для соответсвующей среды разработки.
Соответсвующие файлы необходимо искать в директории mbed-os/tools/export.

Надеюсь, что данная статья была кому-то полезна. Желаю успехов в изучении фреймворка arm mbed !

Viewed 219997 times by 22139 viewers

Last modified: 20/05/2019

Author