Попытка подружиться с STM32
В прошлый раз я издевался над микроконтроллерами ATtiny 85, сопрягая бедные восьминогие чипы с Arduino IDE. А потом мне захотелось посмотреть, что же за чудо такое — STM32, поклонники которых смотрят на программистов AVR (не говоря уж об ардуинщиках) с некоторым неодобрением. В процессе беглого гугления выяснилось, что STM32 «для идиотов» существует — есть проект Leaf Maple, в рамках которого — две платы на STM32F103 и среда разработки, являющая собой клон Arduino IDE.
Решающим фактором стала стоимость. Китайская версия Leaf Maple Mini продается за 4$ — это немногим дороже Arduino Nano. Заказав три штуки, я принялся ждать.
Пожалуй, со ставкой на Maple я немного поторопился — проект скорее мертв, чем жив. IDE не развивается, драйверов без бубна под Windows 8 нет, библиотеки в зачаточном состоянии, полное уныние и запустение. Ради интереса я поморгал светодиодом, запустив Maple IDE под OS X (заработало из коробки), а затем стал думать, с какой стороны подходить к плате для дальнейшего изучения.
Для начала, выяснил я вот что. В микроконтроллер STM32F103CBT6 (названия у ST, замечу, суровые) на плате Leaf Maple Mini зашит загрузчик, работающий через USB с Maple IDE. Находится он во флеш-памяти. А как программировать «голый» STM32? По-хорошему, надо использовать ST-Link, ведь он позволяет не только «заливать» прошивку, но и производить отладку. А без этой железяки что делать? Использовать «системный» загрузчик STM32, работающий по UART. Мини-плата на чипе CP2102 в закромах имеется, можно начинать чудить.
IDE, которые используются для программирования STM32, вгоняют меня в тоску. Дело в том, что я программистом не являюсь, и множественные окошки со вкладками и кучей страшных букв вызывают потаенное нежелание во всем этом копаться. Но, похоже, надо. Наименее замороченной из троицы (Keil, IAR, Coocox) мне показалась последняя.
Итак, последовательность действий. Ставим Coocox, к нему — компилятор GCC для ARM. Пишем шедевральный проект — Blink. Затем на монтажной «доске» собираем конструкцию из Maple Mini и CP2102. Выясняем, что для заливки прошивки нужно что-то еще, ибо «кокос» хочет ST-Link. Напрямую скомпилированный код легко прошивается по UART с помощью утилиты от ST — Flash Loader Demonstrator. Теперь подробнее.
Кокос с граблями
Без граблей у меня никак. Первая же «засада» — текущая версия IDE (2.0) — это нечто странное, внезапно не поддерживающее STM32F1xx. Удаляем, ставим версию 1.7.7, теперь можем создать проект. К проекту подключаем GPIO, берем из этого модуля пример с нужным нам Blink и немного его переделываем, чтобы задействовать светодиод Maple Mini (PORT B PIN 1). Инициализация портов тут — целая песня (понятная, но более сложная, чем на AVR). То есть, нужно не просто сказать, мол, этот порт — выход. Этот порт — его надо включить и тактировать, и будет он выходом с бантиком и плюшечкой, а не с закорючкой и гвоздиком…
Сборка железа
Тут все просто — берем модуль на CP2102 и соединяем с STM32.
STM — 2102
RX1 — TXTX1 — RXGND — GNDVin — VCC
Хитрость одна — как заставить STM32F103 запускаться в режиме загрузчика UART. Процесс неплохо описан на сайте Leaf Labs в разделе «Что делать, если вы запороли USB загрузчик». Подключаем ножку BOOT1 к земле, нажимаем RESET и вторую кнопку, отпускаем RESET, отпускаем вторую кнопку. Привет, загрузчик!
Прожигаем!
Осталось запустить Flash Loader Demonstrator и «скормить» ему bin-файл, болтающийся после компиляции где-то в недрах проекта. Любопытно, как называются операции в этой утилите. Download — это В чип. А Upload — это ИЗ чипа. Мое восприятие бунтует, но, может быть, тут так принято.
Итого
Нельзя просто так взять и поморгать светодиодом на STM32. Сделать это двумя щелчками мыши (как в Arduino) или парой команд avr-gcc и avrdude тут не выйдет. Попытка (Maple IDE) была, но сдулась. Поэтому, придется реально садиться и разбираться, как тут чего работает.