Графическая экосистема STMicroelectronics: возможности разработки GUI c использованием микроконтроллеров STM32H7
2 ноября 2021
Константин Кузьминов (г. Заполярный)
Для успешной разработки и реализации графического интерфейса пользователя нужны высокопроизводительные микроконтроллеры, способные обеспечить быструю и высококачественную работу с графикой. Микроконтроллеры STMicroelectronics семейства STM32H7 обладают всеми необходимыми характеристиками для создания качественного GUI, а необходимые инструменты упрощают разработку и ускоряют выход продукции на рынок.
Содержание
Графический интерфейс пользователя (Graphic User Interface, GUI) – удобный инструмент как для управления различными устройствами, так и для получения информации от них. Он интуитивно понятен, что облегчает использование, обучение, минимизирует ошибки и позволяет быстро освоить управление, не зависимо от области применения. Даже такое простое устройство как часы сегодня встречается в двух вариантах: стрелочном и электронном, поскольку, в зависимости от ситуации и применения, иногда проще и быстрее получить информацию по положению стрелок, а иногда нужнее цифры. Интерфейс управления умным домом в обычном режиме может гармонировать с интерьером и быть более приятным визуально, чем это необходимо для функциональности, но в аварийных ситуациях переключаться на вывод только необходимой, однозначной и просто воспринимаемой информации, предлагая соответствующее управление. Что касается еще более сложных систем, например, управления технологическими процессами завода или космическим кораблем, то альтернатива GUI может просто не поместиться в поле зрения оператора и оказаться вне пределов досягаемости глаз и рук.
Проектирование GUI, помимо логики и дизайна, включает в себя выбор микроконтроллера, дисплея и метода разработки – самостоятельного или при помощи готовых библиотек и инструментов.
Микроконтроллер определяется необходимостью и возможностями формирования кадра изображения, в том числе с помощью графического ускорителя, использования внутренней и внешней памяти для графических данных, типом интерфейса дисплея. Микроконтроллеры семейства STM32H7 производства STMicroelectronics (рисунок 1) обладают не только высокой производительностью, но и имеют встроенные аппаратные графические ускорители и интерфейсы дисплея, что дает возможность быстро и высококачественно работать с графикой. Благодаря этому создание GUI упрощается, поскольку, в отличие от работы с обычными микроконтроллерами, разработчик менее ограничен рамками вычислительных ресурсов.
Определиться с вариантом микроконтроллера может помочь таблица 1, в которой приведены данные о наличии и типе графических ускорителей и интерфейсов дисплея.
Если дисплей имеет нестандартную форму, например, круга, то целесообразно использовать STM32H7B0/7A3/7B3, имеющие встроенный аппаратный модуль для дисплеев непрямоугольной формы и самый большой объем SRAM для буфера кадров. Если требуется подключение дисплея с минимальными затратами количества выводов, то необходимо выбрать вариант из STM32H747/757, имеющих последовательный интерфейс дисплея MIPI-DSI (об особенностях интерфейсов дисплея будет сказано ниже). Если важен не сам дисплей, а работа со сжатыми изображениями, то имеет смысл обратить внимание на микроконтроллеры с аппаратным кодеком JPEG. Из всего многообразия выделяется лишь STM32H742. Эта модель не имеет встроенного аппаратного интерфейса дисплея, подключение дисплея к нему можно выполнить по стандарту MIPI-DBI (Intel 8080/Motorola 6800/SPI).
Таблица 1. Графические возможности микроконтроллеров STM32H7
Наименование | Аппаратная поддержка | Интерфейсы памяти | Интерфейсы дисплеев | Встроенная память, кбайт | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Chrom-ART™ (DMA2D) | Chrom-GRC™ (GFXMMU) | JPEG CODEC | QUAD-SPI | OCTO-SPI | FMC | SDMMC | LTDC | MIPI-DISI | SRAM (AXI) | Flash | |
STM32H7B0/A3/B3 | + | + | + | + | + | + | + | + | – | 1024 | 128…2048 |
STM32H723/30/33 | – | – | + | 128 | 128…1024 | ||||||
STM32H743/50/53 | + | – | 512 | 128…2048 | |||||||
STM32H742 | – | – | – | 384 | 1024…2048 | ||||||
STM32H725/35 | +* | + | 128 | 512…1024 | |||||||
STM32H745/55 | + | — | + | 512 | 1024…2048 | ||||||
STM32H747/57 | + | 512 | |||||||||
* За исключением некоторых моделей в корпусах с меньшим числом выводов. |
Графические ускорители
Наличие аппаратных графических ускорителей делает микроконтроллер по-настоящему «графическим». Конечно, осуществить обработку графики можно осуществить и без них, но в таком случае на это будет затрачено более 90% вычислительных ресурсов, и на основную программу будет отведено менее 10%. А если при этом отсутствует и интерфейс дисплея, то качество графики и всего GUI в целом сильно ухудшится. Встроенный ускоритель позволяет основному ядру микроконтроллера выполнять свои не менее важные задачи или просто перейти в спящий режим, а качество изображения все равно будет максимальным, так как ускоритель оптимизирован для обработки графики и чаще всего не требует вычислительных ресурсов основного ядра.
Chrom-ART ™ (DMA2D) – графический ускоритель, присутствующий во всех микроконтроллерах STM32H7 для обработки растровых изображений. Он может выполнять следующие операции:
- закрашивание изображения определенным цветом;
- частичное или полное копирование одного изображения в другое, в том числе с преобразованием формата пикселей;
- смешивание двух изображений с разными форматами пикселей и копирование итога в результирующее изображение с другим цветовым форматом;
- поддержка всех классических схем цветового кодирования 4…32 бит на пиксель с индексированным или прямым цветовым режимом, включая YCbCr для обработки вывода JPEG-кодека;
- собственная выделенная память для палитр цветов каждого слоя (CLUT);
- закрашивание, смешивание и копирование, которые могут выполняться как с целыми изображениями, так и с определенными областями в любом сочетании;
- поддержка полупрозрачности;
- режимы управления шрифтами со сглаживанием.
Ускоритель Chrom-ART ™ имеет четыре режима работы:
- регистр → память (операции закрашивания прямоугольника);
- память → память (операции копирования изображений);
- память → память (копирование с преобразованием цветового формата);
- память → память (копирование с преобразованием формата и смешиванием с полупрозрачностью).
Последний режим может быть эффективно использован для наложения на фоновый слой полупрозрачных иконок и вывода шрифтов со сглаживанием. Общая блок-схема ускорителя с одним из вариантов работы показана на рисунке 2.

Рис. 2. Графический ускоритель Chrom-ART
Для передачи изображений используется 64-разрядная шина AXI, для управления и контроля – 32-разрядная шина APB. Все преобразования происходят без участия основного ядра микроконтроллера, в том числе в спящем режиме. Chrom-ART™ имеет несколько прерываний, способных вывести микроконтроллер из спящего режима, которые позволяют отслеживать заполнение палитр цветов, окончание выполнения операций и ошибки. В случае вывода данных на дисплей с параллельной шиной через FMC ускоритель учитывает особенность порядка битов цветов в формате 18/24-битного режима (RGB888): установка бита RBS меняет данные красного и синего цветов местами.
Несмотря на кажущуюся простоту, этот графический ускоритель может решить большинство задач по отображению интерфейса, и делает это со скоростью 1 пиксель за 1 такт, что позволяет работать с очень высоким разрешением при оптимальной частоте кадров, даже если изменяется вся область экрана.
Chrom-ART настраивается в STM32CubeMX в категории «Мультимедиа → DMA2D».
Пример кода, который закрашивает прямоугольник в красный цвет, изображен на листинге 1.
Листинг 1.
#include "stm32f7xx_hal.h"
#include "stm32f7xx_hal_dma2d.h"
...
uint32_t color = 0xF800; //Red in RGB565
hdma2d.Init.Mode = DMA2D_R2M
hdma2d.Init.ColorMode = DMA2D_RGB565;
MODIFY_REG(hdma2d.Instance->CR, DMA2D_CR_MODE, DMA2D_R2M);
MODIFY_REG(hdma2d.Instance->OPFCCR, DMA2D_OPFCCR_CM, DMA2D_RGB565);
MODIFY_REG(hdma2d.Instance->OOR, DMA2D_OOR_LO, displayWidth - rectangleWidth);
hdma2d.LayerCfg[1].InputColorMode = CM_RGB565;
hdma2d.LayerCfg[1].InputOffset = 0;
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
HAL_DMA2D_Start_IT(&hdma2d, color, (unsigned int)dstPtr, rectangleWidth, rectangleHeight);
Если требуется экономия памяти или воспроизведение видео в формате MotionJPEG, то аппаратный ускоритель Codec JPEG, интегрированный в микроконтроллеры STM32H7B0/7A3/7B3 и ряд других, готов выполнить работу по декодированию изображений в формате JPEG (рисунок 3). Кроме того, с той же эффективностью он может сжать изображение в JPEG.
Основные особенности кодека JPEG:
- кодирование или декодирование (не одновременно);
- аппаратные генерация и анализ заголовков JPEG с возможностью отключения их обработки;
- до четырех программируемых таблиц квантования;
- программируемые таблицы Хаффмана (две AC и две DC);
- поддержка цветовых пространств RGB, YCbCr, YCMK и оттенков серого;
- интерфейсы одновременного вводы и вывода данных;
- глубина 8 бит на канал;
- программируемая минимальная единица кодирования (MCU).

Рис. 3. Блок-схема кодека JPEG
Как и Chrom-ART, кодек JPEG аппаратно полностью реализован и обрабатывает один пиксель данных за такт без какой-либо нагрузки на основное ядро микроконтроллера. Его можно использовать для воспроизведения видео M-JPEG. Кодек JPEG может быть активным в спящем режиме микроконтроллера, его прерывания можно использовать для вывода устройства из спящего режима. Это позволяет использовать кодек совместно с управлением энергопотреблением.
Кодек JPEG имеет 6 флагов прерываний:
- IFNFF (Input FIFO Not Full), IFTF (Input FIFO Threshold) – управление входными данными для MDMA;
- OFTF (Output FIFO Threshold), OFNEF (Output FIFO Not Empty) – управление выходными данными для MDMA;
- EOCF (End Of Conversion) – окончание преобразования;
- HPDF (Header Parsing Done) – конец операции анализа заголовка.
Процесс декодирования следует базовому алгоритму JPEG (рисунок 4): данные файла отправляются во входной FIFO-буфер, заголовок файла анализируется (с генерацией прерывания по завершении), соответствующие таблицы внутренней RAM-памяти кодека обновляются. Сжатые данные обрабатываются энтропийным декодером, в результате чего генерируются минимальные единицы кодирования в зигзагообразном порядке. Полученные таблицы деквантизируются и преобразуются с помощью обратной дискретной функции косинусного преобразования (iDCT) в исходные данные изображения. Кодирование изображения в JPEG осуществляется точно также, но в обратном порядке.

Рис. 4. Декодирование JPEG
Для работы с ускорителем Codec JPEG в пакеты STM32Cube интегрирован специальный драйвер HAL: stm32h7xx_hal_jpeg.c / stm32h7xx_hal_jpeg.h.
Кроме того, в \Firmware\Utilities\JPEG доступны функции преобразования блоков MCU: JPEG_YCbCrToRGB_Convert_Function и JPEG_RGBToYCbCr_Convert_Function.
Портативные устройства имеют повышенные требования к энергопотреблению и размерам. В случае использования дисплеев, форма которых отличается от стандартной прямоугольной, можно использовать аппаратный модуль Chrom-GRC™. Он присутствует на микроконтроллерах STM32H7B0/7A3/7B3 и является аппаратным модулем, предназначенным для оптимизации использования памяти в соответствии с формой дисплея, кэширования линейных обращений к буферу кадра и предварительной выборки данных.
Основные характеристики Chrom-GRC (GFXMMU):
- полностью программируемая форма дисплея для хранения данных только видимых пикселей;
- до четырех виртуальных буферов;
- каждый виртуальный буфер имеет 1024 строки и 3072 или 4096 байт на каждую из строк;
- каждый виртуальный буфер может быть сопоставлен с любой системной памятью;
- дополнительное кэширование для линейного доступа;
- кэш может быть привязан к виртуальному буферу;
- механизм предварительной выборки из кэша для упреждения линейного доступа;
- прерывание при переполнении буфера или в случае ошибки передачи данных.
Chrom-GRC состоит из двух основных блоков (рисунок 5):
- MMU, ответственный за разрешение адресов;
- Кэш, отвечающий за кэширование данных/адресов, предварительную выборку и упаковку/распаковку данных.

Рис. 5. Блок-схема Chrom-GRC
Пространство виртуальной памяти разделено на четыре виртуальных буфера, каждый из которых рассматривается системой как непрерывное пространство памяти, представляющее виртуальный буфер кадра из 1024 строк. Физические местоположения виртуальных буферов настраивается независимо, например, можно разместить их в разных банках SDRAM. Обычно один буфер используется CPU/Chrom ART для вычисления буфера кадра, а другой используется интерфейсом дисплея LTDC. Два оставшихся буфера можно использовать для графической библиотеки, требующей наличия дополнительных буферов рисования. В случае ошибки переполнения буфера генерируется прерывание для каждого буфера (BxOF).
На рисунке 6 показаны виртуальное и фактическое представления данных в памяти микроконтроллера при использовании Chrom-GRC. Существуют два режима виртуального буфера:
- 192 блока на строку;
- 256 блоков на строку.

Рис. 6. Организация памяти в Chrom-GRC
Максимальные размеры виртуального буфера кадра для 192 и 256 блоков, соответственно, 768×1024 и 1024×1024 пикселей для 32-битного цвета, а также 1536×1024 и 2048×1024 для 16-битного цвета. В случае использования 24-битного цвета виртуальный буфер конфигурируется как 192 блока на строку, чтобы иметь целое число пикселей в строке, и его размер становится 1024х1024 пикселей.
Исключение из данных неиспользуемых блоков экрана позволяет существенно сэкономить память. Например, при использовании круглого дисплея диаметром 390 пикселей при цвете 24bpp размер требуемой «квадратной» памяти составит 445,6 кбайт, а в случае оптимизации при помощи Chrom-GRC – 355,5 кбайт. Уменьшение требуемого объема в этом случае на 20% может позволить отказаться от размещения внешней памяти, что немаловажно для портативных устройств.
Chrom-GRC конфигурируется в STM32CubeMX. В настройках параметров GFXMMU пользователь выбирает режим блока и виртуальный буфер, который будет использоваться, в интерфейсе конфигурации LUT пользователь должен ввести первый и последний видимые пиксели для каждой строки и выбрать глубину цвета буфера кадра. STM32CubeMX автоматически генерирует первый и последний блоки и значение смещения блока, а также вычисляется объем памяти, необходимый для физического буфера кадра.
Интерфейсы дисплеев
Микроконтроллеры серии STM32 имеют встроенный контроллер дисплея LTDC (LCD TFT Display Controller), позволяющий напрямую управлять панелями дисплея с высоким разрешением, которые не имеют собственного контроллера и графического ОЗУ. LTDC может управлять не только TFT-дисплеями, но и дисплеями, основанными на иных технологиях, такими как AMOLED с параллельным интерфейсом RGB.
Контроллер LTDC STM32H7 имеет следующие особенности:
- параллельный RGB-интерфейс до 24 бит;
- два графических слоя с выделенными FIFO-буферами 64×64 бит;
- 256-цветная палитра цветов (CLUT) 256×24 бит на каждый слой;
- программируемые временные задержки сигналов для различных дисплеев;
- программируемый цвет фона;
- программируемая полярность сигналов синхронизации и управления (HSYNC, VSYNC, DE);
- 8 форматов цвета для каждого слоя:
- ARGB8888;
- RGB888;
- RGB565;
- ARGB1555;
- ARGB4444;
- L8 (8-битный luminance или CLUT);
- AL44 (альфа-канал 4 бита и яркость 4 бита);
- AL88 (альфа-канал 8 бит и яркость 8 бит).
- псевдослучайный дизеринг для младших битов каждого канала R, G, B шириной 2 бита;
- гибкое смешивание обоих графических слоев с использованием полупрозрачности (попиксельно или константа);
- задание цвета прозрачности;
- программируемые размеры и положение окна;
- поддержка пользовательских и стандартных дисплеев;
- поддержка нестандартных и стандартных разрешений (QVGA, VGA, SVGA, WVGA, XGA, HD и другие);
- поддержка дисплеев с технологией TFT;
- мастер-интерфейс AXI с пакетом из 16 двойных слов;
- четыре программируемых вектора прерывания.

Рис. 7. Интерфейс дисплея LTDC
Применение STM32H7 + LTDC + дисплей с параллельным RGB-интерфейсом позволяет быстро и бюджетно разработать устройство с высококачественным графическим пользовательским интерфейсом. Однако в ряде случаев этого может быть не достаточно, так как ценой применения дешевого дисплея является в первую очередь использование большого количества выводов микроконтроллера – 20…28, без учета управления подсветкой и различных служебных каналов, не относящихся непосредственно к выводу графики. Кроме того, в случае большого расстояния между микроконтроллером и дисплеем может встать задача помехозащищенности, что потребует принятия дополнительных мер.
Микроконтроллеры серии STM32H747/757 могут использовать для подключения дисплея последовательный интерфейс MIPI-DSI (Mobile Industry Processor Interface – Display Serial Interface), блок-схема которого представлена на рисунке 8.

Рис. 8. Интерфейс дисплея MIPI-DSI
В этом случае существенно снижается количество задействованных выводов микроконтроллера (4…6), а данные передаются по дифференциальной линии (полосе). Каждая полоса действует как дифференциальная пара, работающая в двух режимах: высокоскоростном (HS) и режиме малого энергопотребления (LP). В режиме HS размах напряжения в линии составляет около 200 мВ от пика до пика, передача данных может осуществляться со скоростью до 1 Гбит/с. В этом режиме данные могут передаваться только с хоста на устройство. В режиме LP полоса способна передавать данные в несимметричном режиме двунаправленно, размах напряжения выше, как правило, 1,2 В, а скорость передачи данных составляет 10…20 Мбит/с.
Вывод графических данных осуществляется в одном из трех режимов, таких как:
- Режим видео – потоковая передача данных RGB и связанных сигналов синхронизации, непосредственно генерируемых LTDC. Потоковая передача начинается сразу, как только включаются хосты DSI и LTDC. Этот режим позволяет взаимодействовать с дисплеями экономичного сегмента, не имеющими графических контроллеров и ОЗУ.
- Командный режим APB – управление отображением информации на дисплее при помощи команд, аналогично управлению дисплеями с помощью последовательных интерфейсов SPI и FMC. Команды запускаются с помощью интерфейса DSI Host APB.
- Адаптированный командный режим – лучший способ взаимодействия с дисплеем, имеющим GRAM. Хост DSI захватывает один полный кадр, поступающий из LTDC, и преобразует его в серию команд записи для обновления содержимого GRAM дисплея.
Эти режимы позволяют использовать дисплеи как со встроенными контроллером графики и буферной памятью, так и без них.
Максимальное разрешение дисплея не регламентируется стандартом MIPI-DSI, так как зависит от пропускной способности линий связи между микроконтроллером и дисплеем, и в этом случае STM32H7 имеет преимущество – наличие двух полос позволяет передавать данные со скоростью до 2 Гбит/с.
Использование интерфейсов дисплеев LTDC и MIPI-DSI благодаря режиму видео и адаптированному командному режиму позволяет обновлять изображение на дисплее, не используя основные вычислительные ресурсы микроконтроллера. В ряде случаев это дополнительно снижает энергопотребление, так как дает возможность перевести микроконтроллер в спящий режим.
Средства разработки: от графической библиотеки до мощных IDE
Для быстрой разработки GUI существуют несколько библиотек и приложений, которые позволяют работать на любом уровне, от самостоятельного закрашивания пикселя и рисования графических примитивов до конструирования графического интерфейса, размещая методом drag-and-drop готовые графические элементы управления в WYSIWYG-редакторе.
Embedded Wizard
Комплекс разработки графических интерфейсов Embedded Wizard создан компанией TARA Systems. Его использование осуществляется на коммерческой основе, но для предварительной оценки возможностей существует ограниченная бесплатная версия.
Комплекс Embedded Wizard содержит широчайший набор инструментов и технологий для создания современного мультиязычного GUI, удовлетворяющего практически любые требования.
Из особенностей Embedded Wizard следует отметить наличие мощного инструмента Embedded Wizard Studio — современного и удобного редактора WYSIWYG, который обеспечивает:
- объектно-ориентированный, компонентный подход к разработке;
- интегрированную среду прототипирования и отладки для мгновенного тестирования приложения с графическим интерфейсом;
- генерацию исходного кода, оптимизированного для выбранной целевой системы;
- поддержку генерации документации из проекта;
- поддержку интерфейса командной строки (CLI) для интеграции в пакетные задания;
- локализацию изображений, текстов и других данных.
Embedded Wizard поддерживает анимированные изображения, способен работать с векторной графикой, импортировать глифы из шрифтов TrueType, анимированные переходы между кадрами и множество других операций.
Генерация кода осуществляется с оптимизацией производительности и использования памяти, требования к памяти целевого устройства выводятся в виде гистограммы.
Различные обработчики событий сенсорного экрана и распознавания жестов, клавиатуры или аппаратных кнопок, расширяемая структура для интеграции любых настраиваемых событий, таких как голосовое управление, позволяют реализовать значительную часть GUI непосредственно в этом комплексе.
Уникальная особенность Embedded Wizard – язык программирования Chora. Это универсальный, независимый от целевой системы язык программирования, позволяющий реализовать полную функциональность приложения с графическим интерфейсом пользователя, не полагаясь на какие-либо дополнительные инструменты разработки.
Использование комплекса Embedded Wizard поэтапно и подробно документировано, с чем можно ознакомиться по ссылке [6].
STemWin
Бесплатная графическая библиотека STemWin, предлагаемая без исходных кодов, основана на библиотеке emWin от компании Segger. При работе с микроконтроллерами STM32H7 данная библиотека использует один из двух доступных драйверов дисплея – LIN (линейное адресное пространство, шинный интерфейс) и интерфейс LTDC.
Особенности STemWin:
- богатый набор виджетов: кнопки, флажки, списки, календари, датчики и так далее;
- управление окнами и их взаимное перекрытие;
- возможность использования различных инструментов, таких как GUIBuilder, emVNC, emWinSPY, emWinView, Font Converter, JPEG2Movie и другие;
- функции экономии памяти: пул памяти, обновление только изменившихся участков и так далее;
- возможность работы с различными дисплеями;
- альфа-прозрачность, сглаживание, курсоры;
- поддержка протокола VNC для реализации удаленного дисплея;
- прямая работа с графикой: рисование фигур, вывод текста и прочее.
Для быстрого старта с STemWin поможет документация AN4323 «Начало работы с библиотекой STemWin» [5]. Для полноценной работы потребуется справочное руководство UM03001 «emWin. Graphic Library with Graphic User Interface».
Пример использования библиотеки STemWin представлен в листинге 2.
Листинг 2.
#include "GUI.h"
void Main(void)
{
__HAL_RCC_CRC_CLK_ENABLE();
GUI_Init();
GUI_DispString("Hello world!");
GUI_SetFont(GUI_FONT_COMIC24B_ASCII);
GUI_DispStringHCenterAt("Once again hello world!", LCD_GetXSize()/2, LCD_GetYSize()/3);
while(1);
}
Графическая библиотека STemWin вместе с дополнительным инструментарием удобно интегрируется в пакеты STM32Cubе.
Пример расположения: %username%\STM32Cube\Repository\STM32Cube_FW_H7_V1.9.0\Middlewares\ST\STemWin.
Использование STemWin не рекомендуется для новых приложений, так как ее развитие как отдельного продукта остановлено, и теперь поддержка осуществляется лишь для работоспособности старых проектов. Компания STMicroelectronics предлагает более современное решение – TouchGFX, фреймворк, оптимизированный для микроконтроллеров STM32H7 и обеспечивающий максимальную производительность при минимальной загрузке процессора и использовании памяти.
TouchGFX
TouchGFX — это современная бесплатная графическая программная среда разработки.. Используя преимущества графических функций и архитектуры STM32H7, TouchGFX ускоряет совершенствование HMI-вещей за счет создания высокотехнологичных графических пользовательских интерфейсов, подобных смартфонам.
TouchGFX входит в экосистему STM32Cube, поставляется в виде пакета X-Cube-TouchGFX и состоит из трех основных частей – двух инструментов и одного фреймворка:
- TouchGFX Designer – простой в использовании WYSIWYG-конструктор графического интерфейса пользователя в TouchGFX, который позволяет создать внешний вид приложения.
- TouchGFX Generator – плагин STM32CubeMX, позволяющий разработчику настраивать и генерировать собственный уровень абстракции (AL) TouchGFX – программный компонент, который находится между основным кодом инициализации устройства и TouchGFX Engine. Его основная задача – связать движок с операционной системой и базовым оборудованием устройств на основе STM32H AL состоит из двух разных частей: уровня абстракции оборудования (HAL) и уровня абстракции операционной системы (OSAL).
- TouchGFX Engine – платформа TouchGFX C++, которая управляет приложением пользовательского интерфейса, обрабатывая обновления экрана, пользовательские события и события времени.
TouchGFX Designer позволяет быстро освоить все особенности создания GUI благодаря поддержке демонстрационных плат на базе микроконтроллеров STM32 (рисунок 9) и наличию большого количества примеров, от простых часов до игр и сложных систем. Например, есть демонстрационный проект интерфейса умного дома.
Часть работы этого проекта можно посмотреть по ссылке [13], где он демонстрируется на отладочной плате STM32H735G-DK, построенной на базе микроконтроллера STM32H735IGK6U, имеющего 1 Мбайт Flash и 564 кбайт SRAM, и 4.3″ (480×272) TFT-дисплея с емкостным сенсором. На рисунке 10 показан кадр из демонстрации. На дисплее видно, что загрузка процессора составляет всего 5%, однако в этот момент за окнами движутся облака, а кнопки «Batchroom» и «Kitchen» плавно перемещаются из стороны в сторону.

Рис. 10. Работа отладочной платы STM32H735G-DK
Отсутствие готового прототипа устройства не является помехой для разработки интерфейса: TouchGFX Designer имеет встроенный симулятор, позволяющий оценить внешний вид и работу большинства функций графического интерфейса (рисунок 11), и является самостоятельным приложением, что дает возможность делегировать разработку другой стороне без необходимости установки всего комплекса программного обеспечения для работ с устройствами на базе STM32.

Рис. 11. Пример из симулятора TouchGFX Designer
TouchGFX Designer имеет более 30 настраиваемых виджетов, обеспечивает простое создание содержимого нескольких экранов и связанных переходов между экранами, предлагает набор готовых к использованию графических обложек, обеспечивающих единообразное создание прототипов без использования графического дизайнера, не имеет ограничений по использованию собственной графики. Поддерживаются несколько алфавитов, таких как латиница, кириллица, арабский, китайский и японский. Создание собственных виджетов возможно посредством написания как «с нуля», так и на базе стандартных виджетов – их исходный код доступен.
Наличие операционной системы не является обязательным, TouchGFX может быть использован и в варианте Bare metal.
Данный фреймворк генерирует производительный код C++, полностью отделенный от пользовательского кода и, помимо STM32CubeIDE, способен поддерживать несколько сторонних сред разработки, таких как IAR Embedded Workbench, Arm Keil и IDE на основе GCC.
Подробнейшая документация, объясняющая каждый этап создания графического интерфейса с помощью TouchGFX, находится по ссылке [3].
STM32H7 и возможности разработки GUI
Разработка графического интерфейса пользователя – трудоемкий, многоэтапный и ответственный процесс, включающий в себя аппаратные средства и программное обеспечение, отличающееся достаточно сложной математикой. Но успех интерфейса заключается в его эргономичности – именно ее оценит будущий пользователь. Высокая производительность работы с графикой микроконтроллеров линейки STM32H7 производства STMicroelectronics позволяет полностью раскрыть потенциал GUI, а наличие готовых библиотек и средств разработки освобождает больше времени для продумывания эргономики интерфейса.
Литература
- RM0455 Reference manual STM32H7A3/7B3 and STM32H7B0 Value line advanced Arm®-based 32-bit MCUs
- TouchGFXDesigner – TouchGFX is delivered as an X-Cube-TouchGFX package
- TouchGFX Documentation
- Rapid Graphic Prototyping with TouchGFX and STM32 Discovery Platforms: Tutorial Presentation
- AN4323 Getting started with STemWin Library
- Working with Embedded Wizard
- MIPI Display Serial Interface (MIPI DSI)
- AN4861 LCD-TFT display controller (LTDC) on STM32 MCUs
- AN4996 Hardware JPEG codec peripheral in STM32F76/77xxx and STM32H743/53/45/55/47/57/50/A3/B3/B0xx microcontrollers
- AN5051 Graphic memory optimization with STM32 Chrom-GRC™
- Разрабатываем устройство с графикой на STM32. Основные возможности периферии
- Разработка графических устройств на STM32. Выбираем графическую библиотеку
- Демонстрационное видео «STMicroelectronics TouchGFX Demo on STM32H735G DK»
Наши информационные каналы