littleVGl开源GUI图形库的移植

一. 准备工作

  • 自己需要有一个能正常驱动显示屏运行的工程
  • 工程中需要配置一个定时器
  • 本教程只记录了显示的移植方法,所以自己只需要先实现屏幕的写点函数。
  • 下载littlevGL图形库: https///littlevgl/lvgl
  • 查看官方文档:https:///zh-CN/html/index.html

二. 移植

  1. 在官网的的GitHub项目库中获取源码
  2. FreeMaster移植stm32f103c8t6_c语言

  3. 将下载的lvgl-master文件解压到自己的工程文件夹目录下
  4. lvgl-master文件夹重命名为lvgl
  5. lvgl文件夹中的lv_conf_template.h复制到lvgl文件夹的同级目录下,并重命名为lv_conf.h ,文件结构如图:
  6. 打开lv_conf.h配置文件,将#if 0 改为 #if 1 ,设置屏幕的高宽像素以及颜色参数。如图:
  7. FreeMaster移植stm32f103c8t6_html_02

  8. lvgl文件夹下的src文件夹下的所有得xx.c文件添加到keil工程当中。
  9. FreeMaster移植stm32f103c8t6_html_03

  10. 添加头文件路径
  11. FreeMaster移植stm32f103c8t6_c语言_04

  12. 在你需要用到的littlevGL的文件添加#include “lvgl.h”
  13. 在main函数中调用lv_init();初始化函数
  14. 设置显示缓冲区
//设置显示缓冲区,如下代码
static lv_disp_buf_t disp_buf;		//定义变量disp_buf
static lv_color_t buf[LV_HOR_RES_MAX * 10];   //声明缓冲区大小
lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);  //初始化显示缓冲区
  1. 注册屏幕写点函数
//像素打点,函数注册
lv_disp_drv_t disp_drv;           	//定义变量disp_drv
lv_disp_drv_init(&disp_drv);      	//初始化
disp_drv.flush_cb = my_disp_flush;  //设置驱动功能的回调函数名
disp_drv.buffer = &disp_buf;        //将缓冲区分配给显示器
lv_disp_drv_register(&disp_drv);    //注册驱动程序
  1. 实现驱动回调函数
//回调函数的打点驱动函数实现
void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p)
{
    int32_t x, y;
    for(y = area->y1; y <= area->y2; y++) 
    {
        for(x = area->x1; x <= area->x2; x++)
        {
           LCD_Fast_DrawPoint( x, y,color_p->full );//自己的打点函数
           color_p++;
        }
    }
    lv_disp_flush_ready(disp); 
}
  1. main函数中的while(1)里调用lv_task_handler();
  2. 配置一个1~10ms的定时器调用lv_tick_inc(x);x是定时器周期
  3. 到了这里我们的移植基本就结束了

三. 测试我们移植的littleVGl图形库是否成功

  1. 我们可以到官网查看一些示小部件进行测试我们是否移植成功
  2. 查看官方文档中的对象类型。官方文档:https:///en/html/object-types/win.html
  3. 找一个简单的例子将代码复制到我们的main函数中。
  4. 例如我们移植这个示例:

FreeMaster移植stm32f103c8t6_c语言_05

  1. 效果图