Подключение дисплея к STM32H7 с помощью LTDC

18 ноября

потребительская электроникаавтоматизацияинтернет вещейуниверсальное применениеSTMicroelectronicsстатьяинтегральные микросхемыSTM32Cortex-M7TFTSTM32H7Chrom-ARTLTDCMIPI

Константин Кузьминов (г. Заполярный)

Сегодня разнообразие дисплеев посредством современных графических интерфейсов позволяет организовать «общение» пользователя практически с любым устройством. Обеспечить высокое качество этого взаимодействия поможет STMicroelectronics. С помощью новых микроконтроллеров STM32H7 открываются дополнительные возможности обработки и вывода качественных изображений на дисплее. Бесплатные и удобные средства разработки ST помогут быстро запустить устройство в массовое производство.

Рост и развитие промышленных и бытовых устройств увеличивают потребность в оснащении их графическим пользовательским интерфейсом – GUI (Graphical User Interface). Требования к качеству графики возрастают, что в свою очередь увеличивает количество аппаратных и программных ресурсов, а также необходимость в более высокой производительности микроконтроллера. Чтобы отвечать этим требованиям, часто используются отдельные микропроцессорные устройства, что может привести к более высоким затратам, усложнению конструкции и увеличению срока выхода на рынок.

Основа графической системы состоит из микроконтроллера, контроллера дисплея, буферной памяти и самого дисплея (рисунок 1).

Рис. 1. Базовая графическая система

Рис. 1. Базовая графическая система

MCU формирует изображение, которое затем хранится в буфере кадра. Изображение формируется как посредством вычислительных мощностей основного ядра, так и при помощи встроенных аппаратных графических ускорителей. В первом случае процесс работы с графикой может занять практически все машинное время, поэтому во всех представителях линейки STM32H7 производства компании STMicroelectronics [1] присутствует ускоритель Chrom-Art Accelerator, а в некоторых моделях добавлены аппаратные Codec JPEG, обеспечивающий работу со сжатыми изображениями и видео МJPEG, и Chrom-GRC, оптимизирующий работу с дисплеями непрямоугольной формы.

Буфер кадра (графическая память, GRAM) – это память, используемая для хранения пиксельных данных изображения. Требуемый размер буфера кадра зависит от разрешения и глубины цвета дисплея, например, для разрешения XGA (1024х768) при глубине цвета 24bpp (бит на пиксель) потребуется 2304 кбайт. При этом для реализации двойной буферизации, при которой во время отображения одного буфера данные записываются в другой, затем они «меняются» задачами, потребуется размер памяти вдвое больше.

Контроллер дисплея непрерывно обновляет изображение на дисплее, передавая содержимое GRAM на экран дисплея.

Существуют два типа дисплеев: со встроенными контроллером дисплея и GRAM, а также без них (присутствует только драйвер управления матрицей пикселей). Кроме того, дисплеи различаются технологиями отображения, например TFT и AMOLED. Способы управления TFT- и AMOLED-дисплеями практически идентичны, разница лишь в необходимости реализации управления подсветкой для TFT. Выбор дисплея, помимо размера и технологии отображения, может определяться несколькими критериями:

  • стоимостью (дисплей без контроллера и GRAM дешевле);
  • наличием свободных ресурсов или встроенного аппаратного контроллера дисплея в микроконтроллере;
  • интерфейсом подключения.

Организация MIPI® (Mobile Industry Processor Interface) Alliance [2], занимающаяся разработкой новых и регулированием существующих стандартов интерфейсов дисплея, определяет следующие основные варианты интерфейсов: MIPI-DBI, MIPI-DPI и MIPI-DSI.

MIPI-DBI (Display Bus Interface) – один из первых стандартов интерфейса дисплея со встроенными контроллером и GRAM. Он подразделяется на три типа:

  • A – используется параллельная шина Motorola 6800;
  • B – параллельная шина Intel 8080;
  • C – подключение через SPI.

MIPI-DPI (Display Pixel Interface) – параллельный 16…24-битный интерфейс RGB с сигналами вертикальной и горизонтальной синхронизаций. Этот высокопроизводительный интерфейс позволяет подключать более бюджетные дисплеи, не имеющие встроенного буфера кадров, но требует большого числа выводов микроконтроллера – 20…28, без учета подсветки и различных сервисных каналов.

MIPI-DSI (Display Serial Interface) – высокоскоростной последовательный интерфейс, использующий дифференциальные каналы с высокой пропускной способностью. Его применение позволяет значительно сократить число используемых выводов микроконтроллера, используя всего 4…6.

В таблице 1 показаны возможные варианты графической системы на основе микроконтроллеров STM32H7, в зависимости от стандарта дисплея.

Таблица 1. Варианты графической системы

Интерфейс дисплея Подключение дисплея к микроконтроллеру STM32H7 Микроконтроллеры
DBI Тип A
Motorola 6800
Все STM32H7
Тип B
Intel 8080
Тип C
SPI
DPI Все STM32H7, кроме STM32H742 и некоторых моделей в корпусах с малым количеством выводов
DSI На момент написания статьи – только STM32H747 и STM32H757

Примечание. В таблице не указано, но применение интерфейсов MIPI-DBI и MIPI-DPI возможно с использованием графических акселераторов Chrom-GRC и JPEG, встроенных в некоторые модели STM32H7, например, STM32H7B0/7A3/7B3.

Интерфейс LTDC микроконтроллеров STM32H7

Большинство микроконтроллеров серии STM32H7 (таблица 2) может подключаться к панели дисплея через встроенный контроллер LTDC (LCD-TFT Display Controller). Как было сказано выше, изображение формируется либо ресурсоемким путем при использовании вычислительных мощностей основного ядра, либо при помощи встроенных аппаратных графических ускорителей. Но есть еще один вариант: пересылка изображений из памяти на матрицу дисплея через встроенный аппаратный интерфейс LTDC.

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

Таблица 2. Микроконтроллеры STM32H7 со встроенным интерфейсом LTDC

Наименование Память Макс. частота, МГц Графические ускорители MIPI-DSI
Flash RAM (всего) Quad-SPI Octo-SPI AXI LTDC JPEG Chrom-GRC Chrom-ART
STM32H7A3/B3 1…2 Мбайт 1,4 Мбайт 140 280 140 + + +
STM32H7B0 128 кбайт 1,4 Мбайт 140 280 140 + + +
STM32H723/25/33/35 0,512…1 Мбайт 564 кбайт 140 275 150 +
STM32H730 128 кбайт 564 кбайт 140 275 150 +
STM32H743/45/53/55 1…2 Мбайт 1 Мбайт 133 240 150 + +
STM32H750 128 кбайт 1 Мбайт 133 240 150 + +
STM32H747/57 1…2 Мбайт 1 Мбайт 133 240 150 + + +

LTDC на микроконтроллерах STM32H7 представляет собой встроенный аппаратный контроллер ЖК-дисплея, который обеспечивает параллельный RGB-интерфейс (до 24 бит) и синхросигналы для взаимодействия с различными бюджетными дисплеями, в которых нет ни контроллера, ни графического ОЗУ. LTDC может автономно обращаться ко внутренней или внешней памяти для получения графических данных, даже когда микроконтроллер находится в спящем режиме. При этом, несмотря на использование в названии стандарта термина TFT, LTDC также может управлять AMOLED-дисплеями с RGB-интерфейсом. В таблице 3 приведены основные преимущества использования встроенного интерфейса LTDC микроконтроллеров STM32H7.

Таблица 3. Преимущества использования встроенного интерфейса LTDC

Преимущество Комментарий
Экономичность В отличие от других интерфейсов, LTDC позволяет подключаться к недорогому дисплею без встроенных контроллера и GRAM
Разгрузка основного ядра микроконтроллера LTDC – это мастер шины AXI со своим собственным прямым доступом к памяти, что позволяет автономно извлекать данные из любой памяти через AXI, без вмешательства основного ядра
Нет необходимости в дополнительном программном обеспечении LTDC полностью аппаратно управляет выборкой данных, выводом данных RGB и синхросигналами, поэтому для выполнения основной задачи не требуется постоянная работа каких-либо программных модулей
Полностью программируемое разрешение Программируемое разрешение с общей шириной до 4096 пикселей, общей высотой до 2048 строк и частотой обновления до 150 МГц позволяет поддерживать дисплеи как стандартных разрешений (QVGA, VGA, SVGA, WVGA, XGA, HD и других), так и нестандартных
Гибкий цветовой формат Каждый слой LTDC может быть индивидуально настроен для формирования буфера кадра в желаемом формате пикселей.
Гибкий RGB-интерфейс Параллельный интерфейс RGB позволяет управлять 16-, 18- и 24-битными дисплеями.
Идеально подходит для мобильных устройств с пониженным энергопотреблением, таких как умные часы LTDC может продолжать работу с графическими данными и отображением на дисплее, пока основное ядро микроконтроллера находится в спящем режиме
Набор графических эффектов Слои могут смешиваться с эффектом прозрачности, хромакеем, а также отображаться определенным прямугольным регионом

Контроллер LTDC имеет следующие особенности:

  • параллельный RGB-интерфейс до 24 бит;
  • 2 графических слоя с выделенными 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 бит яркость).
  • псевдослучайный дизеринг шириной 2 бита для каждого канала R, G, B;
  • полупрозрачное смешивание обоих графических слоев с использованием альфа-канала;
  • задание цвета прозрачности (хромакей);
  • прямоугольный регион вывода изображения – программируемые размеры и положение окна;
  • разрешение до 4096х2048 с частотой обновления пикселей до 150 МГц;
  • поддержка пользовательских и стандартных дисплеев;
  • поддержка нестандартных и стандартных разрешений (QVGA, VGA, SVGA, WVGA, XGA, HD и другие);
  • поддержка дисплеев с технологиями TFT и AMOLED;
  • AXI-интерфейс с пакетом из 16 двойных слов;
  • 4 программируемых вектора прерываний.

Устройство и общее функционирование контроллера LTDC наглядно отображены в блок-схеме на рисунке 2, а ниже в таблицах 4 и 5 описаны внутренние сигналы взаимодействия LTDC с основным ядром микроконтроллера и назначение выходных сигналов интерфейса дисплея.

Рис. 2. Блок-схема LTDC

Рис. 2. Блок-схема LTDC

Несмотря на то, что основная задача интерфейса LTDC – это транспортировка графических данных из памяти на RGB-интерфейс дисплея, LTDC способен выполнить несколько простых, но эффектных операций с изображениями, используя два буфера FIFO, которые можно включать, отключать, настраивать независимо друг от друга и рассматривать как слои графики. Включение и выключение осуществляется в регистрах LTDC_LxCR (Control Register) установкой или сбросом бита LEN (здесь и далее обозначение «x» в названии регистра заменяет номер слоя – 1 или 2). У каждого буфера устанавливается множество параметров, в частности, адрес и размер в следующих регистрах:

  • LTDC_LxCFBAR (Color Frame Buffer Address Register) – 32-битный адрес буфера (адрес данных первого верхнего пикселя);
  • LTDC_LxCFBLR (Color Frame Buffer Length Register): в поле CFBP[12:0] задается шаг строки в байтах (размер от начала одной строки до начала следующей строки), в поле CFBLL[12:0] задается длина строки пикселей в байтах + 7 (длина строки вычисляется следующим образом: количество пикселей * количество байт на пиксель + 7);
  • LTDC_LxCFBLNR (Color Frame Buffer Line Number Register) – 10-битное значение числа строк в буфере.

Настройки длины строки и количества строк используются для остановки выборки данных, и если настроенный размер будет меньше чем требуется, то будет сгенерировано (если разрешено) прерывание FUDERRIF (FIFO underrun). Если размер больше чем требуется, то лишние данные игнорируются.

Таблица 4. Карта пиксельных данных поддерживаемых форматов цвета

Цвет @+3 @+2 @+1 @
ARGB8888 Ax[7:0] Rx[7:0] Gx[7:0] Bx[7:0]
RGB888 Bx+1[7:0] Rx[7:0] Gx[7:0] Bx[7:0]
RGB565 Gx+2[2:0] Bx+2[4:0] Rx+1[4:0] Gx+1[5:3] Gx+1[2:0] Bx+1[4:0] Gx[2:0] Bx[4:0]
ARGB1555 Ax+1[0] Rx+1[4:0] Gx+1[4:3] Gx+1[2:0] Bx+1[4:0] Ax[0] Rx[4:0] Gx[4:3] Gx[2:0] Bx[4:0]
ARGB4444 Ax+1[3:0] Rx+1[3:0] Gx+1[3:0] Bx+1[3:0] Ax[3:0] Rx[3:0] Gx[3:0] Bx[3:0]
L8 Lx+3[7:0] Lx+2[7:0] Lx+1[7:0] Lx[7:0]
AL88 Ax+1[7:0] Lx+1[7:0] Ax[7:0] Lx[7:0]
AL44 Ax+3[3:0] Lx+3[3:0] Ax+2[3:0] Lx+2[3:0] Ax+1[3:0] Lx+1[3:0] Ax[3:0] Lx[3:0]

Данные в буферах FIFO могут принадлежать к различным форматам цвета (таблица 4), формат указывается в регистрах LTDC_LxPFCR (Pixel Format Configuration Register) и следующим этапом обработки данных будет преобразование их во внутренний формат ARGB8888. Те данные, которые были шириной менее 8 бит или отсутствовали (альфа-канал), будут дополнены до 8-битного размера дублированием старших бит. На рисунке 3 показан пример конвертации формата RGB565.

В случае использования индексированных форматов L8, AL88 и AL44 имеется возможность включить таблицу преобразования цветов (Color Look-Up Table, CLUT, палитра), установив бит CLUTEN регистров LTDC_LxCR и настроив таблицу в регистрах LTDC_LxCLUTWR (CLUT Write Register). Это единственные регистры LTDC, которые не имеют затенения. Работа с ними может выполняться только в период гашения или при выключенном слое. Форматы L8 и AL88 потребуют загрузить в CLUT 256 цветов, а в AL44 – 16 цветов. Адрес каждого цвета устанавливается полем CLUTADD[7:0] в регистрах LTDC_LxCLUTWR, притом для формата AL44 это происходит следующим образом:

  • L0 (индексированный цвет 0) по адресу 0x00;
  • L1 по адресу 0x11;
  • L2 по адресу 0x22;
  • L15 по адресу 0xFF.

Рис. 3. Конвертация формата RGB565 во внутренний формат ARGB8888

Рис. 3. Конвертация формата RGB565 во внутренний формат ARGB8888

Порядок отображения слоев фиксированный: если включены оба слоя, слой 2 будет отображаться на переднем плане. При отображении слоев всегда активно полупрозрачное смешивание между ними, оно настраивается установкой значений факторов смешивания в регистрах LTDC_LxBFCR (Blending Factors Configuration Register) и значений альфы в регистрах LTDC_LxCACR (Constant Alpha Configuration Register). Как и отображение, смешивание слоев тоже имеет фиксированный порядок: сначала слой 1 смешивается с цветом фона, а затем слой 2 смешивается с результатом предыдущего смешивания (рисунок 4).

Рис. 4. Порядок отображения и смешивания слоев

Рис. 4. Порядок отображения и смешивания слоев

Даже если какой-то слой выключен, он все равно будет участвовать в смешивании как слой определенного цвета (рисунок 5). Этот цвет определяется в регистре LTDC_LxDCCR (Default Color Configuration Register) в формате ARGB888. Отменить смешивание ненужного слоя можно лишь настройками фактора смешивания и альфа-канала.

Цвет фона программируется через регистр LTDC_BCCR (Background Color Configuration Register), его можно задать в формате RGB888, где поле BCRED [7: 0] используется для значения красной составляющей цвета, BCGREEN [7: 0] – зеленой и BCBLUE [7: 0] – синей.

Рис. 5. Смешивание слоев и фона

Рис. 5. Смешивание слоев и фона

Использование регистров LTDC_LxCKCR (Color Keying Configuration Register), где задается значение цвета, и бита COLKEN в регистрах LTDC_LxCR, отвечающего за включение или выключение эффекта, дает возможность задать прозрачный цвет изображения (рисунок 6). Обычно подобный эффект называется хромакей, его отличие от альфа-канала в том, что прозрачность задается не для всех пикселей изображения, а только для пикселей определенного цвета и только на 100%, то есть совпадающие с заданным цветом пиксели просто не отображаются.

Рис. 6. Использование Color Keying

Рис. 6. Использование Color Keying

Каждому графическому слою можно задать некоторый размер и положение внутри активной области дисплея, что позволяет отобразить не только полное изображение (размером с активную область) но и его регион (рисунок 7). Положение и размер региона определяют первый и последний видимые пиксели в строке, а также первую и последнюю видимую строки в регионе. Значения положения и размера региона можно динамично изменять во время работы приложения, они задаются в регистрах LTDC_LxWHPCR (Window Horizontal Position Configuration Register) и LTDC_LxWVPCR (Window Vertical Position Configuration Register).

Рис. 7. Настройка размеров и положения окна слоя

Рис. 7. Настройка размеров и положения окна слоя

В регистре LTDC_GCR (Global Control Register) существует возможность включения псевдослучайного дизеринга путем установки бита DEN и задания цвета RGB в полях DRW[2:0], DGW[2:0] и DBW[2:0]. Дизеринг используется для добавления небольшого случайного значения к каждому значению цветового канала пикселя, округляя старшие биты, что может потребоваться, например, при отображении 24-битных данных на 18-битном дисплее.

После обработки графические данные готовы к передаче на дисплей. В самом начале статьи на блок-схеме LTDC, изображенной на рисунке 2, можно увидеть, что для подключения дисплея к микроконтроллеру STM32H7 через интерфейс LTDC используются выходы, представленные в таблице 5.

Таблица 5. Выходные сигналы параллельного RGB-интерфейса LTDC

Сигнал LCD-TFT Описание
LCD_CLK Тактовый сигнал данных пикселей (частота пикселей)
LCD_HSYNC Горизонтальная (строчная) синхронизация: сигнал управляет горизонтальной разверткой и действует как строб строки.
LCD_VSYNC Вертикальная (кадровая) синхронизация: сигнал управляет вертикальной разверткой и действует как строб обновления кадра
LCD_DE Сигнал подтверждает, что данные на шине RGB действительны и должны быть приняты для отображения
LCD_R[7:0] 8-битные данные красного цвета
LCD_G[7:0] 8-битные данные зеленого цвета
LCD_B[7:0] 8-битные данные синего цвета

Следует учесть, что при подключении дисплеев с меньшей разрядностью цвета подключение шины RGB-интерфейса должно осуществляться с использованием старших битов, как это показано на рисунке 8.

Рис. 8. Подключение дисплея меньшей разрядности цвета

Рис. 8. Подключение дисплея меньшей разрядности цвета

Обычно интерфейсы панели дисплея используют и другие сигналы, необходимые для полной функциональности дисплея, но контроллер LTDC может управлять только сигналами, описанными в таблице 5. Прочие сигналы, такие как сброс, инициализация, управление подсветкой, яркостью, контрастом и так далее, реализуются через стандартные GPIO и периферийные устройства, обычно SPI или I2C.

Вывод на дисплей может осуществляться в трех форматах цвета, позволяя подключить следующие дисплеи:

  • 16-битный формата RGB565;
  • 18-битный формата RGB666;
  • 24-битный формата RGB888.

Кроме того, в регистре LTDC_GCR настраивается полярность управляющих сигналов (HSYNC, VSYNC и DE). Это позволяет микроконтроллеру STM32H7 управлять большинством дисплеев с параллельным RGB-интерфейсом.

Для корректного отображения графических данных на дисплее необходимо настроить тайминги (временные параметры сигналов). Благодаря гибкости таймингов LTDC может поддерживать дисплеи различных размеров с общей шириной до 4096 пикселей и общей высотой до 2048 строк. Пользователь должен настроить четыре регистра таймингов, описанных в таблице 6, в соответствие со спецификацией дисплея. Изображения на рисунках 9 и 10 наглядно объясняют данные параметры.

Таблица 6. Регистры таймингов и разрешения дисплея.

Регистр Параметр тайминга Возможные значения
LTDC_SSCR (Synchronization Size Configuration Register) HSW[11:0] HSYNC width – 1 1…4096 пикселей
VSH[11:0] VSYNC height – 1 1…2048 строк
LTDC_BPCR (Back Porch Configuration Register) AHBP[11:0] HSYNC width + HBP – 1 1…4096 пикселей
AVBP[10:0] VSYNC height + VBP – 1 1…2048 строк
LTDC_AWCR (Active Width Configuration Register) AAW[11:0] HSYNC width + HBP + active width – 1 1…4096 пикселей
AAH[10:0] VSYNC height + VBP + active height – 1 1…2048 строк
LTDC_TWCR (Total Width Configuration Register) TOTALW[11:0] HSYNC width + HBP + active width + HFP – 1 1…4096 пикселей
TOTALH[10:0] VSYNC height + VBP + active height + VFP – 1 1…2048 строк

Рис. 9. Параметры таймингов на примере одного кадра дисплея с активной шириной 480 пикселей

Рис. 9. Параметры таймингов на примере одного кадра дисплея с активной шириной 480 пикселей

Когда LTDC разрешен, генерация таймингов начинается с позиции X/Y = 0/0 (начало кадра).

Когда LTDC запрещен, буфер FIFO сбрасывается, генерация таймингов устанавливается в X = Total Width – 1, Y = Total Height – 1, происходит фиксация перед фазой вертикальной синхронизации. В результате на дисплей постоянно выводятся только данные гашения.

Рис. 10. Тайминги и разрешение экрана

Рис. 10. Тайминги и разрешение экрана

Для тактирования, автономной передачи данных и эффективного взаимодействия с основной программой микроконтроллера, в том числе с различными энергорежимами, LTDC имеет несколько внутренних тактовых сигналов и сигналов прерывания (таблица 7).

Таблица 7. Внутренние сигналы LDTC

Внутренний сигнал LTDC Направление Описание
ltdc_aclk Вход Тактирование домена AXI
ltdc_pclk Вход Тактирование домена APB
ltdc_ker_ck Вход Тактирование сигнала LCD_CLK
Если этот сигнал отсутствует, доступ к регистрам LTDC может вызвать зависание. Порядок включения:
1. включить pll3_r_ck для активации ltdc_ker_ck;
2. включить LTDC, установив бит LTDCEN в регистре RCC_APB3ENR.
ltdc_li_it Выход Триггер для MDMA
ltdc_it Выход Глобальное прерывание (Line и Register reload)
ltdc_err_it Выход Глобальное прерывание ошибки (FIFO underrun и Transfer error)

LTDC предоставляет 4 маскируемых прерывания – по два на каждый вектор глобального прерывания:

  • LIF (Line) генерируется при достижении запрограммированной в регистре LTDC_LIPCR строки пикселей;
  • RRIF (Register reload) генерируется при перезагрузке теневых регистров во время периода вертикального гашения;
  • FUDERRIF (FIFO underrun) генерируется при ошибке запроса пиксельных данных из FIFO (буфер пуст);
  • TERRIF (Transfer error) генерируется при ошибке на шине AXI во время передачи данных.

Источники прерываний могут быть включены или отключены индивидуально путем установки или сброса соответствующего бита в регистре LTDC_IER.

Режимы работы STM32H7 (таблица 8) оказывают прямое влияние на периферийное устройство LTDC. В спящем режиме интерфейс продолжает выводить графические данные на экран и, как мастер AXI, может продолжать выборку данных из FMC, Quad-SPI или Octo-SPI (когда используется режим отображения памяти), его прерывания могут быть сконфигурированы для пробуждения основного ядра. Благодаря этому и интеллектуальной архитектуре, встроенной в микроконтроллеры STM32 и позволяющей включать все периферийные устройства даже в спящем режиме, в мобильных устройствах реализуется необходимая экономичность энергопотребления. В режимах ожидания и остановки LTDC отключен, любые сигналы на выходе его параллельного интерфейса отсутствуют. После выхода из режима ожидания LTDC должен быть заново инициализирован. Сброс интерфейса LTDC осуществляется установкой бита LTDCRST в регистре RCC_APB2RSTR.

Таблица 8. Состояние LTDC в зависимости от режима микроконтроллера.

Режим Состояние LTDC
Run Активен
Sleep Активен; прерывания могут активировать микроконтроллер
Stop Остановлен; состояние регистров сохранено
Standby Выключен; состояние регистров при выходе из режима требует инициализации

Практическая оценка интерфейса LTDC в графической экосистеме STM32H7

Чтобы оценить возможности интерфейса LTDC на практике, можно воспользоваться удобными программными и аппаратными инструментами, такими как бесплатные среда разработки STM32CubeIDE и кодогенератор/конфигуратор STM32CubeMX, пакет STM32CubeH7, среда разработки графического интерфейса TouchGFX designer, набор для изучения STM32H750B-DK.

Рис. 11. STM32H750B-DK

Рис. 11. STM32H750B-DK

Комплект STM32H750B-DK представляет собой платформу для демонстрации и разработки устройств на базе микроконтроллера STMicroelectronics ARM® Cortex®-M7 STM32H750XB. Этот комплект используется для разработки и отладки эталонных проектов с последующим переносом на конечный продукт, что упрощает и ускоряет разработку пользовательских приложений. На плате доступен полный спектр аппаратных функций и развиты почти все периферийные устройства, установлены цифровой микрофон, SDRAM, Flash-память Quad-SPI, дисплей с емкостной мультисенсорной панелью, разъемы Arduino™ Uno V3. Отладчик и программатор STLINK-V3E интегрирован в плату и дополнительно выполняет функцию виртуального COM-порта USB.

Основные характеристики STM32H750B-DK:

  • STM32H750XBH6 – Cortex-M7 с 128 кбайт Flash и 1 Мбайт RAM в корпусе TFBGA240+25;
  • 3”-дисплей WQVGA 480х272 с 24-битным RGB-интерфейсом и сенсорной панелью;
  • 10/100 Ethernet IEEE-802.3-2002 и POE;
  • аудиокодек SAI;
  • цифровой ST-MEMS-микрофон MP34DT01TR-M;
  • память: 2×512 Мбит Quad-SPI NOR Flash, 128 Мбит SDRAM и 4 Гбайт eMMC;
  • 2 кнопки: пользовательская и кнопка сброса;
  • плата расширения;
  • 2 x FDCANs;
  • разъемы: USB OTG FS Micro-AB, ST-LINK Micro-B USB, USB power Micro-B, Ethernet RJ45, аудио (стереовыход для наушников, внешних динамиков и вход для аналогового микрофона), TAG-Connect 10-pin, STMod+, Arduino™ Uno V3, Arm® Cortex® 10-pin 1.27 мм для отладки через STDC14;
  • несколько вариантов питания: STLINK-V3 USB, разъем USB FS, 5 V через RJ45 (POE), Arduino UNO или разъем CN3;
  • функции USB charger и USB power;
  • встроенный программатор-отладчик STLINK-V3E, обеспечивающий через USB функционал отладки и виртуального COM-порта, а также дающий доступ к eMMC.

Для создания графического приложения необходимо точно определить его потребности, такие как разрешение экрана и глубину цвета, характер отображаемых данных – только текст, статические изображения или анимация, количество изображений и так далее. После этого определяется аппаратная архитектура приложения: микроконтроллер, интерфейс дисплея, необходимость во внешней памяти, ее размер и тип. В таблице 9 показан необходимый объем памяти в зависимости от разрешения и глубины цвета. Данные указаны для одного кадра, в случае двойной буферизации объем необходимо удвоить.

Таблица 9. Размер GRAM в зависимости от дисплея

Разрешение
экрана
Количество пикселей Размер буфера кадра в зависимости от глубины цвета, кбайт
8 bpp 16 bpp 24 bpp 32 bpp
QVGA (320×240) 76800 75 150 225 300
Пользовательский (480×272) 130560 128 255 383 510
HVGA (480×320) 153600 150 300 450 600
VGA (640×480) 307200 300 600 900 1200
WVGA (800×480) 384000 375 750 1125 1500
SVGA (800×600) 480000 469 938 1407 1875
XGA (1024×768) 786432 768 1536 2304 3072
HD (1280×720) 921600 900 1800 2700 3600

Чтобы успешно передать большой объем данных кадра, необходимо убедиться, что требуемая полоса пропускания соответствует шине. Для этого рассчитывается необходимая частота обновления пикселей, то есть LCD_CLK: общие (а не только активные) ширина и высота дисплея умножаются друг на друга и на частоту обновления экрана (частоту кадров). Затем LCD_CLK умножается на глубину цвета каждого слоя, если используются оба, или одного, если используется только один слой. В таблице 10 указана максимально возможная частота обновления пикселей в зависимости от глубины цвета, типа внешней GRAM и использования графического ускорителя Chrom-ART, при условии, что системная частота (HCLK) STM32H742/43/45/47/50/53/55/57 равна 240 МГц, STM32H7A3/B3/B0 – 280 МГц, SDRAM/HyperRAM – 110 МГц.

Таблица 10. Максимальная частота обновления пикселей.

Количество слоев LTDC Наименование Глубина цвета, бит на пиксель Максимальная частота обновления пикселей, МГц
LTDC LTDC + Chrom-ART
Разрядность SDRAM (FMC), бит HyperRAM 8-бит DDR (OCTO-SPI) Разрядность SDRAM (FMC), бит HyperRAM 8-бит DDR (OCTO-SPI)
16 32 16 32
1 STM32H742/43/45/47, STM32H750/53/55/57 32 49 93 29 48
24 66 124 38 64
16 99 150 58 96
8 150 150 116 150
STM32H7A3/B3/B0 32 52 97 52 30 50 22
24 70 130 70 40 66 29
16 105 140 105 60 100 44
8 140 140 140 121 140 89

На STM32H750B-DK используется дисплей RK043FN48H-CT672B производства компании Rocktech Displays Limited с драйвером OTA5180A [11], [12]. Дисплей требует соответствия параметрам, указанным в таблице 11.

Таблица 11. Характеристики дисплея RK043FN48H-CT672B

Параметр/сигнал Значения
мин. ном. макс.
Частота LCD_CLK, МГц 5 9 12
Период LCD_CLK, нс 83 110 200
Горизонталь TOTALW, такт LCD_CLK 490 531 605
HSW, такт LCD_CLK 480
HSYNC, такт LCD_CLK 1
HBP, такт LCD_CLK 8 43
HFP, такт LCD_CLK 2 8
Вертикаль TOTALH, строка 275 288 335
VSW, строка 272
VSYNC, строка 1 10
VBP, строка 2 12
VFP, строка 1 4

Проанализировав их, можно убедиться, что при номинальных значениях данный дисплей может работать с частотой кадров более 50 Гц, а частота LCD_CLK позволяет работать даже в самых тяжелых условиях, таких как 2 слоя, 16-битная внешняя SDRAM и 32-битная глубина цвета. Возможности STM32H750B-DK более чем отвечают этим требованиям. Благодаря тому, что компания STMicroelectronics уже создала готовые примеры работы с этой платой, в них присутствуют все необходимые настройки интерфейса LTDC и сервисных функций для работы установленных микроконтроллера, SDRAM и дисплея, и в этом случае определение характеристик излишне. Однако в случае использования иных компонентов проверка характеристик обязательна, и далее на простом примере будет показано, где они настраиваются в проектах для сред разработки, а также приведен базовый набор действий для старта разработки программы.

Есть несколько вариантов создания проекта для оценки работы LTDC на плате STM32H750B-DK: с использованием TouchGFX designer, STM32CubeIDE или STM32CubeMX.

TouchGFX designer – это WYSIWYG-конструктор графического интерфейса пользователя (GUI), который может не только создать дизайн, но и сгенерировать проекты приложения для различных сред разработки: STM32CubeIDE, IAR Embedded Workbench, Arm Keil и иных IDE с GCC. Создание проекта начинается с выбора платы STM32H750B-DK (рисунок 12).

Рис. 12. Начало работы с TouchGFX

Рис. 12. Начало работы с TouchGFX

После этого, определив путь для проекта и его наименование, нажимаем кнопку «Create», и программа открывает редактор. Чтобы проверить работу интерфейса LTDC и дисплея, достаточно создать самое простое – отображение логотипа компании STMicroelectronics. Для этого необходимо разместить виджет контейнера изображений и загрузить в него логотип, предварительно сохраненный в файле формата PNG. Дизайн интерфейса готов, и далее разработчику доступны следующие действия: генерация кода, запуск в симуляторе или запуск непосредственно на демонстрационной плате (рисунок 13).

Рис. 13. Создание интерфейса и генерация кода в TouchGFX

Рис. 13. Создание интерфейса и генерация кода в TouchGFX

Запуск генерации кода создает все необходимые файлы для дальнейшего использования (рисунок 14).

Рис. 14. Файлы проекта после генерации в TouchGFX designer

Рис. 14. Файлы проекта после генерации в TouchGFX designer

Теперь проект можно открыть в STM32CubeIDE, чтобы внести какие-либо свои изменения в алгоритм работы программы и скомпилировать для дальнейшей загрузки. В функции void MX_LTDC_Init(void) (файл main.c) видно, как TouchGFX автоматически настроил слой LTDC в объекте playerCFG и проинициализировал тайминги для установленного дисплея (листинг 1).

Листинг 1.



static void MX_LTDC_Init(void)

{

/* USER CODE BEGIN LTDC_Init 0 */

/* USER CODE END LTDC_Init 0 */

LTDC_LayerCfgTypeDef pLayerCfg = {0};

/* USER CODE BEGIN LTDC_Init 1 */

/* USER CODE END LTDC_Init 1 */

hltdc.Instance = LTDC;

hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;

hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;

hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;

hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;

hltdc.Init.HorizontalSync = 39;

hltdc.Init.VerticalSync = 8;

hltdc.Init.AccumulatedHBP = 42;

hltdc.Init.AccumulatedVBP = 11;

hltdc.Init.AccumulatedActiveW = 522;

hltdc.Init.AccumulatedActiveH = 283;

hltdc.Init.TotalWidth = 528;

hltdc.Init.TotalHeigh = 285;

hltdc.Init.Backcolor.Blue = 0;

hltdc.Init.Backcolor.Green = 0;

hltdc.Init.Backcolor.Red = 0;

if (HAL_LTDC_Init(&hltdc) != HAL_OK)

{

Error_Handler();

}

pLayerCfg.WindowX0 = 0;

pLayerCfg.WindowX1 = 480;

pLayerCfg.WindowY0 = 0;

pLayerCfg.WindowY1 = 272;

pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;

pLayerCfg.Alpha = 255;

pLayerCfg.Alpha0 = 0;

pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;

pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;

pLayerCfg.FBStartAdress = 0;

pLayerCfg.ImageWidth = 480;

pLayerCfg.ImageHeight = 272;

pLayerCfg.Backcolor.Blue = 0;

pLayerCfg.Backcolor.Green = 0;

pLayerCfg.Backcolor.Red = 0;

if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)

{

Error_Handler();

}

/* USER CODE BEGIN LTDC_Init 2 */

/* USER CODE END LTDC_Init 2 */

}

TouchGFX также выполнил конфигурацию всей доступной памяти, эффективно используя установленную внешнюю 2×512-Мбит Quad-SPI NOR Flash и разместив в ней ресурсоемкие данные, такие как изображение логотипа (рисунок 15).

Рис. 15. Проект в STM32CubeIDE: размещение логотипа в памяти

Рис. 15. Проект в STM32CubeIDE: размещение логотипа в памяти

TouchGFX designer быстро и эффективно создает проект приложения, но это не единственный вариант. Если требуется разработка под конкретную IDE и графическая задача приложения не требует полноценного GUI (например, нужен только вывод результатов анализа какого-то сигнала и текстовой информации), то более удобным может оказаться работа с конфигуратором STM32CubeMX. Для этого в STM32CubeMX создается проект на основе STM32H750B-DK (рисунок 16).

Рис. 16. Выбор STM32H750B-DK в STM32CubeMX.jpg

Рис. 16. Выбор STM32H750B-DK в STM32CubeMX.jpg

На дальнейшем шаге проекта, STM32CubeMX предложит автоматически инициализировать периферийные устройства и установит все необходимые данные, но далее будет показано, как сконфигурировать LTDC в ручном режиме. Окно конфигурации LTDC вызывается из выпадающего списка слева Multimedia. Включение интерфейса осуществляется выбором типа дисплея, например, “RGB888 (24 bits)”, после чего доступна установка необходимых таймингов (рисунок 17). Здесь от разработчика требуется внимательность, поскольку может иметь место различное описание работы развертки, в результате чего итоговые данные могут отличаться от ожидаемых. Например, если для дисплея RK043FN48H-CT672B установить номинальные значения таймингов, то окажется, что TOTALH и TOTALW будут больше номинальных значений спецификации. Это связано с тем, что компания Rocktech Displays Limited считает, что ширина сигналов HSYNC и VSYNC поглощена шириной сигналов HPB и VPB, соответственно. Это видно в разделе «7.3.2 SYNC Mode Timing Diagram» документа [11]. Подобное описание синхронизаций не совпадает с их трактовкой на рисунке 10 и алгоритмом калькуляции в STM32CubeMX.

Рис. 17. Установка таймингов LTDC в STM32CubeMX

Рис. 17. Установка таймингов LTDC в STM32CubeMX

После установки таймингов ниже в этом же окне устанавливаются поляризация управляющих сигналов (LCD_DE, LCD_HSYNC, LCD_VSYNC – Active low, LCD_CLK – Normal input) и цвет фона.

Следующий этап – настройка графического слоя LTDC, цвета слоя по умолчанию, размера буфера кадра и режимов смешивания. Все это легко настраивается во вкладке «Layer Settings». Пример настройки однослойного варианта показан на рисунке 18. Необходимо помнить: независимо от числа слоев смешивание происходит всегда, так как данные слоя смешиваются с цветом фона.

Рис. 18. Настройка графического слоя в STM32CubeMX

Рис. 18. Настройка графического слоя в STM32CubeMX

На вкладке “NVIC Settings” можно выбрать использование прерывания интерфейса (глобального и ошибок).

Один из самых ответственных этапов конфигурирования, требующих внимательности, это настройка GPIO на вкладке «GPIO Settings», поскольку микроконтроллер имеет альтернативный функционал выводов, а он уже распаян на отладочной плате. К счастью, STM32CubeMX знает все соответствия сигналов выводам периферийных устройств платы STM32H750B-DK, в том числе сигналы управления дисплеем LCD_BL, LCD_DISP, LCD_RST и LCD_INT (пункт “GPIO” в списке «System Core»), и в данном случае ничего настраивать не нужно.

Далее на вкладке «Clock Configuration» выполняется настройка частот. Задача – тактировать LTDC частотой около 9 МГц, согласно спецификации дисплея, установленного на STM32H750B-DK. Тактирование осуществляется от внешнего кварцевого резонатора 25 МГц, и возможные деления и умножения частоты могут влиять на интерфейсы SAI, SPI, USB, USART и UART, если их тактирование будет от PLL3. Так как спецификация дисплея допускает довольно-таки большой разброс по частоте (5…12 МГц), оптимально выполнить сначала условие работы других интерфейсов на максимально возможной и соответствующей частоте. Установка коэффициента деления DIVM3 равным 1 (рисунок 19), а коэффициента умножения DIVN3 равным 32 даст частоту 800 МГЦ, что является близкой к максимальной частоте (960 МГц) на выходе DIVN3. В дальнейшем она легко может делиться для обеспечения работы вышеуказанных интерфейсов. Чтобы теперь получить частоту для LTDC, близкую к 9 МГц, достаточно подобрать коэффициент DIVR3, например, 87 даст 9,195402 МГц. Частота кадров дисплея получится 60 Гц.

Рис. 19. Настройка тактирования LTDC

Рис. 19. Настройка тактирования LTDC

Передача данных в буфер выполняется по шине AXI и/или из внешней памяти, а значит, необходимо настроить частоту тактирования AXI и HCLK3 (рисунок 20).

Рис. 20. Настройка тактирования AXI

Рис. 20. Настройка тактирования AXI

Конфигурация интерфейса LTDC завершена и после настройки остальных модулей, необходимых для проекта, и опций в “Project Manager” можно генерировать код для дальнейшего использования в выбранной IDE.

Использование интерфейса LTDC в микроконтроллерах STM32H7

Интерфейс LTDC имеет лишь одно возможное неудобство: как и все прочие параллельные интерфейсы, он требует много линий сигналов. Но это полностью компенсируется возможностью работы с очень большим количеством вариантов дисплеев, притом недорогих и практически любых размеров в пределах максимальных ширины и высоты до 4096 и 2048 пикселей, соответственно. Высокая пропускная способность 64-битной шины AXI микроконтроллеров STM32H7 гарантирует отличное качество изображения данных на дисплее.

Полностью аппаратное функционирование, практически не требующее написания кода, возможность независимо от основного ядра пересылать изображения из внешней памяти на дисплей, попутно применяя эффекты и положение картинки, простота и скорость разработки конечного приложения, наличие бесплатных средств разработки серии STM32Cube и TouchGFX – все это делает LTDC очень привлекательным для применения в любых областях: промышленных, коммерческих или любительских.

Литература

  1. STM32H7 – Arm Cortex-M7 and Cortex-M4 MCUs (480 MHz) – STMicroelectronics
  2. Сайт компании MIPI Alliance, Inc.
  3. AN4861 LCD-TFT display controller (LTDC) on STM32 MCUs
  4. LTDC в STM32H7
  5. Разрабатываем устройство с графикой на STM32. Основные возможности периферии
  6. RM0399 STM32H745/755 and STM32H747/757 advanced Arm®-based 32-bit MCUs
  7. STM32H745/747/755/757xx Errata sheet
  8. TouchGFX advanced and free of charge graphical framework optimized for STM32 microcontrollers
  9. STM32 Embedded Software
  10. Discovery kit with STM32H750XB MCU
  11. Дисплей RK043FN48H-CT672B
  12. Драйвер дисплея OTA5180A
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
NUCLEO-H723ZG (ST)
STM32H735G-DK (ST)
STM32H7B3ZIT6Q (ST)
STM32H7B0VBT6 (ST)
STM32H7B0VBT6TR (ST)
STM32H730VBT6 (ST)
STM32H750VBT6 (ST)
STM32H750VBT6TR (ST)
STM32H747IGT6 (ST)
STM32H725REV6 (ST)