STM Урок 64. HAL. LTDC. Часть 1

 

 

 

 

Урок 64

HAL. LTDC

 

Часть 1

 

 

Сегодня мы попробуем поработать непосредственно с интерфейсом LTDC. Это, как мы уже знаем из нашего занятия по LCD, который мы программировали в уроке 58, параллельный интерфейс для управления жидкокристаллическим дисплеем. В сегодняшнем занятии мы также будем работать с тем же дисплеем, который находится на плате STM32F746G-DISCO. Только с интерфейсом LTDC, посредством которого подключен дисплей, мы уже будем работать не с помощью библиотеки BSP, а будем уже писать свою библиотеку со своими функциями, исключительно пользуясь только функциями библиотеки HAL.

Дисплей на данной плате у нас установлен RK043FN48H-CT672B. Даташит именно на такой дисплей я не нашел, по ссылкам попадал на многие аналоги, и поэтому за основу был взят дисплей AM-480272H3TMQW-T01H,

Вообщем, наша задача на сегодняшний день — отвязать управление данным дисплеем от библиотеки BSP, так как она нас приковывает к определённой отладочной плате и не даёт нам простора в программировании впоследствии других дисплеев с другими контроллерами. Ну и, конечно, тем самым мы уже плотно познакомимся с интерфейсом LTDC и не будем его бояться в дальнейшем.

Посмотрим подключение дисплея в схеме нашей отладочной платы (нажмите на картинку для увеличения изображения)

 

Image00_0500

 

В глаза бросается сразу то, что очень здесь много информационных ножек. Но это не так. Их ровно сколько нужно. Так как интерфейс у нас параллельный, и работает он по протоколу RGB888, то как раз по 8 ножек на каждый цвет, то есть у нас идёт три байта на пиксель. Также мы видим здесь две ножки для управления тачскрином с помощью I2C, пока мы тачскрин в рамках данного занятия не рассматриваем.

Дальше идём слева сверху вниз.

SLK — ножка подачи тактовых импульсов.

LCD_HSYNC — ножка синхронизации по горизонтали.

LCD_VSYNC — ножка синхронизации по вертикали.

LCD_DE (Data Enable) — ножка включения передачи данных. Включаем, только когда непосредственно нужно передавать данные.

LCD_DISP — ножка режима. Если 1 — то режим нормальный, если 0 — то дежурный режим.

LCD_BL_A — ножка анода подсветдки.

LCD_BL_K — ножка катода подсветдки.

LCD_INT — ножка для управления по прерываниям.

LCD_RST — ножка для перезагрузки.

Ну и снизу ножка питания и несколько ножек для общего провода.

Управление подсветкой происходит с помощью специализированного драйвера подсветки собственного производства компании ST Microelectronics STLD40D.

Ну и вроде бы и всё со схемой.

Также скажу то, что нам не придется вообще как-то самим управлять с помощью нашего кода непосредственно данными ножками. Данную функцию возьмёт на себя библиотека HAL.

Пора теперь заняться проектом. Создадим пустой проект, выбрав наш контроллер STM32F746NGx.

Как всегда, сначала включим тактирование кварцевым резонатором

 

Image01

 

Также включим RNG — генератор случайных чисел

 

Image02

 

Включим интерфейс для ST-Link — SWD

 

Image03

 

Ну и, собственно, LTDC

 

Image04

 

Теперь перейдём в Clock Configuration и настроим там делители и умножители. Сначалам можно согласиться с автонастройкой

 

Image05

 

Image06

 

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

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

 

Pin No

Pin Name

Signal or Label

A1

PE4

LTDC_B0

B9

PJ13

LTDC_B1

C4

PK7

LTDC_DE

C5

PK6

LTDC_B7

C6

PK5

LTDC_B6

C7

PG12

LTDC_B4

C9

PJ14

LTDC_B2

D5

PI10

LTDC_HSYNC

D7

PK4

LTDC_B5

D10

PJ15

LTDC_B3

E4

PI9

LTDC_VSYNC

F12

PK1

LTDC_G6

F13

PK2

LTDC_G7

G4

PI15

LTDC_R0

G12

PJ11

LTDC_G4

G13

PK0

LTDC_G5

H3

PI14

LTDC_CLK

H12

PJ8

LTDC_G1

H13

PJ10

LTDC_G3

J12

PJ7

LTDC_G0

J13

PJ9

LTDC_G2

K12

PJ6

LTDC_R7

M9

PJ4

LTDC_R5

M14

PJ5

LTDC_R6

N8

PJ3

LTDC_R4

P7

PJ2

LTDC_R3

R6

PJ0

LTDC_R1

R7

PJ1

LTDC_R2

 

По сравнению с FMC, в которой ремапить пришлось всего одну ножку, здесь наоборот ремапятся почти все, а остаются без переноса всего 6 ножек. Ну ничего, нам к труднстям не привыкать. Поэтому следует переключить в Pinout все ножки, которые в таблице обозначены красным цветом.

 

 

Также включим ножку PI1, отвечающую за зелёный светодиод, на выход

 

Image08

 

 

Кроме непосредственно ножек LTDC есть ещё 2 служебные:

D8    PK3     LCD_BL_CTRL

E3    PI12     LCD_DISP

Назначение данных ножек мы уже знаем. Поэтому включим их на выход и настроим в Configuration скорость в High, а также установим на них высокий уровень при старте

 

Image15

 

Также установим высокую скорость для всех остальных ножек LTDC. Для этого здесь же зайдём на вкладку LTDC, встанем на любую строку и нажмём комбинацию Ctrl+A, чтобы всё выделилиось и после этого Maximum output speed выставим в High

 

Image14

 

Теперь перейдём в Configuration и настроим там Cortex_M7 следующим образом (нажмите на картинку для увеличения изображения)

 

Image10_0500

 

Если не настроить регионы, то кэш работать не будет. Проверено.

Теперь непосредственно настройка LTDC. Здесь я всё настроил, подглядев в настройки в пример, а также поглядывая в datashit на тот дисплей, который я нашел, найти вы данный даташит сможете без проблем. Показать не могу, так как во все страницы стоит заставка "Не для копирования"

 

Image11

 

Также перейдём в закладку слоёв, включим там 1 слой и настроим его

 

Image12

 

Как вы видите, мы выбрали режим 16 бит на пиксель, так как у нас будет ограничено количество памяти. LTDC не предусматривает контроллер с памятью, поэтому память мы видеопамять мы должны предоставить сами. Для этого и впаяна микросхема SDRAM на нашей платы. Но мы сегодня попробуем обойтись без неё ибо всему своё время. Мы попробуем для дисплея использовать участок оперативной памяти. Конечно, это не есть хорошо, но для учебных целей очень даже поучительно. Соответственно графический ускоритель мы также не используем. Его время тоже ещё не настало.

Ну вот вроде и всё, засиделись мы что-то в Cube-MX, руки уже чешутся писать код.

Поэтому зайдём в настройки проекта и настроим всё вот так, назвав проект LTDC001 и также добавив кучу и стек

 

Image13

 

Сгенерируем проект, откроем его в Keil, а остальную работу над проектом мы продолжим в следующей части нашего урока.

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Отладочную плату можно приобрести здесь 32F746G-DISCOVERY

 

 

Смотреть ВИДЕОУРОК

 

STM32 HAL. LTDC

7 комментариев на “STM Урок 64. HAL. LTDC. Часть 1
  1. Евгений:

    По дисплею навскидку: https://github.com/cnoviello/stm32-discof7/blob/master/stm32-discof7-lcdtest/system/include/Components/rk043fn48h/rk043fn48h.h

    Днями направлю DS на этот специально адаптированный для ST дисплей.

  2. Archil:

    Здравствуйте, не пробовали ли Вы, подключить к плате STM32F746G-DISCO —  EmWin ? Никак не получается, да и примера подходящего не нашел. Вообще плата прекрасная и EmWIn это как раз для нее. А если еще и с BSP — вообще будет супер.

    Кстати, здесь http://www.digikey.com/products/en?keywords=STM32F746G-DISCO она за 50,00 $.

  3. Archil:

    Если я правильно Вас понял, Вы хотите сделать универсальную библиотеку, с помощью которой можно будет работать с EmWin с любой платформой, так как BSP привязанна к конкретной плате. Если это так, мне кажется, что это трудно осуществимая задача, так как сам Egger делает различия для разных платформ. Возможно я Вас просто неправильно понял, но желание отвязаться от BSP ничем другим не могу объяснить. Я останусь при своем мнении — есть конкретная плата, есть библиотека для нее и надо выполнить локальную задачу — привязаться к EmWin. Если долго мучиться…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*