STM Урок 73. HAL. LTDC. EmWin. Подключение библиотеки. Часть 1

 

 

 

 

Урок 73

 

Часть 1

 

HAL. LTDC. EmWin. Подключение библиотеки

 

 

Ну вот и пришла та заветная пора, когда мы уже как следует изучили подключение и работу интерфейса LTDC, а также панели Touch Screen. И теперь мы можем на нашем дисплее и на нашей плате STM32F746-DISCOVERY попробовать что-нибудь посерьёзнее.

Ну и, соответственно, выбор пал на библиотеку emWin, которая, что очень важно, бесплатная, и в то же время она включает в себя очень много интересных пунктов — создание оконных менеджеров с различными типами управляющих элементов и виджетов, поддержка мультибуферной технологии, поддержка слоёв, работа с изображениями многих типов, а также многое и многое другое. Также данный выбор был обусловен многочисленными просьбами со стороны подписчиков, посететелей групп и просьбами в личных сообщениях. Я не мог не откликнуться на эту волну желаний посетителей моих ресурсов и очень долгое время изучал тонкости данной библиотеки, и кое-что мне удалось. Поэтому мне не терпится поделиться своими знаниями с вами. Вот ссылка на сайт разработчика библиотеки. Здесь вы можете ознакомиться с возможностями библиотеки, а также что-нибудь скачать из документации. Саму библиотеку лучше скачивать на сайте ST Microelectronics. В принципе её вообще не нужно скачивать. Достаточно обновить генератор проектов Cube Mx и взять все неоходимые файлы из репозитория своей серии контроллеров. У нас седьмая серия и мы будем брать файлы библиотеки из соответствующей этой серии папки. Как это делается, мы увидим в процессе подключения библиотеки.

Ну давайте теперь всё-таки что-нибудь попробуем сочинить.

Проект мы создадим из проекта урока 72 с именем TOUCH_FT5336, присвоив ему новое имя LTDC_EMWIN_001 и запустим его в Cube MX.

Необходимо будет проделать ряд настроек проекта.

В пункте FMC -> SDRAM 1 -> Internal bank number установим все 4 банка вместо двух, и наче у нас будет памяти SDRAM всего 4 мегабайта вместо существующих 8 мегабайт

 

image00

 

Ну и также, соответственно в "Configuration" в "Cortex M7 Configuration" в пункте MPU Region Size установим размер памяти для кэширования 8 мегабайт

 

image01

 

В видеоускорителе DMA2D выберем другой основной режим, а также другой ALPHA режим

 

image02

 

В FMC немного прибавим задержку в самотестировании

 

image03

 

В LTDC в слоях также несколько изменим настройки, включив там 2 слоя

 

image04

 

Также в LTDC включим глобальные прерывания

 

image05

 

Включим DMA в I2C3 (обратите внимание, в RX поток изменён)

 

image06 image07

 

Вернёмся в Pinout и включим там таймер 6 для обновления событий от тачскрина

 

image08

 

Перейдём в Configuration и настроим там наш таймер TIM6

 

image09

 

Включим прерывания в нашем таймере

 

image10

 

Также в NVIC Configuration установим 5 уровень приоритета на прерывания от таймера

 

image11

 

Ну, думаю, пока хватит с настройками, итак уже много настроили.

 

 

Сгенерируем проект, запустим System Workbench и подключим там его.

Остальные настройки делаем аналогично прошлым проектам.

Соберём проект и запустим его, чтобы проверить, что он работает.

А вот теперь начнётся самое интересное — подключение библиотеки.

Первым делом давайте создадим папку для подключения файлов библиотеки. Можно это сделать прямо в WorkBench. Назовём её "GUI"

 

image12

image13

 

Аналогичным образом в папке GUI создадим две папки — inc и lib

 

image14

 

Теперь давайте наполним наши папки содержимым. Как я и говорил, файлы библиотеки можно скачать с сайта ST Microelectronics, а можно скорировать из репозитория. Ну давайте воспользуемся первым вариантом. Библиотека на момент написания урока находилась в архиве с именем en.stemwin.zip, а внутри единственная папка с именем STemWin_Library_V1.2.0. У STM версии свои, вот в конце видимо и есть номер версии. Извлечём папку из архива и всё содержимое папки "STemWin_Library_V1.2.0LibrariesSTemWinLibrary532inc" скопруем в папку "GUI/inc" нашего проекта, сняв также аттрибут "только для чтения" с файлов, содержащихся в папке. Затем из папки "STemWin_Library_V1.2.0LibrariesSTemWinLibrary532Lib" скопируем файл "STemWin532_CM7_GCC.a" в папку "GUI/lib" проекта. Это статическая библиотека с реализацией функций, прототипы и описания которых лежат в заголовочных файлах, так как библиотека поставляется не с открытым кодом.

Файл конфигурации GUIConf.h скопируем из папки репозитория "Диск:UsersпользовательSTM32CubeRepositorySTM32Cube_FW_F7_V1.7.0MiddlewaresSTSTemWinConfig" в папку "Inc" проекта, а файл GUIConf.c — в папку "Src".

Файл конфигурации GUI_X.c из папки репозитория "Диск:UsersпользовательSTM32CubeRepositorySTM32Cube_FW_F7_V1.7.0MiddlewaresSTSTemWinOS" скопируем в папку "Src" проекта.

Файл LCDConf.h скопируем из папки репозитория "Диск:UsersпользовательSTM32CubeRepositorySTM32Cube_FW_F7_V1.7.0ProjectsSTM32746G-DiscoveryApplicationsSTemWinSTemWin_HelloWorld" в папку "Inc" проекта, а файл LCDConf_Lin_Template.c скопируем из папки скачанной библиотеки "STemWin_Library_V1.2.0LibrariesSTemWinLibrary532Config" в папку "Src" проекта, переименовав его просто в LCDConf.c.

Также не забываем снимать с файлов аттрибут "только для чтения", где он установлен.

С копированием пока всё.

Вернёмся в WorkBench, сделаем нашему проекту Refresh, зайдём в настройку проекта и добавим там следующие настройки.

В пункте настроек "C/C++ General -> Paths and Symbols -> Includes => GNU C" добавим три папки: "GUI", "GUI/lib" и "GUI/inc", косые черты добавляем именно такие

 

image19

 

В этом же диалоге перейдём на закладку "Library Paths" и добавим там пункт "GUI/lib"

 

image20

 

Опаять в этом же диалоге перейдём в закладку "Libraries" и добавит туда имя нашей статической библиотеки, обязательно поставив перед именем без пробелов двоеточие (:)

 

image17

 

Применим настройки и попробуем собрать проект. Если ошибки касаются только файла LCDConf.c, то будем считать что мы настроили проект правильно и подключили библиотеку тоже правильно.

Теперь нам предстоит нелёгкая задача — сконфигурировать её и адаптировать к нашему железу и дисплею.

Перейдём сначала в файл main.h и подключим там библиотеку и ещё несколько файлов

 

/* USER CODE BEGIN Includes */

#include "stm32f7xx_hal.h"

#include "GUI.h"

#include "WM.h"

#include "stdint.h"

/* USER CODE END Includes */

 

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

 

/* USER CODE BEGIN 2 */

MT48LC4M32B2_init(&hsdram1);

HAL_LTDC_SetAddress(&hltdc,LCD_FRAME_BUFFER,0);

TFT_FillScreen(LCD_COLOR_BLACK);

Touch_Ini();

__HAL_RCC_CRC_CLK_ENABLE();

GUI_Init();

GUI_SetBkColor(GUI_DARKBLUE);

GUI_Clear();

if(f_mount(&SDFatFs, (TCHAR const*)SD_Path, 0) != FR_OK)

{

  TFT_FillScreen(LCD_COLOR_RED); //в случае неудачи окрасим экран в красный цвет

  Error_Handler();

}

/* USER CODE END 2 */

 

Мы здесь инициализируем библиотеку, назначим для фона экрана тёмно-синий цвет и очистим экран.

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

Также есть обязательное требование — включение тактирования CRC. Без этого библиотека не инициализируется.

 

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

 

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

 

 

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

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM HAL. LTDC. EmWin. Подключение библиотеки

2 комментария на “STM Урок 73. HAL. LTDC. EmWin. Подключение библиотеки. Часть 1
  1. Rahoo:

    привет спасибо за уроку.
    Я попытался перевести уроки 73 HAL Emwin с F746 на F429, но я не мог делать это в течение нескольких дней. А можно видео снимать STM32CubeMX Emwin generated code для STM32F429-disco. Best Regards

  2. кр580вм80а:

    Платы сильно отличаются по дисплеям и не в пользу 429. Но все решаемо.
    Для STemWin есть примеры в репозитории CubeMX, начните с hello world, дополняя своими функциями.

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

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

*