Skip to content

Porting LVGL GUI on stm32f407vet6 black board. FSMC display and capacitive touch libs.

Notifications You must be signed in to change notification settings

fa1ke5/STM32F407_LVGL_PORT

Repository files navigation

STM32F407_LVGL_PORT

Графическая библиотека LVGL на отладочной плате stm32f407vet6 с aliexpress с использованием FSMC 16bit под HAL. В комплекте проект от CubeMX.

плата https://aliexpress.ru/item/32978440523.html?spm=a2g0o.productlist.0.0.3e98670eTcRV2t&algo_pvid=6c5f00b0-83cd-4ee4-a2a8-bf341dcd81f6&algo_expid=6c5f00b0-83cd-4ee4-a2a8-bf341dcd81f6-11&btsid=0b8b034c16128172502837184edc76&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_&sku_id=66702899478 .

image

дисплей https://aliexpress.ru/item/32662835059.html?spm=a2g0o.productlist.0.0.34efb1636w477y&algo_pvid=542f2dc9-c3c2-4420-b0fa-43bbce93113f&algo_expid=542f2dc9-c3c2-4420-b0fa-43bbce93113f-1&btsid=0b8b034c16128174275838227edc76&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_&sku_id=59910157439

image

image

Дисплей на базе контроллера ILI9341 320ч240, pin2pin совместим с разьемом отладочной платы, одно время китайцы продавали их прямо комплектами. Дисплей оборудован резистивным тачскрином на базе XPT2064, интерфейс SPI.

Детальное описание отладочной платы доступно тут https://os.mbed.com/users/hudakz/code/STM32F407VET6_Hello/shortlog/

в проекте подключена инициализация следющей перифирии:

  • SDIO
  • USB mass storage класс
  • SPI2(тачскрин)
  • SPI3(разьем RF модуля)
  • светодиоды LED1 & LED2
  • кнопки BUTTON0 & BUTTON1
  • FSMC(дисплей)
  • DMA(mem2mem FSMC транспорт)
  • RNG(аппаратный генератор случайных чисел)
  • аппаратные прерывания

Описание кода

Проект представляет собой базовую инициализацию перифирии и возможность запустить тестовые подпрограммы интерфейса LVGL опсание библиотеки GUI тут https://lvgl.io/ примеры подпрограмм интерфейса находятся в каталоге lv_examples, для запуска примеров необходимо добавить (раскомментировать) функцию вызова в секции USER CODE 2 файла main.c например //lv_demo_benchmark(); lv_demo_widgets(); /* USER CODE END 2 */

(инциализировать нужно только один элемент)

В главном цикле закомментированы тесты дисплея без использования LVGL, для их активации необходимо обязательно закомментировать обработчик интерфейса lv_task_handler();

Что не работает

  • нет транспорта USB - SDIO, его просто нет возможно добавлю позже. При подключении есть инциализация USB MS класса но нет доступа к SD карте
  • для прерываний кнопок отсутствуют калбэк функции и обработчики.
  • прерывание при зажатии тачскрина не снимается, что вызывает невозможность обновить экран при длительном нажатии. Временно и только для демо в обработчик прерывания добавлен дополнительный вызов функции обновления GUI lv_task_handler.

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

switch(GPIO_Pin) { case TS_IRQ_Pin: if(xpt2046_getXY(&x, &y)) {
} lv_task_handler();
break;
default: __NOP(); }

}

Библиотека требует что бы обработчик вызывался в цикле, соответственно для нормальной работы с внешними прерываниями необходимо либо вынести обработчик интерфейса из основного цикла и вызывать его через прерывание в более высоким приоритетом, либо использовать RTOS и семафоры, либо же принудительно снимать прерывание при зажатии тачскрина используя HAL и активировать при отпускании. Тогда обработчик GUI можно будет убрать из функции HAL_GPIO_EXTI_Callback, так как использование двух экземпляров процесса не совсем предполагается разработчками :)

Сборка проекта

Для сборки проекта требуется MS Visual Studio Code. Для корректной сборки необходимо указать в makefile пути для файлов исходного кода LVGL. Мной добавлены базовые пути для функций использованных в примере интерфейса. В случае написания собственных виджетов возможно придется добавлять пути к файлам аналогично добавленным в раздел

C_SOURCES =
... lv_examples/assets/lv_font_montserrat_16_compr_az.c
lv_examples/assets/lv_font_montserrat_12_compr_az.c
lv_examples/assets/img_cogwheel_alpha16.c
lv_examples/assets/img_cogwheel_argb.c
... Для записи можно использовать jlink или st-link отладчики. В папке ideScripts содержатся скрипты инициализации и обслуживания конфигурационных файлов проекта. Для реконфигурации необходимо находясь в инетрфейсе VSCode щелкнуть правой кнопкой мыши на файле update.py и выбрать пункт "Выполнить файл в консоли". Запустится мастер, будет предложено указать пути к требуемым файлам и после указания будут скорректированы файлы конфигурации проекта в папке ./vscode. После успешного выполнения мастера станет доступно меню задач в разделе "Терминал" VSCode.

About

Porting LVGL GUI on stm32f407vet6 black board. FSMC display and capacitive touch libs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published