[活动] 【APM32F402R Micro-EVB开发板测评】4、LVGL移植

[复制链接]
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.
3683668a88e0b1e99e.png
移植准备工作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


8332868a88e2852f6f.png

LVGL显示回调函数
  1. static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) {
  2.     LCD_SetWindow(area->x1, area->y1, area->x2, area->y2);
  3.     LCD_WriteData((uint8_t *)color_p, (area->x2 - area->x1 + 1) * (area->y2 - area->y1 + 1) * 2);
  4.     lv_disp_flush_ready(disp_drv);
  5. }
LVGL输入设备接口
  1. static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
  2.     static lv_coord_t last_x, last_y;
  3.    
  4.     if(TP_Scan(0) == 0) { // 有触摸
  5.         TP_Get_XY(&last_x, &last_y);
  6.         data->state = LV_INDEV_STATE_PR;
  7.     } else {
  8.         data->state = LV_INDEV_STATE_REL;
  9.     }
  10.    
  11.     data->point.x = last_x;
  12.     data->point.y = last_y;
  13.     return false;
  14. }
主函数逻辑演示代码
  1. #include "lvgl.h"
  2. #include "lv_port_disp.h"
  3. #include "lv_port_indev.h"<blockquote>#include "apm32f4xx_device_cfg.h"
设置尺寸大小
9269568a88f907d9c2.png
配置缓存大小

显示缓冲区配置方案(二选一):

  • ‌单缓冲区‌:320x240 RGB565 ≈ 150KB (需外部RAM)
  • ‌部分刷新‌:1/10屏幕大小(32x240x2=15KB)

7443968a88fc787bde.png
下一步就开始画个界面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

258

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

61

主题

258

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部