Микроконтроллеры. Обзор.

На рынке много микроконтроллеров, которые радиолюбители могут применять в своих конструкциях. Причем их можно приобрести и в виде отдельных микросхем и в виде отладочных плат. Наиболее популярными стали платы Arduino. Но давайте попробуем посмотреть, что еще есть  похожего и как с ним работать.

ФотографияВ этой заметке мы кратенько пробежимся по свойствам бюджетных микроконтроллеров и попробуем сделать поверхностные выводы об их полезности.

Сразу скажу, что формат исполнения типа Arduino Nano мне нравится тем, что я могу использовать его как готовый модуль в своих конструкциях. К тому же завершенность такой конструкции позволяет в дальнейшем, без каких-либо проблем обновлять прошивку микроконтроллера. Вот примеры использования мной Arduino Nano в моих проектах.

Примеры

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

Основным недостатком Arduino Nano, на мой взгляд, является недостаточный объем памяти. Причем как и под программу, так и ОЗУ. Иногда правда мне не хватало и GPIO (контакты ввода-вывода общего назначения), но для этого микроконтроллера их количество вполне неплохое.

Теперь давайте посмотрим на доступные микроконтроллеры примерно такой-же стоимости. В таблице приведены их технические характеристики.

Все микроконтроллеры

Все эти микроконтроллеры, кроме Raspberry Pi Pico (микроконтроллер RP2040) приведены на фотографии в начале заметки.

Attiny85 хороший вариант, когда не нужно много выводов для управления чем-либо. Его 8 килобайт вполне хватает для большинства простых задач. Большим плюсом исполнения от DigiSpark, является то, что микроконтроллер можно программировать, из среды Arduino IDE просто вставляя в USB разъем. Наличие штырьков-выводов, со стандартным шагом в 2.54 мм, позволяет использовать платы в своих конструкциях и даже в прототипах на монтажных платах.

Arduino Nano имеет уже 32 килобайта памяти под программу и целых 20 выводов, для работы с внешними устройствами (13 цифровых и 7 аналоговых). Правда два из них (D0 и D1) нужно использовать с осторожностью, поскольку они отвечают за последовательный порт ввода-вывода, который отвечает за программирование контроллера.

Платы с микроконтроллерами STM32 тут делятся на Blue Pill (Синяя пилюля) с микроконтроллером STM32F103 на борту и Black Pill (черная пилюля) с микроконтроллерами STM32F401 и STM32F411 на борту. У этих плат имеется по 32 контакта, подключенных к GPIO. Да и объемы памяти у них отличаются в большую сторону от Arduino Nano. К сожалению, на Blue Pill китайские производители ставят микроконтроллер с почти минимальными объемами памяти в линейке STM32F103C6, в которой объем ОЗУ в 5 раз больше чем у Arduino Nano. Зато на Black Pill установлены микроконтроллеры с максимальным объемом памяти в этом исполнении корпуса.

Также большим плюсом микроконтроллеров STM32 можно считать наличие RTC (Real Time Clock – часы реального времени), которые позволят выполнять действия привязанные ко времени или даже календарю. Ну и большая разрядность АЦП, положительно скажется на точности измерения нужных вам параметров.

Тактовая частота микроконтроллера может не так уж и важна, при работе несложной управляющей программы, но вот для измерения внешних, быстрых процессов, она чрезвычайна полезна. Так например, при попытке измерить частоту внешнего сигнала, Arduino Nano не может прыгнуть выше 8 МГц, а вот та же STM32F411 поднимает порог измерений до 100 МГц.

Так же большим плюсом можно считать то, что если вы уже работали с Arduino, то перейти на микроконтроллеры семейства STM32 для вас не составит труда. Вы даже сможете без изменений перенести на них большую часть своих проектов. Для этого нам достаточно сходить на https://github.com/stm32duino/Arduino_Core_STM32 и согласно инструкции установить в Arduino IDE, поддержку соответствующих плат. Должно получится примерно вот так.

Платы в среде Ардуино

Казалось бы все складывается замечательно и переход на STM32 произойдет легко и непринужденно, но есть несколько подводных камней, которые необходимо учитывать.

Первое препятствие, с которым можно столкнуться, это отсутствие у STM32 памяти типа EEPROM, которую используют некоторые программы на Arduino, для сохранения настроек или текущих значений переменных, для восстановления после выключения питания.  В STM32 для этого придется использовать другой механизм, позволяющий работать с основной flash-памятью микроконтроллера.

Для оценки работы Arduino IDE  с микроконтроллерами STM32, я взял три программы (стандартный Blink, и мои два проекта – программу для телеграфного маяка и программу для измерителя КСВ), откомпилировал их в среде Arduino IDE и ценил результаты.

Результаты компиляции кода

Меня несколько расстроило то, как Arduino IDE  поступило с кодом для STM32, раздув его до непонятных объемов. И получилось, что вполне хороший апгрейд c Arduino Nano на STM32F103,  ввиду большего числа GPIO и ОЗУ, провалился с треском. Получающийся в результате код, рискует не поместиться в память микроконтроллера, не смотря на то, что для Arduino Nano, он достаточно миниатюрен.

Судя по всему, Arduino IDE оптимизирована для архитектуры AVR, но вот для микроконтроллеров с ARM-ядрами, она не особенно то эффективно работает.

Какой можно сделать вывод – перейти на STM32 можно попробовать и в Arduino IDE, но нужно быть готовым, что этот вариант не позволит эффективно использовать все возможности более мощного микроконтроллера.

А вот как нам перейти на STM32 более эффективно, мы и поговорим в следующих заметках.