Blue Pill/STM32F103 и Arduino

Jul 06, 2017 22:56

Микропроцессор 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.

stm32, arduino

Previous post Next post
Up