В данной статье рассматриваются способы вывода текста на дисплей ST7735 с помощью микроконтроллера STM32F103C8. В качестве шрифтов используются два шрифта с кириллицей 8х8 и 8х16, а также шрифт Cybercafe 8х16 без кириллицы.
Статья является продолжением предыдущей "Работа с SPI дисплеями Nokia_5110 и ST7735", где я рассматривал подключение дисплея к микроконтроллеру, его инициализацию, и затрагивал вопрос о максимально быстрой работе с дисплеем по SPI интерфейсу. В этот раз рассматривается вывод текста на дисплей ST7735, сжатие шрифтов, а так же отрисовка простых графических примитивов.
Содержание:
Шрифт Terminus (добавлено 22 мая 2023г.)
Конвертация векторных шрифтов
Дизайнерские шрифты (добавлено 16 июня 2023г.)
Все примеры и готовые прошивки можно скачать с портала GitLab
В продолжение темы работы с дисплеями, в данной статье рассматривается работа с монохромными дисплеями от телефона Nokia 1202 и OLED дисплеем SSD1306. Первый дисплей продавался на али пару лет назад, и сейчас снят с продажи. Тем не менее, на его примере рассмотрим использование USART интерфейса в качестве 9-битного SPI, а так же коснемся вопроса конвертации шрифтов (пока растровых) для использования в своих проектах. В исходниках можно будет найти полные кодовые наборы в 256 символов конвертированных растрового шрифта 8х8 (кириллица) и 8х16 (латиница).
Про OLED дисплей SSD1306 достаточно сложно написать что-либо новое, по нему есть куча материалов в сети. Но мне показалось, что это не повод, что бы не упоминать его вообще.
Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal
Содержание:
I. SPI дисплей HX1230 (Nokia 1202)
II. OLED дисплей SSD1306 на I2C интерфейсе
За последнее время у меня скопилось некоторое количество дисплеев, и я хотел бы начать понемногу описывать работу с ними на STM32F1xx. Дисплей это один из основных модулей периферии, и его характеристики зачастую определяют выбор микроконтроллера. В настоящее время, благородя широкому распространению мобильных телефонов, нет проблем с приобретением дисплея с нужными характеристиками, однако производительность микроконтроллера при работе с данным дисплеем становится критичным параметром. Именно вопрос производительности микроконтроллера мне кажется очень важным вопросом, т.к. на производительность влияют не только характеристики самого микроконтроллера, но и качество того кода, который выходит из под рук программиста.
Кроме того, работа с дисплеями довольно обширная тема, которая затрагивает множество смежных вопросов, и это на мой взгляд отличный повод, чтобы эти вопросы разобрать. Поэтому статья не посвящена целиком дисплеям, как можно было бы подумать на первый взгляд, на самом деле она посвящена работе с микроконтроллерами stm32f1хх.
Итак, в этой статье, в качестве целевого микроконтроллера я буду использовать stm32f103c8 в виду его широкой распространенности. Полагаю, что bluepill имеется у всех.
В качестве дисплея я буду использовать т.н. Nokia 5110 дисплей на контроллере PCD8544. И хотя я уже писал очень длинную статью по работе с ним на ATmega8, с тех пор я многое переосмыслил. Главное же конечно то, что дисплей все еще продается на али, он доступный в плане цены, и скорее всего, он уже имеется у всех, кто читает эти строки. Впоследствии, алгоритмы написанные для Nokia 5110 мы будем переносить на другие дисплеи.
И чтобы статья совсем не казалось скучной, в завершении рассмотрим работу c цветным дисплеем на контроллере ST7735 с разрешением 128 на 160 пикселей и диагональю 1.8 дюйма (4.5 сантиметра). Будем пытаться добится от него работы на 90 fps (я серьёзно).
Из дополнительной периферии рассмотрим работу с энкодерам на таймерах STM32. Они часто применяются для управления различными меню на дисплеях, так что уметь с ними работать также важно как и с самими дисплеями.
Содержание:
I. Часть первая, вводная
II. Часть вторая, дисплей Nokia 5110
III. Часть третья, дисплей ST7735
Бонус. IPS дисплеи ST7789 320х240 и 240х240 (добавленно позже)
Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal
Недавно у меня сгорел мой единственный ST-Link v2 с оригинальным STM32, который верой и правдой прослужил мне семь лет. Выкидывать его у меня не поднялась рука, и я что называется "приобрел практический опыт" восстанавливая его работу. Данная проблема заставила меня провести личное исследование о доступных альтернативах отладчику ST-Link V2, и результаты этого мини исследования легли в основу данной статьи.
Вторым мотивом которым я руководствовался, была ситуация сложившаяся на рынке микроконтроллеров. Полагаю, что все уже понимают, что микроконтроллеры STM32 скорее всего уже не будут доступны никогда, и нужно искать альтернативы. В виду этого теряется ценность брендированных отладчиков таких как ST-LinkV2, которые могут работать только с микроконтроллерами STM, и соответственно вопрос опять упирается в поиск альтернатив.
В своих проблемах и поисках я не был одинок, поэтому ниже привожу список материалов, на которые я опирался.
Содержание:
Для работы я использовал Slackware Linux и виртуальную машину с Windows. Если вы пользуетесь Windows, то вам соответствено понадобится виртуальная машина с Linux.
Внимание! Статья была отредактирована в ноябре 2023 года (последнее изменение 28 июля 2024г). Были исправленны битые ссылки, логи и скриншоты STM32CubeProgrammer были приведены к версии 2.15. Кроме этого, был добавлен новый раздел "BlackPill в 2023 году, альтернативные платы WeAct", где рассмотренна современная ситуация с прошивками микропитона для BlackPill. Также был добавлен легкий экскурс по программированию на микропитоне на примере написания драйвера дисплея SSD1306 с I2C интерфейсом. Кроме этого было затронуто асинхронное программирование на микропитоне. Также был добавлен обзор альтернативных плат WeAct в форм-факторе Blackpill на чипах: AT32F403ACGU7, RP2040 и STM32WB55. Старую версию статьи можно найти по следующему адресу: "перейти по ссылке".
Изначально статья была посвящена плате Blackpill на чипе STM32F411, и немного была затронута тема микропитона. Немного, потому-что это казалось скорее игрушкой для студентов и не более того. За последние три года произошли какие-то тектонические сдвиги в микроэлектронике, и ситуация поменялась.
Таким образом, я вижу с одной стороны дрифт в сторону от продукции ST, а с другой - микроконтроллеров в сторону SoC. Микропитон же похоже пытается стать Java для микроконтроллеров. Так или иначе байткод-интерпретатор там уже имеется.
Еще один аспект - микропитон выполняет роль интерактивной операционной системы для микроконтроллеров. Там есть дисковая система, командная строка и возможность запускать скрипты с диска. Т.о. микропитон позволяет работать с периферией и аппаратными интерфесами в диалоговом режиме.
Хочу заметить, что вопрос прошивки модулей ESP8266/ESP32 микропитоном рассматривалась в статье про EPS8266: "Установка прошивки MicroPython".
Полезная документация по теме статьи:
Содержание:
I. Обзор платы BlackPill на чипе STM32F411CE
II. Основы работы c MicroPython
III. BlackPill в 2023 году, альтернативные платы WeAct
IV. Микропитон в 2024 году
Данную статью по содержанию можно разделить на две или три части. С одной стороны я хотел рассказать в ней о конфигурации ряда IDE основанных на кодовой базе Eclipse, т.к. когда я впервые настраивал подключение отладчика к Eclipse и SW4STM32, мне не показался этот процесс простым и "интуитивно понятным".
Вторая часть статьи в каком-то роде продолжает прошлогоднюю статью по STM32, Т.к. в качестве демонстрационного примера берётся проект из той статьи. Однако, одним заимствованием ограничиться не получилось, и для развития идеи, я описал недостатки данного проекта, и предложил более совершенный вариант Makefile'а.
Получившийся Makefile дал возможность перенести проект на систему сборки CMake. Это в свою очередь дало возможность продемонстрировать использование Qt Creator для программирования и отладки микроконтроллеров STM32.
В техническом плане, проект используемый в качестве примера, очень простой. Это обычный Blink, состоящий из Си-кода и ассемблере ARM. Из ресурсов микроконтроллера используется лишь порт ввода-вывода GPIO_C и системный таймер SysTick. В проекте не затрагиваются DMA, USB, FSMC и прочие интерфейсы. Также в стороне осталась библиотека newlib, поддержка языка программирования C++, и работа с проектами STM32CubeMX. Т.е. несмотря на доработку проекта в статье, он все ещё годится лишь для несложных задач, и более соответствует уровню микроконтроллеров с архитектурой Cortex-M0/M0+.
Используемые в статье Hardware и Software. В качестве операционной системы использовалась Slackware GNU/Linux (русские физики рекомендуют), в качестве целевого микроконтроллера - STM32F103C8T6 (Blue Pill). В качестве программатора и отладчика использовался китайский клон: "ST-Link v2", а также JTAG отладчик на чипе FT232H. Из софта, в качестве gdb сервера в статье используется: "OpenOCD", а в качестве флешера: "st-flash". Используемый туллчейн arm-none-eabi-gcc имеет версию - 8.3.1, релиз от 20190703. Версия CMake - 3.15.5. Qt Creator используемый при написании статьи был версий 4.9.2 и 4.10.2.
Должен предупредить, что свой ST-Linkv2 я покупал достаточно давно, и он на чипе STM32. Сейчас на али продаются программаторы ST-Linkv2 на чипе CKS32F103C8T6, и с ними могут быть нюансы.
Полезные материалы по теме статьи:
Содержание:
I. Отладка в Eclipse, SW4STM32 и STM32CubeIDE:
II. "Допиливание" Makefile и создание на его основе CMake проекта:
III. Использование Qt Creator для программирования и отладки микроконтроллеров STM32:
Когда пару лет назад я писал вводную статью по STM32, то больше всего мне тогда запомнилось, что прошивки даже с самыми простыми алгоритмами (например Blink) - имеют огромный размер: от одного килобайта и больше. Поэтому целью этой статьи стала попытка написания прошивок для STM32 в стиле 8-битных микроконтроллеров, когда ты полностью контролируешь процесс компиляции, используя лишь: компилятор, флешер и текстовый редактор. Соответственно в статье рассматриваются типовые на мой взгляд вопросы при переходе с 8-битников на 32-разрядную архитектуру: как помигать светодиодом, как настроить тактирование, как завести SPI и поднять I2C.
Данная статья не рассчитана на новичков, я часто буду сравнивать STM32 c STM8, и по ходу повествования буду опускать многие элементарные, на мой взгляд, вещи. Статья предполагает, что вы уже знаете Cи, имеете опыт работы в консоли Linux или CYGWIN Windows. Также будет весьма кстати, если у вас уже есть опыт программирования в "Bare Metal" хотя бы на уровне микроконтроллеров STM8.
Если вам чего-то из этого не хватает, то вы легко сможете подтянуть "матчасть" по статьям на хабре: STM32F4: GNU AS: Программирование на ассемблере в семи частях, по методичке "Народная электроника" выпуск 2. А.В. Немоляев. GCC Cortex-M3. PDF, или по книге "Джозеф Ю. Ядро Cortex - МЗ компании ARM. Полное руководство". Также, в какой-то мере, могут быть полезны материалы данного сайта.
Оборудование. В статье я буду использовать популярную плату "Blue Pill" на микроконтроллере STM32F103C8T6, программатор ST-LINK v2 (китайская реплика), USB-UART преобразователь FT232RL, 4-x разрядный семисегментный индикатор, на SPI интерфейсе и RTC DS3231 на I2C интерфейсе.
Содержание:
Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала GITLAB https://gitlab.com/flank1er/stm32_bare_metal