Микропроцессор STM32 - лучше, быстрее и дешевле AVR. Единственное, что останавливало чайника, вроде меня, от использования шайтан камня - высокий порог вхождения. Не прошло и 5-и лет, как порог опустился ниже плинтуса. И вот как это произошло.
В свое время компания
LeafLabs выпустила Maple Mini на базе STM32. К сожалению проект не взлетел. В 2012 году его закрыли, а все наработки отдали в открытый доступ. Сообщество радиогубителей тут же подхватило исходники и начало развивать свой проект -
stm32duino. Правда пилят не спеша. Такое положение дел не понравилось
rogerclarkmelbourne и он решил сделать свой велосипед с блекджеком и куртизанками.
С начала китайцы копировали только Maple Mini, потом стали выпускать свою версию в тех же размерах. На зарубежных форумах, новой плате дали кличку -
Blue Pill. По аналогии с синей таблеткой из фильма "Матрица". Существует большое количество версий платы. Самая популярная на STM32F103C8T6 и светодиодом на пине C13. Стоит около $2.2. Средняя цена Arduino Nano v3.0 с CH340 адаптером $2.4. Даже тут STM32 лидирует.
внешний вид Blue Pill
описание портов Blue Pill (откройте в новом окне для увеличения)
схема Blue Pill (откройте в новом окне для увеличения)
Что же мы получаем за эти деньги?
- Рабочая частота 72Mhz, у AVR 16MHz.
- Объем Flash памяти 64KB, у AVR 32KB. Говорят на самом деле там 128KB. Советую сразу не хакать на максимальный объем, мало какие глюки вылезут. Вот когда код обкатан, можно и посмотреть.
- У STM32 20KB оперативной памяти, у AVR всего 2KB.
- Разрядность АЦП 12-bit, у AVR только 10-bit. Функция analogRead() возвращает аж 0..4095 отсчетов, у AVR только 0..1023.
- Разрядность аппаратного ШИМ-а 16-bit, у AVR только 8-bit. Функция analogWrite() принимает значения в диапазоне от 0 до 65535, у AVR 0..255.
- У STM32 есть аппаратный USB.
- Напряжение питания от 2v до 3.6v. Как раз для двух AA/AAA батареек или аккумуляторов. Рабочий диапазон AVR от 2.7v до 5v и то с оговорками по рабочей частоте.
- У STM32 огромное количество портов и периферии.
- Из минусов, не все входы/выходы STM32 толерантны к 5v. Подключил не к тому и прощай $2. Список GPIO переваривающих 5v, помечены как FT в графе Level, находится
здесь.
UDP1: Фремйворк stm32duino наконец-то допилили и rogerclarkmelbourne больше не рекомендую (пропускаем простыню и сразу смотрим UDP2 в конце статьи). Репозиторий гуру-мастера rogerclarkmelbourne бурлит и пенится. Новые глюки добавляются, старые исправляются. Не смотря на весь цирк с багами, число его последователей растет, а у stm32duino уменьшается. Секрет успеха в том, что фреймворк от rogerclarkmelbourne поддерживает заливку кода через usb bootloader. Господа из stm32duino пока научились выгружать код только через ST-Link.
UDP1: Фремйворк stm32duino наконец-то допилили и bootloader больше не рекомендую. Все прекрасно
шьётся с помощью STLink v2 по SWD из под Arduino IDE (пропускаем простыню про bootloader и сразу смотрим UDP2 в конце статьи). Перед тем как использовать Blue Pill, с фреймворком от rogerclarkmelbourne, ее надо чуть-чуть допилить напильником. Первое - это прошить
bootloader. Для этого нам понадобится USB-COM переходник с 3v уровнем сигнала. Ищется по словосочетанию "usb serial 3.3v"
переходник USB-COM, версия раз
переходник USB-COM, версия два
Перемычку на USB-COM адаптере в положение 3.3v и подключаем по следующей схеме:
GND -> G
5V -> 5V
TX -> PA10
RX -> PA9
Качаем и устанавливаем
STM32 Flash loader demonstrator. Переводим перемычку "Boot0" в положение "1", а "Boot1" в положение "0". Если чип не находится, на помощь приходит кнопка RESET.
грязный хак на 128KB
Заливаем
bootloader из папки .../STM32F1/binaries/generic_boot20_pc13.bin, где pc13 на конце означает, что светодиод подключен к пину C13.
bootloader грузить сюда
Возвращаем перемычку "Boot0" в положение "0". Теперь плата будет определяться в Windows как Maple и в нее можно заливать код через USB.
Качаем архив
Arduino_STM32 и копируем его содержимое по адресу ...\Documents\Arduino\hardware\Arduino_STM32. Очень важно запустить install_drivers.bat из папки ..\Arduino_STM32\drivers\win от имени администратора.
Загружаем Arduino IDE 1.6.9 или выше. Идем в Boards Manager и устанавливаем пакет для Arduino SAM Boards (32-bit ARM Cortex-M3)/Arduino DUE. Перегружаем Arduino IDE, загружаем Blink. PROFFIT!
Попробовал свою
LiquidCrystal_I2C и она завелась. Библиотека
RotaryEnocder работает быстрее, плавнее и чётче чем на AVR.
LiquidCrystal_I2C на stm32duino
UDP2: Для установки консервативного фреймворка от stm32duino делаем все как
обычно. Дописываем json в "Preferences" и устанавливаем пакет через Boards Manager. После этого BluePill можно програмировать через ST-Link (нужно доставить STM32CubeProgrammer с сайта TI). Чтоб STLink v2 увидел платы с зашитым bootloader-ом, его надо
удалить.
UDP3: Тут провели расследование какой камень быстрее всех - STM32 победил!!!
UDP4: Китайцы наладили выпуск
клонов STM32. Умеют маскироваться под оригинал и даже команды совпадают, но дьявол как всегда кроется в деталях. Будьте бдительны. Проверить на подлинность можно загрузив тестовую прошивку -
Bluepill Diagnostics.