Попытка подружиться с 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 — TX
    TX1 — RX
    GND — GND
    Vin — VCC

    Хитрость одна — как заставить STM32F103 запускаться в режиме загрузчика UART. Процесс неплохо описан на сайте Leaf Labs в разделе «Что делать, если вы запороли USB загрузчик». Подключаем ножку BOOT1 к земле, нажимаем RESET и вторую кнопку, отпускаем RESET, отпускаем вторую кнопку. Привет, загрузчик!

    Прожигаем!

    Осталось запустить Flash Loader Demonstrator и «скормить» ему bin-файл, болтающийся после компиляции где-то в недрах проекта. Любопытно, как называются операции в этой утилите. Download — это В чип. А Upload — это ИЗ чипа. Мое восприятие бунтует, но, может быть, тут так принято.

    Итого

    Нельзя просто так взять и поморгать светодиодом на STM32. Сделать это двумя щелчками мыши (как в Arduino) или парой команд avr-gcc и avrdude тут не выйдет. Попытка (Maple IDE) была, но сдулась. Поэтому, придется реально садиться и разбираться, как тут чего работает.

    UPD. Добавил опрос.
    Нужна ли небольшая статья по превращению Maple Mini в отладчик ST-Link?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 25
    • 0
      А виртуалки для чего придумали? Можно же туда этот USB пробросить и все драйвера нужные поставить.
      • 0
        Мне проще было взять ноут и попробовать под макосью. В любом случае, затея бесперспективная, оно того не стоит.
        • 0
          Обнаружил итересную особенность: драйвер от CP2102 под виртуалкой крэшит всю систему на Win 7, 8, XP. Правда выход имеется — мэппинг COM-порта.
          • 0
            Не, тут имелось в виду пробросить USB, чтобы драйвер Maple родной поставить, для USB-загрузчика.
          • 0
            Под Win8 с виртуалкой проблемы. При включенном Hyper-V не работает VirtualBox (на прошлогодней вресии какой-то тестил), а Hyper-V не поддерживает такой же проброс USB как у VBox.
          • +2
            «Поэтому, придется реально садиться и разбираться, как тут чего работает» — и я думаю это правильно. А то, понимаешь, попривыкали, что все само собой работает и напрягаться не надо.
            • +4
              «Нельзя просто так взять и поморгать светодиодом на STM32».
              True. True.
              • 0
                Если нужна хорошая среда, то
                Visual Studio + плагин VisualGDB (но платный, но есть 30 дней триала и при желании довольно легко ломается). Все toolchain сам подтягивает и настраивает.
                • +1
                  Я стараюсь кроссплатформенное использовать. А то меня порой заносит, то на макось, то на пингвинов.
                  • +1
                    Кокос только для венды ;)
                    • 0
                      Да, это может быть проблемой.
                      • 0
                        Я вот в нем поработал и хочу уже свести общение с ним к минимуму. Давеча фриртос втыкал в проект, созданный в кокосе. Геморрой и попаболь как в этой студии реализован импорт папки с сорцами. И в итоге ты по структуре солюшена в панели кокоса не понимаешь откуда тот или иной файл берется. Путями кокос только виртуальными рулит. Нужно закинуть папку новую в нужное место, а потом кидать эту папку из проводника в панель кокоса. А выставленная опция «Копировать файле при дропе в проект» вроде не работает вовсе.
                        При каждом тыке на примеры с кодом у компонентов лезет в интернет будто бы через каменновечный мопед с сообщением «Refreshing examples», а где отключить это поведение я не имею представления. Обновление примеров делается синхронно — весь интерфейс замерзает на пол-минуты как минимум.

                        В общем, найду время, разверну хотя бы на эклипсе чистом среду и буду пользовать кокос только ради добавления компонентов.
                • +1
                  Download — это В чип. А Upload — это ИЗ чипа.

                  Собственно это норма в системах с трехзвенной структурой, когда нет сервера и клиента. А есть сервер приложений, база данных и клиент. Вот в таком виде сервер находится посередине между клиентом и базой данных, все приложения выплняются ИМЕННО НА НЁМ, клиент для такого приложения является внешним, и когда надо отправить данные клиенту на терминал эта операция для приложения будет естественно Upload.
                  Чтобы не было бунта, просто представьте что действия происходят как бы изнутри контроллера. т.е. при программировании КОНТРОЛЛЕР забирает прошивку себе.
                  • 0
                    Понял, спасибо. Что-то подобное и предполагал.
                    • 0
                      Только что мысль в голову пришла. Ведь программатор для STM32 это вовсе не программатор в обычном понимании, это ведь фактически JTAG которым мы подключаемся и управляем контроллером напрямую заставляя ЕГО выполнять нужные нам действия — например получить прошивку извне.
                      • 0
                        Так, а в случае UART Bootloader'а, получается, мы говорим этому бутлодеру, чтобы он забрал прошивку снаружи?
                        • 0
                          Чтобы единобразие было в терминологии.
                    • 0
                      Это норма для контроллеров. Во всяком случае, у всех промышленных контроллеров, с которыми я работал, именно так:
                      Download — это В чип. А Upload — это ИЗ чипа.
                    • +1
                      Я на макоси прям сейчас ее мучаю вот с Нового Года в аккурат. Именно Maple mini и именно китайскую.
                      Но… в Xcode. Проект embedXcode+ есть такой, дает шаблонно и с Ардуинами и с mbed платами работать.

                      Осталось, пожалуй, еще настроить для проектов на rpi и будет счастие )
                      • +1
                        Ну и для полноты картины добавлю скрин, как это все безобразие выглядит в IDE.
                        • 0
                          Интересно. Но для меня, пожалуй, пока слишком брутально.
                      • 0
                        Полдня проковырялся, но справился. Нужна ли небольшая статья по превращению Maple Mini в отладчик ST-Link? Опрос добавил в материал.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.