Урок 73
Часть 3
HAL. LTDC. EmWin. Подключение библиотеки
В предыдущей части занятия мы произвели конфигурирование ряда библиотечных настроек, а также добавили некоторые функции для работы библиотеки emWin с дисплеем.
Добавим в конце файла ещё одну функцию-обработчик — HAL_LTDC_LineEvenCallback, которая вызывается в случае, когда происходит прерывание от линии LTDC, сигнализирующее о конце кадра. Мы обработаем данное прерывание, чтобы переключить буферы в случае использования нескольких
//----------------------------------------------------------------------------
void HAL_LTDC_LineEvenCallback(LTDC_HandleTypeDef *hltdc) {
U32 Addr;
if (pending_buffer >= 0) {
Addr = FRAME_BUFFER_ADDRESS + XSIZE_PHYS * YSIZE_PHYS * pending_buffer * (LCD_GetBitsPerPixel() >> 3);
__HAL_LTDC_LAYER(hltdc, 0)->CFBAR = Addr;
__HAL_LTDC_RELOAD_CONFIG(hltdc);
GUI_MULTIBUF_Confirm(pending_buffer);
pending_buffer = -1;
}
HAL_LTDC_ProgramLineEvent(hltdc, 0); //Define the position of the line interrupt
}
//----------------------------------------------------------------------------
Также надо не забыть подключить одну интересную переменную. Обычный графический режим будет работать и без этого, но когда будем применять оконный менеджер, то без этого нормальной работы кода библиотеки мы не дождёмся. Для этого зайдём в файл stm32f7xx_it.c, подключим там библиотеку, а также нашу переменную из библиотеки
/* USER CODE BEGIN 0 */
#include "GUI.h"
volatile GUI_TIMER_TIME OS_TimeMS;
/* USER CODE END 0 */
Затем в обработчик событий системного таймера в этом же файле добавим увеличение данной переменной на 1 (инкрементирование)
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */
OS_TimeMS++;
/* USER CODE END SysTick_IRQn 1 */
}
Теперь можем собрать код, запустить его, тем самым и проверить работу библиотеки
Судя по окрашиванию экрана в тёмно-синий цвет, мы можем сделать заключение, что библиотека нормально инициализировалась.
Также ещё для пущей уверенности давайте выведем какой-нибудь текст на экран дисплея, добавив соответствующий код в функции main()
Error_Handler();
}
GUI_SetFont(&GUI_Font32B_1);
GUI_SetTextAlign(GUI_TA_CENTER);
GUI_SetColor(GUI_ORANGE);
GUI_DispStringAt("Hello STemWin!!!", 240, 120);
/* USER CODE END 2 */
Соберём код, запустим его на выполнение. После этого мы должны увидеть следующую картину
Я думаю, на сегодняшний нам хватит и этого для общего знакомства, подключения и настройки такой сложной библиотеки, как emWin.
Надеюсь, что мы ещё не раз вернёмся к этой теме и будут более серьёзные уроки по данной библиотеке. Мы рассмотрим преимущество мультибуферного вывода информации на экран, поработаем с оконным менедженром, с различными элементами управления и виджетами, а также поработаем с различными изображениями. Причём, это уже будет скоро. Так что ждите.
Спасибо за внимание!
Предыдущая часть Программирование МК STM32 Следующий урок
Отладочную плату можно приобрести здесь STM32F746G-DISCOVERY
Смотреть ВИДЕОУРОК (нажмите на картинку)
Добрый вечер, а с DSI будут уроки?
Здравствуйте!
Мне очень нравятся Ваши уроки. Тоже хотел бы спросить по поводу уроков с DSI. Вы обещали, но по-видимому, из-за требований др. «перейти к более народным контроллерам и платам» и всяких нажимов отменили эту тему. По-моему — зря.
Здравствуйте! Спасибо!
Ну тут, как говорится, всем не угодишь, так как я не резиновый.