OLIMEXINO-STM32 и MAPLE

Во вторник добралась до меня плата OLIMEXINO-STM32 www.olimex.com/dev/olimexino-stm32.html
Она меня заинтересовала тем, что в описании Olimex она позиционируется как Arduino-совместимая плата, выполненная на контроллере STM32F103RBT6 со 128 килобайтами флэша и 20 килобайтами оперативной памяти на борту (этакая Arduino Mega 1280).
Плата действительно имеет формат Arduino – по размерам, основным разъемам и маркировке их контактов, светодиодам и кнопкам (на фотографии слева OLIMEXINO-STM32, справа – Arduino Duemilanove),

но дополнена RTC, контроллером шины CAN, картридером Micrо-SD, разъемами расширения и зарядным устройством Li-Ion аккумуляторов, подключаемых в качестве резервного источника питания к соответствующим контактам. Есть и разъем SWD — но малогабаритный, с шагом 1,27 мм – так, что придется делать переходник.


Группа LeafLabs leaflabs.com/, разрабатывающая и продвигающая проект, дала ему название Maple (в переводе Клен – дерево такое). Плата в проекте тоже имеет формат Arduino,

но они сделали функциональный аналог Arduino в чистом виде, без перечисленных выше дополнений (добавили только разъем расширения, на который вывели часть выводов микроконтроллера). Доступен также Maple-Mini – функциональный аналог Arduino-Nano.
В платах используется контроллер STM32F103RBT6, в котором прошит специальный бутлоадер github.com/leaflabs/maple-bootloader, позволяющий загружать программы (скетчи) из Maple-IDE по USB.
Maple-IDE в настоящее время доступна в виде beta-версии 0.0.11. Она сделана на основе Arduino-IDE и внешне и по функциям полностью повторяет ее. Используемый компилятор — arm-none-eabi-gcc. Программирование ведется на языке Wiring (можно на C / C++).
Maple имеет некоторые отличия от Arduino. Это связано, в основном, с различиями в архитектурах используемых контроллеров.
Например, в Maple нет типа данных word, тип int эквивалентен типу long – его длина 4 байта.
АЦП в контроллере STM32F103RBT6 двенадцатиразрядный, поэтому функция analogRead() возвращает двенадцатиразрядный результат – в диапазоне от 0 до 4095 (в Arduino – 10 разрядов – от 0 до 1023).
Аргументом функции analogWrite() (которая в Maple имеет второе имя pwmWrite()) должно быть 16-битное значение от 0 до 65535 (в Arduino – 8-битное – от 0 до255).
Функцией pinMode() выводам микроконтроллера могут быть назначены режимы работы не только INPUT и OUTPUT, но и
OUTPUT_OPEN_DRAIN – выход с открытым стоком,
INPUT_ANALOG – вход аналоговый,
INPUT_PULLUP – вход, подтянутый к плюсу питания,
INPUT_PULLDOWN – вход, подтянутый к минусу питания,
INPUT_FLOATING – вход без подтяжки,
PWM – выход аналоговый PWM,
PWM_OPEN_DRAIN – выход аналоговый PWM с открытым стоком.
Причем, перед использованием любых входов / выходов они обязательно должны быть явно описаны с помощью функции pinMode() (в Arduino для аналоговых входов и выходов этого не требовалось).
Есть несколько новых функций (togglePin(), toggleLED(), isButtonPressed(), waitForButtonPress()), несколько отсутствует (analogReference() – потому, что нет внутреннего ИОН, tone(), noTone(), shiftIn(), pulseIn() – эти, как я понимаю, отсутствуют временно). Часть функций работает несколько иначе, чем в Arduino.
В то же время иная, чем в Arduino архитектура контроллера, позволяет пользователю Maple использовать гораздо больше аппаратных ресурсов:
до 43 цифровых выходов (Arduino – до 20);
до 15 аналоговых PWM выходов с разрешением 16 бит(Arduino – до 6 при разрешении 8 бит);
до 15 аналоговых входов с разрешением 12 бит(Arduino – до 6 при разрешении до 10 бит);
до 4 таймеров;
Прерывания по любому выводу контроллера (Arduino – до 2);
Интерфейс SPI – до 2 (Arduino – 1);
Интерфейс I2C – до 2 (Arduino – 1);
Интерфейс USART – до 3 (Arduino – 1, и он используется для связи с компьютером);
В описании я не увидел аналоговых выходов, использующих DAC. Скорее всего, их не используют в проекте.
Библиотек для проекта Maple, в настоящее время, только три.
Из них LiquidCrystal полностью совместима с Arduino, Servo – совместима частично, а Wire (I2C) – пока в начальном состоянии и обеспечивает работу только программного интерфейса. Аппаратный интерфейс будет реализован в версии 0.1.0.
Остальные библиотеки (Ethernet и прочие) планируются, но когда будут – неизвестно.
На сайте отмечено, что работа платы проверена с Ethernet shield, WiFi Shield, MIDI shield, но библиотек для работы с ними пока нет, но будут.
Вообще, описание системы leaflabs.com/docs/ достаточно подробное и понятное и желающие могут с ним ознакомиться самостоятельно в полном объёме.

Как и Arduino-IDE, Maple-IDE устанавливается распаковкой архива в любое место на компьютере. Структура папок аналогична структуре папок Arduino.
При подключении платы OLIMEXINO-STM32 через разъем mini-USB, компьютер потребует указать путь к драйверу, который расположен в папке maple-ide\drivers\mapleDrv\.
После установки драйвера, в диспетчере устройств должен появиться порт Maple R3 (COMx). Этот порт указывается в Maple-IDE в меню Tools – Serial Port.
Тип платы в меню Tools – Board выбирается LeafLabs Maple rev3 to FLASH или LeafLabs Maple rev3 to RAM в зависимости от того, куда нужно загрузить скетч. Если во Flash- память, то первый, если в RAM – то второй. Отличия в том, что при выключении питания программа в RAM сотрется, а во Flash нет. Но запись в RAM происходит быстрее (так написано в описании, я не проверял) и не влияет на количество перепрограммирований Flash-памяти.

Работу платы OLIMEXINO-STM32 я пока проверил на примерах из IDE. Все компилируется и работает так же, как и в Arduino.
Также решил померить скорость работы по тесту Frolls we.easyelectronics.ru/Frolls/stm32vl-discovery-dryganie-nogoy-ispolzuya-standartnye-biblioteki.html и сравнить со скоростью работы Arduino.
За основу взял из примеров простейшие скетчи Blink, убрав задержку Delay(1000).

Blink

Turns on the built-in LED on for one second, then off for one second,
repeatedly.

Ported to Maple from the Arduino example 27 May 2011
By Marti Bolivar
*/

void setup() {
// Set up the built-in LED pin as an output:
pinMode(BOARD_LED_PIN, OUTPUT);
}

void loop() {
toggleLED(); // Turn the LED from off to on, or on to off
// delay(1000); // Wait for 1 second (1000 milliseconds)
}


Частота получилась:
для Maple – 815 кГц;
для Arduino – 120 кГц.
Результат достаточно близок к результату, полученному Frolls для случая с тактовой частотой 72 МГц и компиляции без оптимизации. Причем Maple выполняет такую программу почти в 7 раз быстрее, чем Arduino.

После этого захотелось проверить влияние математики.
Добавил в цикл суммирование целых чисел.

Blink

Turns on the built-in LED on for one second, then off for one second,
repeatedly.

Ported to Maple from the Arduino example 27 May 2011
By Marti Bolivar
*/
int A = 37;
int B = 12756;
int C;

void setup() {
// Set up the built-in LED pin as an output:
pinMode(BOARD_LED_PIN, OUTPUT);
}

void loop() {
toggleLED(); // Turn the LED from off to on, or on to off
C = A + B;
// delay(1000); // Wait for 1 second (1000 milliseconds)
}

Получил почти двукратное снижение частоты:
для Maple – 460 кГц;
для Arduino – 99 кГц.
Maple быстрее Arduino в 4,6 раза.

Изменил на суммирование чисел с плавающей точкой.

Blink

Turns on the built-in LED on for one second, then off for one second,
repeatedly.

Ported to Maple from the Arduino example 27 May 2011
By Marti Bolivar
*/
float A = 37;
float B = 12756;
float C;

void setup() {
// Set up the built-in LED pin as an output:
pinMode(BOARD_LED_PIN, OUTPUT);
}

void loop() {
toggleLED(); // Turn the LED from off to on, or on to off
C = A + B;
// delay(1000); // Wait for 1 second (1000 milliseconds)
}

Еще двукратное снижение частоты:
для Maple – 222 кГц;
для Arduino – 41,4 кГц.
Maple быстрее Arduino в 5,3 раза.

Таким образом, Maple целесообразно использовать тем, кому не хватает скорости или других аппаратных ресурсов Arduino.

Низкая скорость выполнения простейшей программы заставляет предположить, что компилятор при компиляции генерирует код с большим количеством лишних команд. На это указывает и тот факт, что в ассемблерном виде такая программа состоит всего из нескольких команд и при тактовой частоте контроллера 72 МГц частота переключения выводов должна быть выше 10 МГц.

И Arduino, и Maple предлагают пользователям простейшие системы проектирования с предустановленными параметрами компиляции и уже выполненной инициализацией основных узлов микроконтроллеров, позволяющей не разбираться во внутреннем устройстве и взаимодействии их узлов.
Преимущество — простота работы. Цена, которую приходится за это платить – скорость выполнения программы. И для ее увеличения может быть применен Maple.
А плата OLIMEXINO-STM32 добавит недостающие аппаратные ресурсы.
  • 0
  • 09 сентября 2011, 01:02
  • mzw

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

RSS свернуть / развернуть
Они на программном уровне 100% совместимы по либам получаются?
0
Увы, пока не совсем. Но, может быть, допилят.
0
  • avatar
  • mzw
  • 09 сентября 2011, 01:14
Не допилят, к сожалению STM32 поддерживает не все типы переменных, но это лечится достаточно легко, просто вручную переписываем другие типы переменных подбирая из того что более подходит
0
Интересная вещь. А где заказывали? С Олимекса? Сколько взяли за доставку?
0
  • avatar
  • ACE
  • 09 сентября 2011, 01:37
Из Терраэлектроники. Но там дорого. Из Olimex пока пробовал.
0
  • avatar
  • mzw
  • 09 сентября 2011, 01:48
На ebay есть.
0
И Arduino, и Maple предлагают пользователям простейшие системы проектирования с предустановленными параметрами компиляции и уже выполненной инициализацией основных узлов микроконтроллеров, позволяющей не разбираться во внутреннем устройстве и взаимодействии их узлов.

Чую, в нашем веке гуманитариям тоже хочется мигать светодиодами, и, как ни прискорбно, инженеры идут им навстречу. :D
0
  • avatar
  • _YS_
  • 09 сентября 2011, 17:26
Это правильно.
Посмотри ветку о Спектруме we.easyelectronics.ru/DIHALT/a-nikto-ne-hochet-spayat-svoy-spektrum.html
Это тоже не для профессионалов.
Просто людям интересно.
0
  • avatar
  • mzw
  • 09 сентября 2011, 17:35
Как говорил тов. Ленин, «Лучше меньше, да лучше». Кому интересно — пусть берутся и серьезно изучают. А плодить мигающих казуалов я не вижу никакого смысла.
0
Надеюсь, ты не станешь требовать, чтобы все интересующиеся автомобилями серьезно изучали их устройство и принципы работы их узлов?
И так в любой другой сфере человеческого бытия?
Все люди разные. Один лезет вглубь, другой скользит по поверхности. Будешь осуждать?
«… кто из вас без греха, первый брось в нее камень»
0
  • avatar
  • mzw
  • 09 сентября 2011, 17:50
Все зависит от степени интереса. Просто я не люблю, когда микроскопом забивают гвозди.
0
А это не «микроскоп».
Это нормальная система программирования.
Тысячи программистов пишут программы, почти ничего не зная о внутренностях устройств, для которых они это делают.
Персональные компьютеры, планшеты, программируемые логические контроллеры и прочее и прочее…
Когда ты общаешься через API, тебе нет дела до того, что внутри.
Все и так будет нормально работать.
У каждого свои интересы и своя степень влезания в проблему.
А если ты любитель аквариумных рыбок и тебе нужен просто терморегулятор, то незачем изучать инициализацию таймеров.
0
  • avatar
  • mzw
  • 09 сентября 2011, 18:02
А если ты любитель аквариумных рыбок и тебе нужен просто терморегулятор, то

… его проще купить. Только не говорите мне, что китайцы их не делают. xD

Делать терморегулятор на STM32F103 — тяжкое извращение. Он на ОУ паяется за десять минут.
0
А вот это мое дело…
0
  • avatar
  • mzw
  • 09 сентября 2011, 18:07
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.