Все мои Ардуинки: часть вторая, ATtiny и STM
Продолжаю перебирать все мои Ардуинки и делиться опытом работы с ними.В прошлый раз я выдал базу про платы, начавшие свою жизнь как официальные продукты Arduino. Но время показывает, что истинная сила платформы скрывалась не в конкретных Uno и Nano, а в открытости и расширяемости. В этой и следующей части речь пойдёт уже о сторонних решениях, разработанных и поддержанных в Arduino IDE творческими усилиями множества энтузиастов.Сегодня это будут довольно редкоземельные элементы — платы, не так часто встречающиеся в самоделках. Но возможно, это именно то, что вы искали для решения какой-то особенно нестандартной задачи. А я расскажу о некоторых связанных с ними граблях, по которым уже сплясал лично, чтобы вам не пришлось повторять этого дома.
Выбор платы в Arduino IDEВнутри Arduino IDE предусмотрен так называемый Менеджер плат, хотя можно сказать, что это скорее менеджер платформ. Поддержка новых плат добавляется из пакетов, скачиваемых из Интернета. Часть из них встроена в IDE из коробки (в виде предустановленных ссылок в настройках), а также можно добавлять ссылки на сторонние пакеты. В одном пакете может быть поддержано целое семейство плат на каком-либо микроконтроллере. В нём содержатся не только все необходимые инструменты, одинаково скрытые от пользователя за кнопкой компиляции и загрузки скетча, но и набор примеров использования плат из пакета.Это открыло возможность добавления в IDE не только официально поддерживаемых компанией Arduino плат, но и решения сторонних разработчиков, с другими микроконтроллерными архитектурами и своими компиляторами. Для добавления поддержки разработчику платы достаточно подготовить соответствующий пакет и выложить его в Интернет, а пользователю нужно только добавить ссылку на него в настройки IDE и установить пакет из Менеджера плат.После установки пакета нужная плата выбирается из списка, после чего в IDE появляются соответствующие настройки, которые могут отличаться у разных плат — опции загрузчика, выбор способа и скорости загрузки, включение и выключение средств отладки, варианты распределения памяти, скорости работы и так далее.
Табличка из Интернета со сравнением ATmega и ATtiny и указанием цены чипов (2013 год)В своё время, в начале 2000-х годов, существование двух разных схожих линеек микроконтроллеров — ATmega и ATtiny — имело вполне определённый смысл. Их заметно меньший объём памяти, более простая периферия, и особенно корпуса с малым количеством выводов обеспечивали заметную разницу в стоимости, и в устройствах с большими тиражами это могло сыграть свою роль.Если честно, ума не приложу, зачем это может быть нужно сейчас, спустя 20 лет, когда те и другие микроконтроллеры устарели и стоят плюс-минус одинаково, а им на смену пришли более мощные и при этом менее дорогие альтернативы. И тем не менее, платы на ATtiny существуют и с ними можно работать в экосистеме Arduino.Из-за меньших тиражей платы на ATtiny в рознице стоят ненамного дешевле, сколько самая популярная Nano, но заметно уступают ей в возможностях. К тому же, есть более дешёвые совместимые аналоги Nano и даже Pro Mini на китайских чипах-клонах. Поэтому повод применять их в проектах найти не так-то просто. Вероятно, эти платы можно использовать для отладки проектов, которые впоследствии тиражируются уже на голом ATtiny внутри устройства, что действительно всё ещё может снизить себестоимость.
Разные и одинаковые платки на микроконтроллерах ATtinyЗагрузка скетчей из Arduino IDE в такие платы осуществляется по-человечески, через разъём USB. Но технически это реализовано иначе, чем в оригинальных Arduino: без микросхемы USB-UART моста, с помощью загрузчика под названием Micronucleus, работающего на самом ATtiny. Для коммуникации с ПК в нём используется программная реализация V-USB, которая занимает довольно много места, и для пользовательского кода остаётся около 6 килобайт Flash-памяти. Зато ОЗУ почти полностью свободно.За счёт реализации V-USB платы также способны работать в режиме USB HID устройства, на них теоретически можно сделать низкоскоростные USB-устройства. Например, джойстик или клавиатуру — если, конечно, для этих целей хватит линий ввода-вывода.Приобретённые платы могут быть с уже прошитым Micronucleus правильной версии, но могут быть и с такой, которую не понимает загрузчик в Arduino IDE, и тогда надо предпринимать ряд действий, чтобы прошить загрузчик, и это будет целая отдельная история. К счастью, мне такие платы не попадались, все они сразу работали из коробки.Загрузка скетча в платы с Micronucleus происходит несколько иначе, чем обычно. Нужно отключить плату от компьютера и нажать кнопку загрузки в IDE. Когда код скомпилируется, появится предложение подключить плату к USB в течение 60 секунд. После подключения загрузка происходит автоматически, и надо заметить, практически моментально, чего не скажешь о многих других платах.Есть два основных вида плат на ATtiny, и у меня в коллекции есть по одному представителю каждого из них.
Плата MH-ET Live Tiny88Первый — плата MH-ET Live Tiny88 на микроконтроллере ATtiny88. По размеру она как Nano, имеет довольно много пинов. Контроллер пятивольтовый, 16 мегагерц, 8 килобайт Flash-памяти, 512 байт ОЗУ, 64 байта EEPROM. Из заметных отличий в периферии — отсутствует USART, то есть нет вывода в Serial.
Микроконтроллер ATtiny88 на плате Tiny88В сети есть подробные инструкции, как настроить работу с подобными платами в Arduino IDE, например, у Алекса Гайвера. Я же кратко резюмирую основные моменты. Важно: ссылки в инструкциях устаревают и их приходится искать через поисковик по названию плат, здесь я привожу актуальные на момент написания статьи.
Установленный пакет для работы с платами MH-ET LiveДля начала, конечно, необходимо установить драйвер, без него ничего не получится. Далее добавляем в настройках Arduino IDE в источники для Менеджера плат ссылку на пакет. После этого в Менеджере плат выбираем единственную плату во вновь появившемся разделе MH-ET Live Boards. После установки пакета также появляются примеры работы с платой в разделе примеров MHEtLive.
Платы Digispark двух видов на ATtiny85Построены эти платы на пятивольтовом микроконтроллере ATtiny85. Основные характеристики совпадают с ATtiny88 — 16 мегагерц, 8 килобайт Flash, 512 байт ОЗУ. Отличается объём EEPROM, которого у этой версии значительно больше — 512 байт, а также некоторая периферия.
Микроконтроллер ATtiny 85 на плате DigisparkПожалуй, главной их особенностью является очень малое количество пинов: всего шесть, и только два из них не имеют каких-либо ограничений по использованию. Поэтому подойдут они для очень ограниченного набора проектов. Но из этого же вытекает и главное преимущество, малогабаритность: это одни из самых компактных Arudino-совместимых плат.
Установленный пакет для работы с платами на ATtiny, включая DigisparkВерсию платы с контактными площадками USB прямо на плате довольно удобно использовать с USB-хабом, но весьма неудобно заливать скетч, если плата уже вмонтирована в конструкцию. Этот момент нужно продумывать заранее.
Плата stm8blueУ меня есть парочка одинаковых плат, так называемых stm8blue. Другие платы тоже существуют, в том числе вариация в форм-факторе Arduino Uno, но в дикой природе они мне не встречались. В целом это не очень частый зверь в мире Arduino, и судя по Интернету, энтузиасты их не очень жалуют, вероятно, из-за довольно ограниченной и сырой поддержки. Возможно, поэтому я не встречал их применений в реальных проектах.Характеристики используемого в stm8blue микроконтроллера STM8S103F3P6 находятся примерно посередине между ATmega и ATtiny: 16 мегагерц, 8 килобайт Flash-памяти, 1 килобайт ОЗУ, 640 байт EEPROM (в три раза более живучего, чем у AVR). Периферия более-менее похожа, в ней есть свои интересные моменты. Например, 96-битный UID для всех чипов.
Микроконтроллер STM8S103F3P6 на плате stm8blueРаньше я заострял внимание на пятивольтовости контроллеров, и для этого была причина. Вот мы и добрались до неё: с STM8 мы вступаем на трёхвольтовую территорию. STM8S поддерживает напряжения питания от 2.95 до 5.5 вольт, и если он питается от пяти вольт, его логические уровни также будут пятивольтовыми. Но на плате стоит 3.3-вольтовый стабилизатор, и при питании через него уровни должны быть трёхвольтовыми. Я уделю этому вопросу отдельное внимание в следующей части статьи, в которой все контроллеры будут уже исключительно трёхвольтовыми. А пока нужно отметить, что с переходом на 3.3 вольта начинаются проблемы совместимости с существующими модулями расширения.С моей колокольни мне кажется, что подобные платы и их поддержка в Arduino появились слишком поздно и просто не нашли свою нишу. Возможно, это неплохой малобюджетный стенд для освоения архитектуры STM8, но вряд ли я буду часто использовать их в собственных проектах, так как и возможности довольно скромные, и по цене не сильно дешевле, и с готовыми библиотеками дела обстоят хуже, да и заливать скетчи в них довольно неудобно.Пожалуй, главным сомнительным решением, связанным с этими платами, является расположенный на них разъём Micro USB. Он наводит на мысль о том, что скетчи загружаются так же легко, как в Arduino Nano, а может быть даже доступна коммуникация по USB, как у плат на ATtiny. Но всё это обман и морок: разъём предназначен исключительно для питания, а линии данных на нём даже не разведены.
Парочка китайских ST-Link v2 и USB-UART адаптеровПрограммируется stm8blue подобно Arduino Pro Mini, внешним адаптером. Но и тут всё не так просто: это делается только устройством ST-Link, предназначенным специально для контроллеров STM8 и STM32. Минимальная китайская копия ST-Link v2 сейчас стоит копейки и продаётся на всех маркетплейсах, но в своё время, когда STM8 только пошли в массы, программатор был значительно дороже и не так доступен, и это было не очень приятным препятствием на пути к освоению этой архитектуры.
Подключение stm8blue к ST-Link v2 для загрузки скетчаДля начала работы с ST-Link нужно установить его бесплатный драйвер, который больше нельзя скачать с официального сайта, потому что санкции. Но разумеется, Яндекс (Гугл) — найдётся всё. Как и в случае с USB-UART, полностью готовых кабелей в комплекте нет, но есть провод с отдельными пинами, которыми нужно соединить соответствующие выводы платы и программатора.Внимание: в разных версиях порядок пинов на программаторе может отличаться от оригинального и идти не по порядку! Во избежание ошибок и для удобства использования лучше спаять провод с нормальными целиковыми разъёмами, подходящими к имеющимся платам и программатору.
Схема подключения ST-Link к плате stm8blue для загрузки скетчейПоддержка STM8S в Arduino IDE называется Sduino. Как обычно, добавляем в настройках ссылку на пакет для Менеджера плат. Далее в Менеджере плат устанавливаем пакет Sduino.
Установленный пакет Sduino для работы с платами на STM8Загрузка скетча выполняется без выбора COM-порта (в настройках он есть, можно выбрать любой), простым нажатием кнопки загрузки при подключённой через ST-Link к ПК плате. По крайней мере, в теории. На практике при первых попытках у меня возникла проблема, выглядящая как сообщение «1829 bytes at 0x8000… Tries exceeded», и я потратил немало времени, прежде чем выяснил, что нужно сделать две не самые очевидные вещи.Во-первых, при загрузке нужно питать плату от внешнего источника, через тот же Micro USB разъём. Вообще-то, это нормальная практика для голых микроконтроллеров, но в данном случае есть вводящие в заблуждение моменты: среди пинов программатора есть питание, а при подключении на плате горит синий светодиод, создавая впечатление наличия питания. Когда всё подключено правильно, с внешним питанием, при прошивке будет помигивать ещё и красный светодиод.
Экран байта конфигурации STM8 в ST Visual ProgrammerВо-вторых, плата почему-то приходит с защищённым от записи микроконтроллером, и это мешает Arduino IDE залить скетч. Нужно снять защиту вручную через программу ST Visual Programmer, перезаписав байт конфигурации. В Интернете пишут, что можно также нажать прошивку загрузчика из IDE, и это тоже снимет защиту, но я не пробовал, потому что не ищу лёгких путей.При использовании дешёвой копии ST-Link в системе не будет виртуального COM-порта и вывода в консоль. Чтобы он появился, нужно использовать оригинальный полноценный программатор или приспособить внешний USB-UART, но я этим не занимался за отсутствием такой необходимости.
Парочка версий Blue Pill из моей коллекцииМне попадалась платы Blue Pill только одного форм-фактора, в двух вариациях. Обе представляют собой версию Arduino Nano-подобной платы, чуть покрупнее, с немного разной разводкой, но одинаковым функционалом. Существуют и другие платы, но их я в продаже не встречал.
Версия, приобретённая на Али довольно давно: вместо джамперов кнопки, STM32F103CBT6 (128 КБ Flash-памяти)По сравнению с классическими 8-битными Ардуинами, преимущества Blue Pill заключаются в большом количестве пинов, гибко конфигурируемой периферии, высокой тактовой частоте, большом количестве памяти. В общем, всё в них замечательно, и если бы не контроллеры от Espressif, вероятно, это решение имело бы куда более высокую популярность. Сейчас же это скорее умеренная экзотика.
Версия, доступная в настоящий момент на маркетплейсах: джамперы вместо кнопок, STM32F103C8T6 (64 КБ Flash-памяти)Платы Blue Pill построены на контроллерах STM32F103C6, STM32F103C8 и STM32F103CB — это ядро ARM Cortex M3, развитая периферия, разный объём Flash-памяти и ОЗУ: 32+10, 64+20 и 128+20 килобайт соответственно.Тактовая частота составляет 72 мегагерца, что даёт производительность около 90 MIPS (заявляется примерно 1.25 DMIPS на мегагерц) — в пять раз быстрее классических Arduino. Но есть подвох, который присутствует и во многих других микроконтроллерах высокой производительности: это частота ядра, а не всей системы.
Микроконтроллер STM32F103C8T6 на одной платеПериферия STM32 использует сложную коммутацию и мультиплексирование внутренних шин, что с одной стороны даёт ей очень высокую гибкость, но с другой стороны, она работает на более низкой частоте. Это касается и пинов GPIO: если контроллер ATmega (и Arduino на его основе) может изменять состояние пинов хоть каждый такт работы ядра, у STM32F1 шина работает на частоте 50 МГц или ниже (для снижения потребления, настраивается программой), что ограничивает скорость реакции на внешние события. Впрочем, она всё равно выше, чем у ATmega.
Микроконтроллер STM32F103CBT6 на другой платеКак и STM8, STM32 трёхвольтовый, что создаёт определённые сложности при переходе с классического Arduino. К счастью, у STM32 есть и так называемые 5V tolerant выводы, то есть некоторые входы способны воспринимать 5-вольтовые логические уровни, и даже если они превышают 3.3 вольта питания, это не повредит контроллер. Выходные уровни всегда трёхвольтовые. Это является одной из полезных особенностей Blue Pill: такие платы можно применять в задачах, где по каким-то причинам требуется осуществлять сопряжение пятивольтовых и трёхвольтовых компонентов.
Установленный пакет для работы с платами на STM32Программная поддержка STM32 в Arduino IDE называется STM32duino. Она реализована в виде пакета поддержки и загрузчика, прошиваемого в плату. В среду она добавляется как обычно: сначала указывается ссылка в настройках, потом устанавливается пакет из Менеджера плат.
Подключение ST-Link к плате Blue Pill для прошивки загрузчикаК счастью, в отличие от STM8, где это делается только специальным программатором, у STM32 доступны опции: можно использовать тот же ST-Link, а можно любой USB-UART, такой же, каким загружаются скетчи в Arduino Pro Mini. Я не буду подробно описывать этот процесс, так как в Интернете хватает инструкций, например, прямо здесь, на Хабре.Сам я прошиваю загрузчик через USB-UART, временно припаивая четыре проводка, потому что делал так до приобретения ST-Link, и это работает. Прошивка загружается через Flash Loader Demonstrator от STM, как и в голые контроллеры. В процессе нужно переставлять джамперы или удерживать кнопку, в зависимости от вариации платы.
Подключение USB-UART к плате Blue Pill для прошивки загрузчикаКак я слышал, бывают вариации Blue Pill не на оригинальных контроллерах ST, а на их китайских аналогах с другой маркировкой, и это создаёт какие-то трудности при работе с STM32duino. Ещё упоминаются перемаркированные чипы младших версий (меньше памяти, чем должно быть) и неправильные номиналы резисторов на платах, мешающие процессу прошивки. Но мне проблемные экземпляры пока не попадались.
Почти все мои АрдуинкиПоэтому в следующий раз речь пойдёт о куда более популярном и универсальном семействе, просто-таки открывшем второе дыхание у строителей разнообразных поделок на Arduino — платах на микроконтроллерах ESP8266 и ESP32 от Espressif. Их есть у меня!© 2024 ООО «МТ ФИНАНС»
▍ Расширяемость
Хотя внешне Arduino IDE выглядит крайне аскетично, а интерфейс неудобен и откровенно устарел, её внутренний мир скрывает одну сильную сторону: расширяемость. Правда, появилась она не сразу.Ассортимент оригинальных плат Arduino на микроконтроллерах ATmega постоянно рос, и как вы знаете из предыдущей части, в итоге их набралось буквально десятки. После заключения соглашения с Arm его пополнили новые платы на соответствующих 32-битных микроконтроллерах, для которых, разумеется, потребовался совершенно другой набор инструментов разработки, включая компилятор C++ и прошиваемый в микроконтроллер загрузчик скетчей.Это расширение было реализовано полностью прозрачным для пользователя образом. Для пользователей внешне ничего не поменялось — та же самая IDE и редактор, та же архитектура Wiring с её основными функциями, те же самые библиотеки. Переход на другую архитектуру сводится к простому выбору платы из списка. На практике, конечно, были нюансы, но всё же, это значительно проще, чем полная смена средств разработки ради перехода на микроконтроллеры другой архитектуры — процесс, который являлся нормой раньше.
▍ Arduino на ATtiny
Как вы могли понять по табличке в предыдущей части статьи, все оригинальные платы Arduino построены на контроллерах серии ATmega. Действительно, официальных плат на других 8-битных контроллерах не было, и далее оригинальные Arduino развивались в направлении 32-разрядных контроллеров с ядром ARM от Atmel и других производителей.Однако сторонние разработчики не растерялись и создали ряд Arduino-совместимых плат на младшем, более слабом семействе микроконтроллеров от той же Atmel — ATtiny.




https://raw.githubusercontent.com/MHEtLive/arduino-boards-index/master/package_mhetlive_index.json
Второй распространённый вид Arduino-совместимых плат на микроконтроллере ATtiny — семейство Digispark от Digistump, а также его китайские клоны. Все платы этого вида представляют собой вариацию одной и той же платы, немного отличающиеся форм-фактором и типом USB-разъёма.


https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json
Для работы с этими платами также нужно добавить в настройках IDE ссылку на пакет и потом в Менеджере плат установить Digistump AVR Boards. Также есть более свежий альтернативный пакет ATTinyCore, но в настоящий момент ссылка на него работает.▍ Arduino на STM8
Семейство 8-разрядных микроконтроллеров STM8 от STMicroelectronics появилось в конце 2000-х годов, и предлагалось как недорогая альтернатива популярным контроллерам от Atmel и Microchip. Они действительно очень быстро заполонили нишу встраиваемой электроники, сильно потеснив AVR, но сравнимого успеха среди энтузиастов не получили — вероятно, из-за появления доступных 32-битных контроллеров.Семейство STM8 включает множество моделей. В среднем они похожи на контроллеры ATmega, со своими плюсами и минусами: примерно такая же производительность, ОЗУ и Flash-память, более гибко конфигурируемая периферия. Главным же плюсом была цена: STM8 значительно дешевле. Собственно, эти контроллеры и вытеснили более дорогостоящие PIC, ATtiny и ATmega.Через некоторое время появились и максимально дешёвые «ознакомительные» платы на STM8. Поначалу их можно было использовать только с собственной экосистемой от STM, но позже энтузиасты реализовали их поддержку в рамках Arduino IDE, создав таким образом решение, которое иногда называют «Arduino для бедных».




https://raw.githubusercontent.com/tenbaht/sduino/master/package_sduino_stm8_index.json
Здесь вы сразу обнаружите существенную проблему, связанную с stm8blue: в Arduino IDE для STM8 доступен только компилятор классического С, без плюсов. Это сразу ограничивает выбор доступных библиотек. К тому же компиляция даже пустого проекта неприлично долгая. Используемый здесь компилятор — SDCC, которому я не очень доверяю, так как в прошлом имел богатый опыт его использования на других 8-битных архитектурах, и нередко встречал ситуации, когда заведомо рабочий код не работал.

▍ Arduino на STM32
Если предыдущие платы на основе самых недорогих микроконтроллеров шли в сторону уменьшения возможностей и были не очень интересны с практической точки зрения, так как подходили для решения более узкого круга задач, платы на 32-битных контроллерах STM32, также известные как Maple и Blue Pill, выглядят значительно интереснее.STM32 — это уже совсем другой уровень: 32-битная архитектура ARM, увеличенная производительность и объём памяти. На момент своего появления эти контроллеры предлагали выдающиеся характеристики при весьма скромной цене, и за счёт этого быстро вытеснили 8-битные решения от Atmel из значительного объёма встраиваемой электроники. У Atmel тоже были сопоставимые 32-битные решения, сначала собственная архитектура AVR32, потом контроллеры с ядром ARM, но, как я понимаю, они проиграли конкуренцию именно из-за цены.Изначально поддержка STM32 в Arduino IDE осуществлялась посредством разработанных энтузиастами отладочных плат под названием Maple. Они не смогли завоевать большую популярность, но начало было положено. После открытия исходников Maple сообщество стало развивать программную поддержку, а в Китае начали производить очень недорогую вариацию Maple Mini, которая в народе стала известна как Blue Pill.





https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.jsonили
http://dan.drown.org/stm32duino/package_STM32duino_index.json
К сожалению, из коробки платы Blue Pill идут без загрузчика STM32duino, и это, конечно, значительный недостаток в формате использования в экосистеме Arduino, достаточно существенное препятствие для новичков.Чтобы начать загружать в Blue Pill скетчи по-человечески, через USB-разъём, нужно сначала прошить соответствующий загрузчик (однократно).

▍ Продолжение следует
Существуют и более экзотические платы на других микроконтроллерных архитектурах с поддержкой в Arduino IDE. Например, MSP430 от Texas Instruments. Но у меня таких в арсенале пока нет, да и не очень-то они нужны. Как можно понять по сегодняшним примерам, применения их весьма специфичны, а сила Arduino всё же в универсальности.
Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
