Разработка графических устройств на STM32. Выбираем графическую библиотеку
23 октября 2018
Начатую еще в прошлом году серию статей под условным названием «STM32 + периферия = LOVE» [1, 2, 3] продолжает обзор графических библиотек, позволяющих упростить и ускорить вывод на рынок готового изделия. Рассмотрены универсальная библиотека STemWin и более сложные, но предназначенные для топовых серий STM32 библиотеки Embedded wizard и TouchGFX.
Микроконтроллеры STM32 популярны среди отечественных разработчиков благодаря хорошему сочетанию цены, производительности, набора периферийных устройств и интерфейсов. Тенденции рынка встраиваемых устройств таковы, что во многих случаях требуется наличие графического пользовательского интерфейса или, как минимум, интуитивно понятное отображение данных или визуализации процессов. С аппаратной точки зрения в семействе STM32 представлены микроконтроллеры со специализированными периферийными блоками, которые используются для работы с TFT-дисплеями: FSMC, LTDC, DSIHOST, Chrom-ART Accelerator, Chrom-GRC и JPEG-кодек. Во многих случаях они позволяют существенно разгрузить процессорное ядро [3].
При разработке устройств с графическим интерфейсом перед разработчиком встает проблема выбора между реализацией собственных графических примитивов и библиотек, и применением готовых библиотек. Первый путь приведет к необходимости написания кода для отрисовки двух-/трехмерных объектов, реализации функций прозрачного слоя, решению вопросов наложения объектов в трехмерных сценах и многому другому, не считая необходимости реализации низкоуровневых драйверов. Применение готовых библиотек потребует от разработчика перехода к определенному стилю кода, характерному для целевой библиотеки. Дополнительно разработчику необходимо будет изучить специфику работы с готовой библиотекой – порядок инициализации функций и структур данных, наличие callback-функций, задействованные ресурсы контроллера.
Первый путь, конечно, дает возможность полностью контролировать код, его производительность и размер, но требует значительных затрат рабочего времени, большая часть которого уйдет на тестирование и отладку графического кода в ущерб решению основной задачи. Поэтому в большинстве случаев оптимальным выбором при построении графических устройств является использование готовых библиотек, существенно экономящее время вывода устройств на рынок.
Библиотека STemWin
Графическая библиотека для встраиваемых устройств STemWin, представленная компанией Segger, может работать и в однозадачном, и в многозадачном окружениях с проприетарной операционной системой или с любой из коммерческих RTOS. Библиотека может быть настроена для работы с любым устройством отображения – дисплеем или экраном, – вне зависимости от типа контроллера дисплея и целевого контроллера [4]. Пробная полнофункциональная версия библиотеки доступна на сайте производителя после регистрации.
Позиционируется как профессиональный инструментарий для создания и поддержки графического интерфейса для встраиваемых систем.
При разработке программного обеспечения обычно возникает выбор между подключением к проекту набора внешних файлов и созданием библиотеки. Если используемый инструментарий поддерживает так называемую «умную» сборку (smart linking), при которой в исполняемый код попадают только структуры и функции, реально задействованные в коде проекта, то особой необходимости в формировании специализированной библиотеки нет. В противном случае все прикрепленные к проекту файлы и функции в них будут скомпилированы и собраны в бинарном коде проекта, который в итоге будет иметь неоправданно большой размер.
В общем случае процедура включения STemWin в проект следующая: подключаются файлы ядра библиотеки, драйвер экрана, используемые шрифты и все дополнительные модули STemWin, которые планируется использовать.
Следующим шагом является конфигурирование STemWin. Задаются следующие параметры:
- размер памяти, отводимый под STemWin;
- драйвер экрана;
- процедуры преобразования цветов;
- процедуры инициализации контроллера экрана;
- использование аппаратных ускорителей;
- прикладные задачи, работающие с графикой.
STemWin поставляется с набором примеров и руководств по применению, которые помогают начать работать с библиотекой.
Партнерство с Segger Microcontroller GmbH & Co. KG позволяет компании STMicroelectronics предоставить потребителям своих микроконтроллеров библиотеку STemWin [5].
Библиотека STemWin представляет собой комплексное решение для работы с графикой, обладающее богатым набором функций, таких как декодирование форматов JPG, GIF и PNG, поддержка виджетов (флажки, кнопки и прочее) и сервера VNC. Это позволяет реализовывать функционал удаленного дисплея. Предлагается также инструментарий (например, GUIBuilder) для создания диалоговых окон по принципу drag-and-drop. Эта графическая библиотека полностью интегрирована в пакеты прошивки STM32Cube, например, STM32CubeF2, STM32CubeF3 и STM32CubeF4).
Последние версии библиотеки можно найти, скачав ПО STM32Cube.
Структура библиотеки STemWin представлена на рисунке 1.

Рис. 1. Структура библиотеки STemWin
Библиотека содержит два драйвера дисплеев (таблица 1):
- драйвер с прямым доступом LIN-драйвер;
- драйвер с косвенным доступом – FlexColor-драйвер для работы с экранами с последовательной или параллельной шиной управления.
Список поддерживаемых отладочных плат приведен в таблице 2.
Таблица 1. Возможности драйверов библиотеки STemWin
Драйвер | Поддерживаемые контроллеры экранов | Поддерживаемое количество бит цветности |
---|---|---|
LIN-драйвер | Драйвер поддерживает любой контроллер дисплея с линейным адресным пространством и шинным интерфейсом. Видеопамять напрямую адресуется адресными линиями процессора. Это означает, что видеопамять напрямую направляется по адресу линий ЦП. | 1, 2, 4, 8, 16, 24, 32 |
FlexColor-драйвер | Epson: S1D19122 FocalTech: FT1509 Himax: HX8353, HX8325A, HX8357, HX8340, HX8347, HX8352A, HX8352B, HX8301 Hitachi: HD66772 Ilitek: ILI9320, ILI9325, ILI9328, ILI9335, ILI9338, ILI9340, ILI9341, ILI9342, ILI9163, ILI9481, ILI9486, ILI9488, ILI9220, ILI9221 LG Electronics: LGDP4531, LGDP4551, GDP4525 Novatek: NT39122 OriseTech: SPFD5408, SPFD54124C, SPFD5414D Raio: RA8870, RA8875 Renesas: R61505, R61516, R61526, R61580 Samsung: S6E63D6, S6D0117 Sitronix: ST7628, ST7637, ST7687, ST7735, ST7712 Solomon: SSD1284, SSD1289, SSD1298, SSD1355, SSD2119, SSD1963, SSD1961, SSD1351 Syncoam: SEPS525 |
16, 18 |
Таблица 2. Список отладочных плат, поддерживаемых STemWin
Наименование МК | Отладочная плата | Интерфейс дисплея | Драйвер |
---|---|---|---|
STM32F0 | STM32091C-EVAL | SPI | FlexColor |
STM32F1 | STM3210C-EVAL STM3210E-EVAL |
SPI FSMC |
FlexColor |
STM32F2 | STM322xG-EVAL | FSMC | FlexColor |
STM32F3 | STM32303C-EVALSPI STM32303E-EVALSPI STM32373C-EVAL |
SPI | FlexColor |
STM32F4 | STM32F412G-DISCO STM32F413G-DISCO STM32F429I-DISCO STM32F4x9I-EVAL STM32F4xG-EVAL STM32F446E-EVAL STM32F469I-EVAL STM32F469I-DISCO |
FMC FMC LTDC LTDC FSMC FMC LTDC/DSI LTDC/DSI |
FlexColor FlexColor Lin Lin FlexColor FlexColor Lin Lin |
STM32F7 | STM32F723E-DISCO STM32F769I-EVAL STM32F769I-DISCO STM32F746G-DISCO STM32F756G-EVAL |
FMC LTDC/DSI LTDC/DSI LTDC LTDC |
FlexColor Lin Lin Lin Lin |
STM32H7 | STM32H743I-EVAL | LTDC | Lin |
STM32L1 | STM32L152D-EVAL | FSMC | FlexColor |
STM32L4 | STM32L49I-EVAL-MB1314 STM32L49I-EVAL-MB1315 STM32L49I-DISCO STM32L476G-EVAL STM32L496G-DISCO |
GFXMMU/LTDC/DSI LTDC GFXMMU/LTDC/DSI FMC FMC |
Lin Lin Lin FlexColor FlexColor |
Пример вывода строки «Hello World!» на экран с использованием средств библиотеки:
void main(void) {
int xPos, yPos;
__HAL_RCC_CRC_CLK_ENABLE();
GUI_Init();
xPos = LCD_GetXSize() / 2;
yPos = LCD_GetYSize() / 3;
GUI_SetFont(GUI_FONT_COMIC24B_ASCII);
GUI_DispStringHCenterAt("Hello world!", xPos, yPos);
while(1);
}
Некоторые этапы разработки графического интерфейса при помощи GUIBuilder представлены на рисунке 2 [6].

Рис. 2. Этапы разработки графического интерфейса при помощи GUIBuilder
открыть картинку в полном формате
Библиотека TouchGFX
TouchGFX — это программная среда, принадлежащая компании Draupner Graphics. В июле 2018 года компания STMicroelectronics приобрела эту компанию. В ближайшем будущем появится полностью бесплатный релиз библиотеки TouchGFX для микроконтроллеров STM32. Но уже сейчас можно скачать библиотеку и попробовать ее возможности.
Библиотека позволяет создавать встроенные графические интерфейсы с высококачественной графикой и плавной анимацией. TouchGFX включает в себя простой в использовании графический редактор TouchGFX Designer с поддержкой технологии drag & drop [7].
TouchGFX включает в себя алгоритмы рендеринга и новые усовершенствованные механизмы рисования, оптимизированные для встраиваемых контроллеров, начиная с серий ARM Cortex M. В итоге достигается высокая производительность графического интерфейса и плавная анимация с частотой кадров 25 и более при типовой загрузке процессорного ядра менее 15%. Поддерживаются разрешения экранов вплоть до WSVGA 1024×600. Список отладочных плат, поддерживаемых TouchGFX, приведен в таблице 3.
На текущий момент поддерживаются следующие контроллеры [8]:
Таблица 3. Список отладочных плат, поддерживаемых TouchGFX
Отладочная плата | Микроконтроллер | Дисплей, ″ | Сенсор |
---|---|---|---|
STM32F429-DISCO | STM32F429 ARM Cortex M4, 180 MHz | 2,4 | Резистивный |
STM324x9I-EVAL | STM32F429 ARM Cortex M4, 180 MHz | 4,3 | Резистивный |
STM324x9I-EVAL | STM32F439 ARM Cortex M4, 180 MHz | 5,7 | Емкостной |
STM32469I-EVAL | STM32F469I ARM Cortex M4, 180 MHz | 4,0 (800×480) | Емкостной |
STM32F469I-DISCO | STM32F469I ARM Cortex M4, 180 MHz | 4,0 (800×480) | Емкостной |
STM32F746G-DISCO | STM32F746 ARM Cortex M7, 200 MHz | 4,3 | Емкостной |
STM32746G-EVAL | ST STM32F746 ARM Cortex M7, 200 MHz | 5,7 | Емкостной |
STM32756G-EVAL | STM32F756 ARM Cortex M7, 200 MHz | 5,7 | Емкостной |
STM32F769I-DISCO Hex file available here | STM32F769 ARM Cortex M7, 200 MHz | 4,0 | Емкостной |
STM32769I-EVAL | STM32F769 ARM Cortex M7, 200MHz | 4,0 | Емкостной |
TouchGFX отлично работает с системами, где TFT-контроллер интегрирован в MCU с кадровыми буферами во внешней памяти или с системами, которые используют ЖК-дисплей со встроенным буфером и контроллером экрана. Требования к ресурсам TouchGFX зависят от размера и сложности конкретного приложения. Типичные требования к реализации GUI:
- Внутренняя память:
- 10…20 кбайт (фреймворк и стек);
- 1…15 кбайт (виджеты).
- Внутренний ПЗУ:
- 20 кбайт (фреймворк);
- 1…100 кбайт (определения экрана, логика графического интерфейса).
- Внешняя оперативная память, зависящая от разрешения дисплея и количества кадровых буферов:
- 320×240 QVGA-дисплеев с двумя кадрами = 307 кбайт;
- 480×272 WQVGA-дисплеев с двумя кадрами = 522 кбайт;
- 800×480 WVGA-дисплеев с двумя кадрами = 1,5 Мбайт.
- Внешняя постоянная память, зависящая от общего размера и количества графических элементов, обычно – 1…8 Мбайт.
TouchGFX может работать с ОС (требуется одна выделенная задача и два семафора) или без нее.
Работа с дизайнером графического интерфейса TouchGFX Designer достаточно проста, но вместе с тем позволяет создавать красочные и элегантные интерфейсы (рисунок 3 [9]).

Рис. 3. Работа TouchGFX Designer
открыть картинку в полном формате
Инструментарий Embedded wizard
Embedded wizard [10] является кроссплатформенным инструментом для разработки и создания графических интерфейсов, работающим даже на не очень мощных встраиваемых контроллерах. Embedded Wizard поддерживают серии контроллеров STM32 – F4, F7, F1 и L4 [11, 12]. Разработчикам предлагаются свободная версия библиотеки с ограниченным набором шрифтов, опций, предварительно скомпилированными файлами и ограниченной функциональностью, версия для малого бизнеса – с полной функциональностью, и профессиональная версия с исходными текстами, техподдержкой и возможностью работы с более чем 60 типами контроллеров.
Библиотека упрощает разработку графического интерфейса пользователя и позволяет создавать высокопроизводительные графические интерфейсы с минимальными усилиями. Инструментарий поддерживает применение 2D-графического ускорителя ST Chrom-ART™ в тех микроконтроллерах, в которых он доступен.
С помощью встроенного мастера GUI Builder разработчик может быстро и легко разрабатывать и развертывать HMI. Предлагается набор готовых к использованию и настраиваемых виджетов, таких как кнопки, слайдеры и текстовые представления практически на любой вкус. Возможна настройка их анимации и привязка требуемой функциональности. На основе полученного шаблона генерируется исходный код, который может быть в дальнейшем скомпилирован и загружен в целевой контроллер (рисунок 4 [13]).

Рис. 4. Встроенный мастер GUIbuilder
открыть картинку в полном формате
Предлагается достаточно много готовых примеров графических интерфейсов для плат Discovery (серий F4, F7).
Заключение
С помощью встраиваемых графических библиотек трудоемкий процесс разработки и отладки пользовательского интерфейса для встраиваемых систем существенно упрощается. Сильно сокращается время, затрачиваемое на интерфейс, что позволит уделить больше внимания основному функционалу и быстрее вывести продукт на рынок.
Рассмотренные программные продукты для контроллеров STM32 похожи по функционалу, но несколько отличаются по предлагаемым возможностям. STemWin – самая «демократичная», она позволяет без проблем работать со многими сериями контроллеров, включая бюджетные, но может показаться, что создаваемые с ее помощью интерфейсы несколько простоваты по дизайну (по крайней мере, из типовых примеров и набора элементов).
Embedded wizard и TouchGFX предлагают более комплексные и яркие элементы и шаблоны интерфейсов. Однако они поддерживают, в основном, более мощные серии контроллеров STM32, и для создания более продвинутых интерфейсов требуется приобретение полной версии библиотеки.
Литература
- Вячеслав Гавриков. TFT-дисплеи Winstar: новинки, характеристики и особенности подключения. Новости Электроники №11, 2017 г
- Вячеслав Гавриков. STM32 + современный TFT-дисплей: варианты на любой вкус. Новости Электроники №1, 2018 г
- Вячеслав Гавриков. Разрабатываем устройство с графикой на STM32. Основные возможности периферии. Новости Электроники №5, 2018 г
- emWin — The Embedded GUI by SEGGER _ It simply works!
- STemWin — Professional graphical stack library enabling the building up of Graphical User Interfaces (GUIs) (AN4323). STMicroelectronics
- enWin GUIbuilder Demo
- TouchGFX Framework Empower Embedded Displays
- Supported Hardware. TouchGFX
- TouchGFX Designer Demo
- GUI Builder. Embedded Wizard
- Real World GUIs for STM32F4. Embedded Wizard
- Stunning GUIs for STM32F7 Discovery Board. Embedded Wizard
- Embedded Wizard Demo
Наши информационные каналы