Skip to content

NorthQian/dm-mc-LVGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DM-MC02开发板移植LVGL 8.3手册

硬件需求

  1. 有一块显示屏,FMC接口或者SPI接口均可,SPI接口建议使用DMA方式加速

  2. STM32F4及以上的开发板,不建议F1

  3. 能够完整驱动显示屏的一个项目,要求要有画点函数

软件准备

  1. 获取lvgl 8.3 的源码,这里要注意各个版本不同,需要修改branch

  • 裁剪lvgl 8.3 只需要 demosexamples/portingsrclv_conf_template.hlvgl.h几个文件(夹),这里注意要将porting文件夹提取出来

  • 重命名,将lv_conf_template.h改为lv_conf.hexamples/porting下的几个.c/.h文件也照此做

  • 在Keil的Manage Project Items里加入lvgl,需要新建lvgl/srclvgl/portinglvgl/demos三个文件夹

  • lvgl/src文件夹里加入BSP/lvgl/src文件夹里的所有.c文件,及其子文件夹内的.c文件,这一步相当繁琐,但是操作比较简单。可以不添加lvgl/src/draw/nxp_pxp,lvgl/src/draw/nxp_vglite,两个文件夹里的.c文件。这里大概光加文件有个五分钟工作量

  • lvgl/porting文件夹内加入BSP/lvgl/porting内的所有.c文件,和上一目录的lv_conf.h文件

  • lvgl/demos文件夹内加入BSP/lvgl/demos内所需要演示例程的.c文件,这里只加入第一个例程benchmark,所以只添加benchmark文件夹(及其所有子文件夹)内所有.c文件即可

  • 修改lv_conf.h文件内容,首先启用编译#if 1

  • 修改lv_port_disp.c 首先打开#if 1,接下来修改.h文件名称为lv_port_disp.h,并且修改垂直和水平分辨率,这里要与实际硬件对应

  • 接下来打开lv_port_disp.h,首先启用编译,接下来修改lvgl的相对路径为../lvgl.h

  • 接下来打开lv_port_disp.c,在void lv_port_disp_init(void)函数中选择三种缓存方式的一种,将其余两种注释掉,切换缓存方式时要注意可能这两个变量需要修改(方式一不用修改),若是SPI+DMA通讯,建议选择方式2,方式1对所有通讯都能用,但是最慢

  • static void disp_init(void)函数中,将LCD初始化的函数放进去。这里考虑到索引到函数的问题,建议把包含所有头文件的.h文件给放在lvgl.h中,相应,在需要调用lvgl函数时,也需要调用lvgl.h

  • static void disp_flush函数中实现画点函数(按官方注释来即可),如果有区域填充函数,也可以直接使用,不过要去掉官方的遍历功能,这里直接用了区域填充,这里的画点或者区域填充需要支持选择颜色,颜色为RGB565格式,使用color_p->full指向输出颜色。

  • 之后调用lv_tick_inc(1);来赋予LVGL心跳,若有RTOS操作系统,这里操作法不同,这里启动一个周期为1ms的定时器来给心跳。也有说使用uwTick去给心跳的,未测试。定时器给心跳记得开中断,NVIC小勾,Start_IT等细节。

  • 周期性调用lv_task_handler,确保LVGL能及时响应。这里放在主While循环中

  • 如果需要使用demo去做测试,需要在lv_conf.h文件中启用相应的demo宏定义

  • 最后在main.c中添加代码进行测试,此下两个可任选其一,enjoy it!
  HAL_TIM_Base_Start_IT(&htim6);
  lv_init();
  lv_port_disp_init();
  lv_demo_benchmark();
  HAL_TIM_Base_Start_IT(&htim6);
  lv_init();
  lv_port_disp_init();
  lv_obj_t* checkbox_obj=lv_checkbox_create(lv_scr_act());
  lv_obj_set_size(checkbox_obj,160,30);
  lv_obj_align(checkbox_obj,LV_ALIGN_CENTER,0,0);

示例程序-benchmark

  • 如果benchmark不能顺利运行完,需要在启动文件.s中加大stack的容量

  • 如果想监视系统的刷新率和CPU占用,需要在lv_conf.h中将LV_USE_PERF_MONITOR置1

参考文献:

About

dm_mc02开发板与达妙LCD显示屏移植LVGL8.3的示例工程

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors