阿里开发板_STM32_littleVGl开源GUI图形库的移植
程序员文章站
2024-02-25 18:08:09
...
littleVGl开源GUI图形库的移植
一. 准备工作
- 自己需要有一个能正常驱动显示屏运行的工程
- 工程中需要配置一个定时器
- 本教程只记录了显示的移植方法,所以自己只需要先实现屏幕的写点函数。
- 下载littlevGL图形库: https//github.com/littlevgl/lvgl
- 查看官方文档:https://docs.littlevgl.com/zh-CN/html/index.html
二. 移植
-
在官网的的GitHub项目库中获取源码
-
将下载的
lvgl-master
文件解压到自己的工程文件夹目录下 -
将
lvgl-master
文件夹重命名为lvgl
-
在
lvgl
文件夹中的lv_conf_template.h
复制到lvgl
文件夹的同级目录下,并重命名为lv_conf.h
,文件结构如图: -
打开
lv_conf.h
配置文件,将#if 0 改为 #if 1
,设置屏幕的高宽像素以及颜色参数。如图: -
将
lvgl
文件夹下的src
文件夹下的所有得xx.c
文件添加到keil工程当中。 -
添加头文件路径
-
在你需要用到的littlevGL的文件添加#include “lvgl.h”
-
在main函数中调用
lv_init();
初始化函数 -
设置显示缓冲区
//设置显示缓冲区,如下代码 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); //初始化显示缓冲区
-
注册屏幕写点函数
//像素打点,函数注册 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); //注册驱动程序
-
实现驱动回调函数
//回调函数的打点驱动函数实现 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); }
-
在
main
函数中的while(1)
里调用lv_task_handler();
-
配置一个
1~10ms
的定时器调用lv_tick_inc(x);
x是定时器周期 -
到了这里我们的移植基本就结束了
三. 测试我们移植的littleVGl图形库是否成功
- 我们可以到官网查看一些示小部件进行测试我们是否移植成功
- 查看官方文档中的对象类型。官方文档:https://docs.littlevgl.com/en/html/object-types/win.html
- 找一个简单的例子将代码复制到我们的
main
函数中。 - 例如我们移植这个示例:
- 效果图
如果对你有用,就点个赞支持一下我这位萌新博主????????
还可以关注我的个人博客:chaungketz.top ,上面有更多个人分享经验和总结