Осваиваем Olimexino-STM32

Почему Olimexino-STM32

Дело было так. Освоив до некоторой степени 8-битные контроллеры, начав с знакомство с ними со знакомства с Arduino, и построив первый прототип 8-битного синтезатора, идеей которого было изучение звуковых возможностей ШИМ как цифро-аналогового преобразователя, я приобрёл сперва плату Olimex SAM7-H64. Переходник ARM-JTAG приобретать я тогда не стал, поскольку микроконтроллеры AT91SAM7S привлекли меня возможностью программировать их через встроенный загрузчик bootloader SAM-BA, то есть примерно так же, как программируется микроконтроллер Arduino. Да и ответа на вопрос, это для 5-вольтовых ARM-ов кабель программирования или для 3 Вольт, я тогда не смог найти.

И всё очень хорошо у меня с этим получилось тогда, хотя рабочая версия программы SAM-BA для Linux появилась только через месяц примерно, следующая версия запускалась без специальных ухищрений, сразу микроконтроллер находила, и разве что заливку своего кода в память Flash я тогда не успел изучить. Стал читать AT91SAM7S-64 datasheet, да и зачитался -- библиотеку Simple Dumping Monitor решил написать, да вдруг взял и написал, сразу стало не до 32-битных микроконтроллеров мне, настолько библитека оказалась пользователями востребованной.

Скоро сказка делается, да нескоро освоение микроконтроллеров происходит. Так что пока я занимался вопросами отладки скетчей Arduino, на рынке появились супердешёвые платы STM32L-DISCOVERY. "Об этих платах придётся сочинять статьи для сайта Vanyamba uses Linux," -- сказал я самому себе, уже предвидя появление в будущем Simple Dumping Monitor для STM32. Надо заметить, что ST-LINK поддерживался тогда не столь хорошо как сейчас, так что я стал изучать микроконтроллеры STM32, приобретя платку Olimex STM32-H103, ну и уже к ней взял так называемый программатор-отладчик ARM-USB-OCD для отладки программ с помощью GDB-сервера OpenOCD.

Прочитав несколько подробных инструкций, я всё это запустил, и с несколько даже ностальгическим чувством вспомнил, каково оно -- отлаживать программу в режиме пошагового исполнения, просмотра значения переменных пользователя. В этом смысле отладка скетчей Arduino средствами символьного отладчика получилась инструментом в чём-то даже более user-friendly.

Тем временем вышел анонс STM32F4-DISCOVERY, и пока я ждал её появления на рынке, появилась в продаже Olimexino-STM32, которую я захотел бы иметь даже просто в своей коллекции клонов Arduino. Спрос на плату оказался настолько велик, что купить её мне удалось не сразу, и то, как сообщила дама-продавец в Интернет-магазине, тут же позвонил следующий желающий, и ему уже не досталось -- следующей поставки пришлось ждать.

Впоследствии меня даже спросил менеджер по России из Farnell, почему я просто не заказал эти обе платы (и F4-DISCOVERY, и OLIMEXINO) у них. Сегодня я именно так и поступил, узнав, что микроконтроллер ATmega645 в наличии доступен только заказом по каталогу Farnell.

Olimexino-STM32

А что же Olimexino-STM32. Это в первую очередь конечно же великолепный софт от LeafLabs Maple IDE. Установив эту программу, я тут же погонял плату с разными скетчами, любуясь 16-битным ШИМ светодиода, при вращении регулятора потенциометра (12-битный АЦП). Сказать, что я доволен покупкой -- это ничего не сказать, я доволен.

И тем не менее, начинать освоение микроконтроллеров я рекомендовал бы с 8-битного Arduino; 32 бита -- это примерно в 4 раза всё сложнее, очень много требуется просто знать и что-то даже требуется уметь делать самому. Например проблему глючной SAM-BA я решил для себя просто -- написал собственную, без GUI, зато работающую. =)

Приступаем к освоению

Первое, что бросается в глаза -- это краткость документации по Maple API, то есть без чтения документа RM0008 Reference Manual не обойтись. И хотя разработчики Arduino даташит к ATmega328p нас читать не заставляли, к счастью сей талмуд только выглядит большим -- у меня на его чтение ушла примерно неделя.

Второе, что подмечает опытный взгляд энтузиаста микроэлектроники -- большое количество асинхронных последовательных портов USART и весьма удобно программируемых таймеров. USART-ов целых 4 штуки, таймеров целых 8. С этой точки зрения плата сравнима по удобству освоения с платой Arduino Mega2560 c 6-ью таймерами и 4-мя USART.

Третье -- это несколько разочаровывающий момент при знакомстве с платой, SerialUSB работает не очень внятно, даже с утилитой Serial Monitor, доступной из меню Tools в Maple IDE. Зато очень хорошо работает USART1, если его подключить к терминальной программе screen через USB-to-RS232 переходник Arduino. Потребуется, правда, согласование TTL-уровней, поскольку Arduino плата пятивольтовая, а Olimexino-STM32 работает с TTL-уровнями +3.3 Вольт.

Благо сигнальных линий, требующих согласования всего две, и это несложно сделать с использованием всего 2 транзиторов типа N-MOSFET и 2 подтягивающих резисторов. Схема соединения получилась следующая:

На следующей диаграмме изображена схема подключения Olimexino-STM32 к компьютеру через USB-to-RS232 мост Arduino для ведения разработки программ для микроконтроллера Olimexino-STM32 с выводом через Serial1 (USART1) сообщений отладочного лога программы микроконтроллера.

В качестве тестового примера я использовал немножко переделанный скетч примера TimerInterrupts, подключив в качестве Debug-монитора программу screen:

screen /dev/ttyUSB0 57600

Скачать код тестового примера.

Автор: Андрей Шаройко <vanyamboe@gmail.com>