Blue pill (плата на базе STM32F103) и TMK

Речь пойдёт о применении дешёвых китайских микроконтроллерных плат Blue Pill в клавиатурах.
Клавиатурные прошивки с открытым исходным кодом TMK и QMK разрабатывались для 8-битных микроконтроллеров Atmel AVR. По-прежнему микроконтроллеры этой архитектуры являются предпочтительным выбором для этих прошивок: большая пользовательская база, отличная документация, простота прошивки. Человек, не знакомый с программированием контроллеров AVR и имеющий лишь базовые познания в C, способен за пару дней модифицировать прошивку под свой проект.

Цена плат на базе AVR остаётся весьма привлекательной, особенно при заказе из Китая. Pro Micro, одна из самых популярных плат на базе ATmega32U4, стоит $4–5 (Teensy 2.0, с которым удобнее работать, стоит даже в виде китайского клона уже $10). Производительности для клавиатурных проектов более чем достаточно. Размеров памяти и флэша тоже вполне достаточно (2,5/32 КиБ) — прошивки вполне укладываются даже с большим числом дополнительных фич QMK. Остаётся проблема в виде ограниченного количества пинов — их доступно только 18. Этого достаточно для любой 60%-клавиатуры при более-менее удобном построении матрицы в виде 13×5. Максимальное количество клавиш (81) получается при использовании матрицы 9×9. Что, если нужно больше? Придётся использовать расширитель портов, который стоит дополнительных денег и места, либо припаиваться к незадействованным вывода, либо ставить Teensy 2.0 с 25 пинами. Уже хватает для полноразмерной клавиатуры с матрицей 19×6, а при некотором шаманстве (11×10) можно ещё и светодиоды подключить.
Всё равно мало? Например, нужно подключить матрицу 20×8 от терминальной IBM Model M или добавить трекпоинт в самодельную клавиатуру? В этом случае уже нужен будет Teensy 2.0++ (45 пинов), но это уже $13 за клон. К счастью, добрые люди портировали TMK/QMK под встраиваемую ОС ChibiOS, которая, в свою очередь, работает на нескольких интересных ARM-микроконтроллерах. Самая интересная по соотношению цена/возможности плата для нашего применения — Blue Pill. 72 МГц 32-битный ARM Cortex M3 (STM32F103C8), 64 КиБ флэш, 20 КиБ ОЗУ, 32 доступных пина. Цена — $1,93 (!!!) с доставкой.
В чём подвох? Помимо большей сложности для начинающих разработчиков и контроля качества (например, флюс не смыт) подвохов тут два:
  • Аппаратная проблема. В цепи USB стоит резистор неправильного номинала — 10 КОм, хотя по спецификациям требуется 1,5 КОм. В большинстве материнских плат контроллер всё равно заработает. Но поскольку мы собираем клавиатуру, то крайне желательно, чтобы работал он везде. Так что закупаем резисторы правильного номинала, форм-фактор — SMD 0603. Естественно, паять SMD такого размера обычным паяльником с крупным жалом крайне сложно, но фен вовсе не обязателен — недорогой паяльной станции, жала со скосом и хорошего флюса будет вполне достаточно. Сначала стоит посмотреть пару обучающих роликов, если вы никогда до этого SMD не паяли.
  • USB-загрузчика на плате нет. Так что для начала понадобится программатор. Но тут китайцы снова демпингуют. Клон программатора-отладчика ST-Link V2 стоит два доллара.

После перепайки резистора можно приступить к прошивке. С сайта STMicroelectronics забираем драйвер и ST-Link Utility. Прошивать будем Arduino-совместимый загрузчик STM32duino. Взять его можно на Github, готовый образ для Blue Pill называется generic_boot20_pc13.bin. Плату подключаем к ST-Link через выделенные 4 пина, переключаем джампер Boot0. После прошивки возвращаем джампер на место. При желании можно проверить работоспособность в Arduino IDE, настроив там поддержку нужной платы (в сети масса примеров) и загрузив простую «мигалку».
Собирём TMK и протестируем однокнопочный пример stm32_f103_onekey. Удобнее всего это это сделать в Linux:
  • Ставим компилятор для ARM: gcc-arm-none-eabi
  • В tmk_keyboard/tmk_core/tool/chibios/ клонируем стабильную ветку Chibios: git clone -b stable_17.6.x https://github.com/ChibiOS/ChibiOS.git
  • Добавляем ChibiOS-contrib: git clone https://github.com/ChibiOS/ChibiOS-Contrib.git
В make-файле уже всё настроено под нашу плату с загрузчиком STM32duino. Какой-нибудь hid_bootloader был бы, конечно, удобнее, надо попробовать его.
Остаётся залить прошивку через USB. Скрипты для Linux, Windows и Mac лежат тут. По какой-то причине под Linux у меня ничего не получилось. Возможно это связано с особенностями дистрибутива (KDE Neon), но контроллер не успевал подхватываться, хотя за изменением ID при сбросе/подключении можно было наблюдать через lsusb. Подключаем кнопку между A10 (см. matrix.c) и питанием, проверяем. Теперь осталось только взять за образец ARM-прошивку для Plank от замечательного клавиатуростроителя di0ib и приспособить её для своих нужд.

Комментарии

Популярные сообщения