LVGL使用先下载界面编辑软件,我使用的是squareline studio,先试用3个月
下载链接:SquareLine Studio - Download the current version of SquareLine Studio
LVGL的源码下载GitHub - lvgl/lvgl: Embedded graphics library to create beautiful UIs for any MCU, MPU and display type.
移植准备工作1. 开发环境搭建
工具链:Keil MDK-ARM或IAR Embedded Workbench
LVGL版本:推荐v8.3(稳定性好,资料丰富)
基础工程:需包含以下驱动:LCD显示驱动(SPI或FSMC接口)
触摸屏驱动(XPT2046等)
基本定时器(提供LVGL心跳)
LVGL文件配置核心文件裁剪
从LVGL官方仓库(v8.3版本)仅保留以下目录:
src/ examples/porting/ lvgl.h lv_conf_template.h
将lv_conf_template.h重命名为lv_conf.h并启用基础功能宏(如LV_COLOR_DEPTH 16)。
工程结构优化
在Keil工程中建立LVGL分组,按功能模块划分:
Core:lvgl.c、lv_port.c
Drivers:显示驱动(drv_lcd.c)、触摸驱动(drv_touch.c)
Config:lv_conf.h
LVGL显示回调函数
- static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) {
- LCD_SetWindow(area->x1, area->y1, area->x2, area->y2);
- LCD_WriteData((uint8_t *)color_p, (area->x2 - area->x1 + 1) * (area->y2 - area->y1 + 1) * 2);
- lv_disp_flush_ready(disp_drv);
- }
LVGL输入设备接口
- static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
- static lv_coord_t last_x, last_y;
-
- if(TP_Scan(0) == 0) { // 有触摸
- TP_Get_XY(&last_x, &last_y);
- data->state = LV_INDEV_STATE_PR;
- } else {
- data->state = LV_INDEV_STATE_REL;
- }
-
- data->point.x = last_x;
- data->point.y = last_y;
- return false;
- }
主函数逻辑演示代码
- #include "lvgl.h"
- #include "lv_port_disp.h"
- #include "lv_port_indev.h"<blockquote>#include "apm32f4xx_device_cfg.h"
设置尺寸大小
配置缓存大小
显示缓冲区配置方案(二选一): - 单缓冲区:320x240 RGB565 ≈ 150KB (需外部RAM)
- 部分刷新:1/10屏幕大小(32x240x2=15KB)
下一步就开始画个界面
|