STM32F103C8 без HAL и SPL: Работа с SPI дисплеями Nokia_5110 и ST7735

разделы: PCD8544, STM32, дата: 27 сентября 2022г.

За последнее время у меня скопилось некоторое количество дисплеев, и я хотел бы начать понемногу описывать работу с ними на STM32F1xx. Дисплей это один из основных модулей периферии, и его характеристики зачастую определяют выбор микроконтроллера. В настоящее время, благородя широкому распространению мобильных телефонов, нет проблем с приобретением дисплея с нужными характеристиками, однако производительность микроконтроллера при работе с данным дисплеем становится критичным параметром. Именно вопрос производительности микроконтроллера мне кажется очень важным вопросом, т.к. на производительность влияют не только характеристики самого микроконтроллера, но и качество того кода, который выходит из под рук программиста.

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

Итак, в этой статье, в качестве целевого микроконтроллера я буду использовать stm32f103c8 в виду его широкой распространенности. Полагаю, что bluepill имеется у всех.

В качестве дисплея я буду использовать т.н. Nokia 5110 дисплей на контроллере PCD8544. И хотя я уже писал очень длинную статью по работе с ним на ATmega8, с тех пор я многое переосмыслил. Главное же конечно то, что дисплей все еще продается на али, он доступный в плане цены, и скорее всего, он уже имеется у всех, кто читает эти строки. Впоследствии, алгоритмы написанные для Nokia 5110 мы будем переносить на другие дисплеи.

И чтобы статья совсем не казалось скучной, в завершении рассмотрим работу c цветным дисплеем на контроллере ST7735 с разрешением 128 на 160 пикселей и диагональю 1.8 дюйма (4.5 сантиметра). Будем пытаться добится от него работы на 90 fps (я серьёзно).

Из дополнительной периферии рассмотрим работу с энкодерам на таймерах STM32. Они часто применяются для управления различными меню на дисплеях, так что уметь с ними работать также важно как и с самими дисплеями.

Содержание:

I. Часть первая, вводная

  1. Базовый проект на CMSIS для stm32f103c8
  2. Добавляем управление через UART
  3. Подключение энкодера (таймер TIM2)
  4. Подключение энкодера (таймер TIM4)

II. Часть вторая, дисплей Nokia 5110

  1. Подключение дисплея Nokia 5110
  2. Работа с текстом
  3. Интерфейс FM-приемника
  4. Меню со скролом
  5. Бегущая строка

III. Часть третья, дисплей ST7735

  1. Пара слов про дисплей ST7735
  2. Инициализация дисплея ST7735
  3. Функция заливки
  4. Выжимаем 90 fps из дисплея ST7735
  5. Вместо заключения: баги и все такое

Бонус. IPS дисплеи ST7789 320х240 и 240х240 (добавленно позже)

  1. Обзор IPS дисплеев на контроллере ST7789
  2. Проверка дисплеев на контроллере ST7789 в Arduino
  3. Исправление функций модуля "st7735.c" для совместимости с контроллером ST7789
  4. Инициализация дисплея ST7789
    Содержание цикла STM32F103C8 без HAL и SPL
  1. Система тактирования RCC, таймер SysTick, UART передатчик, планировщик задач, SPI и I2C модули в режиме мастера
  2. Работа с SPI дисплеями Nokia_5110 и ST7735

Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal

Читать дальше