LVGL8.1笔记3--运行demo(2022-0611)

2023-11-15

LVGL8.1笔记3–运行demo(2022-0611)

在这里插入图片描述

前言

LVGL能实现非常简约美观的UI界面,比如上面这张动图就是LVGL的官方demo,前面移植好显示和触摸后,就可以尝试跑一下lv_demo。

有时间还可以研究一下demo是怎么实现的。


一、移植前准备

  1. 硬件(带触摸屏幕的STM32F407VE核心板)
  2. 移植好LVGL-8.1显示和触摸的Keil工程,实现屏幕显示、按键或触摸等
  3. lv_demo(可以从这里下载最新的demo

在这里插入图片描述

二、lv_demo简介

在这里插入图片描述

benchmark:基准测试,用来测试硬件平台的性能,就是看看能多流畅的运行LVGL

keypad_enconder:键盘测试,里面创建了很多用按键操作的控件。方便没有触屏的来体验

music:一个音乐播放器界面,注意这个demo需要很多的flash资源,编译的程序超过1mb大小,所以我用的STM32F407根本没法运行

stress:压力测试,开辟量的空间,创建很多组件来极限测试硬件在运行LVGL的能力

widgets:组件测试,就是把大部分LVGL能实现的组件都用起来,一个比较综合的demo

三、开始移植demo

1. 首先下载demo,如果用的不是LVGL8.2可以在官方仓库里找到低一点版本的。

在这里插入图片描述
将整个demo文件夹中的内容复制到自己移植好lvgl的工程中,为了我们方便区分可以自己建个文件夹存放demo程序

在这里插入图片描述

2. 添加代码到keil工程中

这一步其实很好理解,我们想要运行demo,肯定要添加到工程中进行编译啊。上面接收过来,这个demo文件夹里有几个不同的demo。最好事在keil中建不同的组来区分,这样方便添加和删除。这里具体以widgets来演示

在这里插入图片描述

3. 把将widgets目录下的全部.c文件添加到工程中即可,注意是.c文件

lv_demo_widgets.c

img_clothes.c

img_demo_widgets_avatar.c

img_lvgl_logo.c

总共就以上4个文件需要添加到keil工程中,然后把路径添加一下

在这里插入图片描述

3.打开配置文件lv_conf.h中的关于使用demo的宏

这里其实有个不太理解的问题,我用的是LVGL8.1版本,下载后里面就没有demo文件夹,我是在官方仓库自己找的。我找到的demo仓库里面有关于demo的配置文件lv_demo_conf.h(其实就是几个宏定义用来打开和关闭demo)。但是写这个笔记是发现LVGL8.2的里面有demo文件夹,不过这里面没有配置文件,相关的配置宏都在lv_conf_template.h这个文件中。

不够无所谓了,反正我们之前移植LVGL时也用到了这个文件(lv_conf_template.h)。所以大家有哪个用哪个就行了。这里可能说的比较乱哈。

我们其实就需要明白要干什么就行了。

  1. 我们想运行demo
  2. 需要demo文件夹和里面的demo程序
  3. 如果不管是LVGL8.x只需要找demo相关的代码就行
  4. 如果目录下有就可以直接用,如果没有就去官方仓库里找到然后下载来用
  5. 需要用到lv_demo_conf.h文件,如果没有就在lv_conf.h文件中搜索一下demo关键词,看有没有下面这些宏
  6. 有这些宏就可以直接用,如果没有可以在官方仓库里找,也可以自己创建一个嘛。
  7. 把用到的程序文件添加到工程,编译、解决一些路径头文件错误就好了
  8. 调用demo函数就运行起来了
/*===================
 * DEMO USAGE
 ====================*/

/*Show some widget. It might be required to increase `LV_MEM_SIZE` */
#define LV_USE_DEMO_WIDGETS        1  // 把这个宏置成 1 ,就能用widgets了,其他的demo也类似
#if LV_USE_DEMO_WIDGETS
#define LV_DEMO_WIDGETS_SLIDESHOW  0
#endif

/*Demonstrate the usage of encoder and keyboard*/
#define LV_USE_DEMO_KEYPAD_AND_ENCODER     0

/*Benchmark your system*/
#define LV_USE_DEMO_BENCHMARK   0

/*Stress test for LVGL*/
#define LV_USE_DEMO_STRESS      0

/*Music player demo*/
#define LV_USE_DEMO_MUSIC       0
#if LV_USE_DEMO_MUSIC
# define LV_DEMO_MUSIC_SQUARE       0
# define LV_DEMO_MUSIC_LANDSCAPE    0
# define LV_DEMO_MUSIC_ROUND        0
# define LV_DEMO_MUSIC_LARGE        0
# define LV_DEMO_MUSIC_AUTO_PLAY    0
#endif

4.在main函数里调用lv_demo_widgets();
#include "lv_demo.h"
#include "lv_demo_conf.h"
#include "lv_demo_widgets.h"		// 用哪个demo就包含哪个的头文件

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//设置系统中断优先级分组2
	delay_init(168);  								//初始化延时函数
	uart_init(115200);								//初始化串口波特率为115200
	W25QXX_Init();									//外部Flash--W25Q16初始化
	TIM3_Int_Init(999,83);							//定时器配置1ms中断
	KEY_Init(); 									//按键初始化 
	LED_Init();										//初始化LED 
 	LCD_Init();										//LCD初始化 
	tp_dev.init();				//触摸屏初始化
	
	lv_init();					//LVGL初始化
	lv_port_disp_init(); 		//LVGL 显示接口初始化,放在 lv_init()的后面
	lv_port_indev_init(); 		//LVGL 输入接口初始化,放在 lv_init()的后面

    // lv_example_get_started_1();
    lv_demo_widgets();			// 这里是widgets的demo函数
    // lv_demo_benchmark();
    // lv_demo_stress();
    // lvgl_clock_start();
	while(1)
	{
		tp_dev.scan(0);
		lv_task_handler();
	}
}

下面是运行demo的样子,这次不做动图了,是可以触摸点击操作的哈

在这里插入图片描述

我的完整程序放在了gitee上,https://gitee.com/WRS0923/stm32_little-vgl/tree/dev/ 有需要的可以自行下载,注意切换到dev分支。以后分享的笔记也会在这个程序上修改。争取把LVGL玩明白

注意

这里有非常重要的一点,widgets消耗的内存比较大,需要我们再lv_conf.h文件中的空间开辟大一点,不然程序直接跑飞。

/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
#  define LV_MEM_SIZE (64U * 1024U)          /*[bytes]*/

music的demo需要很大的flash空间(超过1mb以上)资源不过的还是别运行了,不然编译几百个错误 怪闹心的。哈

网上的教程五花八门,其实最好的资料就是LVGL官方手册了。要知道不是所有的东西网上都会有教程,有些路还是要自己走

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LVGL8.1笔记3--运行demo(2022-0611) 的相关文章

  • python-Excel多个表格合并

    时间 2019 02 19 工具 python3 7 1 用到的模块 xlrd 负责读取数据 xlsxwriter 负责写入数据 glob 查找符合自己目的的文件 一 模块安装 pip 注意 这里我用的是pip模块来安装 部分python版
  • 算法设计技巧与分析 答案整理

    算法设计技巧与分析 沙特版 这书答案真难找啊 东拼西凑薅出这么些 https wenku baidu com view 279b9245561252d380eb6ea4 html https wenku baidu com view af5
  • 线性分类模型--感知机(perceptron)

    线性分类模型 感知机 perceptron 1 引言 分类问题 分类是监督学习的一个核心问题 在监督学习中 当输出变量Y取有限个离散值时 预测问题便成为分类问题 基本概念可以参考 机器学习方法概论1 监督学习从数据中学习一个分类模型或分类决
  • 蓝桥杯如何混分

    文章目录 蓝桥杯 一 如何暴力求解 二 举例说明 1 蓝桥杯真题 2 暴力代码 3 正解思路 代码 总结 蓝桥杯 蓝桥杯是OI赛制 也就是说即使不会算法 也可以暴力求解 拿到分数 一 如何暴力求解 可以在电脑的编译器上使用超过时间的循环暴力
  • 高等数值计算方法学习笔记第6章【解线性代数方程组的迭代方法(高维稀疏矩阵)】

    高等数值计算方法学习笔记第6章 解线性代数方程组的迭代方法 高维稀疏矩阵 一 引言 1 例题 说明迭代法的收敛性研究的重要性 2 定义 迭代法 迭代法收敛 解误差 二 基本迭代法 1 雅可比迭代法 2 高斯 塞德尔迭代法 Gauss Sei

随机推荐

  • 探究ConcurrentHashMap中键值对在Segment[]的下标如何确定

    内容 本文对JDK1 7下使用segmentShift和segmentMask求解ConcurrentHashMap键值对在Segment 中的下标值进行了探究和论证 适合人群 Java进阶 说明 转载请注明出处 尊重笔者的劳动成果 推荐阅
  • 新媒体运营数据分析怎么做?

    一 分析数据的意义 了解运营质量 预测运营方向 控制运营成本 评估营销方案 二 新媒体数据分析基本步骤 1 设定目的 提炼出最准确清晰的目的 eg 看看为什么最近公众号涨粉情况不好 近期粉丝增长缓慢 推广没做好 寻找推广错误环节 真正目的
  • 【C语言】变量/常量/宏定义,数据类型以及取值范围

    变量和常量是程序处理的两种基本数据对象 变量 变量的意义就是确定目标并提供存放的空间 变量的命名规则 1 变量名只能是英文字母 A Z a z 和数字 0 9 或者下划线 组成 2 第一个字母必须是字母或者下划线开头 3 变量名区分大小写
  • CompletableFuture使用(四)

    CompletableFuture中需要多个异步任务执行 再执行异步操作 allOf和anyOf 1 allOf CompletableFuture是多个任务执行完成后才会执行 有一个任务执行异常CompletableFuture执行get
  • 自学编程,10个程序员学习必收藏的编程网站,你知道几个?

    很多小伙伴在刚开始学习编程的时候 都去找一些网站来提高自己的水平 但现在网络越来越发达 学习类的网站真的是多如牛毛 有的网站真的是非常的优秀 可以让你学到不少的技术 但是同样也有的网站真的是非常的垃圾 不仅会浪费你的时间 而且还可能会误导你
  • SSH远程终端神器,你在用哪一款

    唠嗑部分 在我们日常开发中啊 不可避免的要与Linux打交道 虽然我们作为开发 不要求我们对Linux有多么的专业 但是基本的操作还是要会的 举几个常用的例子 1 查看nginx配置 配置转发 2 清理maven仓库依赖 3 搭建环境 如r
  • 修改服务器磁盘槽位编号,服务器磁盘槽位管理

    服务器磁盘槽位管理 内容精选 换一换 本文以裸金属服务器的操作系统为 Windows Server 2008 R2 Enterprise 为例 初始化数据盘 不同裸金属服务器的操作系统的格式化操作可能不同 本文仅供参考 具体操作步骤和差异请
  • 2023软件测试面试大全(超详细~)

    Part1 1 你的测试职业发展是什么 测试经验越多 测试能力越高 所以我的职业发展是需要时间积累的 一步步向着高级测试工程师奔去 而且我也有初步的职业规划 前3年积累测试经验 按如何做好测试工程师的要点去要求自己 不断更新自己改正自己 做
  • Python课程设计题目

    文章目录 1 基于Python的XX管理系统 2 基于Python的XX工具开发 1 基于Python的XX管理系统 实例要求 采用面向对象或是字典保存实例的属性信息 功能要求 提供增加 删除 修改 单个查询 查询所有 保存信息到本地文件
  • 制作Win7多合一原版系统光盘镜像

    先看看效果 提前准备工具 1 UltraISO 链接 https pan baidu com s 1cXff0 PjKPPmRr8 zJNJHA 密码 nnj1 2 GimageX 链接 https pan baidu com s 1fqG
  • element ui select multiple 多选数据修改回显失灵问题的解决

    使用change方法 this forceUpdate 重新渲染
  • 管理“项目”之人际关系篇

    项目管理里的人际关系 也是令人头疼且最重要的 管的好 众人拾柴 火焰高 管的不好 眼看他起高楼 眼看他楼塌了 文章目录 前言 一 项目关系人管理 1 项目创立一定要获得关系人尤其主要关系人 或市场 的认可 2 识别相关人员 识别关系人 3
  • Cesium:入门教程(一)之 Hello World

    简介 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎 Cesium支持3D 2D 2 5D形式的地图展示 它提供了基于JavaScript语言的开发包 方便用户快速搭建一款零插件的虚拟地球Web应用 并在性能
  • Qt源码分析之信号和槽机制

    原文在这里 http blog csdn net oowgsoo article details 1529411 Qt的信号和槽机制是Qt的一大特点 实际上这是和MFC中的消息映射机制相似的东西 要完成的事情也差不多 就是发送一个消息然后让
  • 电脑系统更新完后,计算机管理服务中找不到mysql的服务

    问题场景 电脑系统更新完 重启电脑 发现在电脑 计算机管理服务中找不到mysql的服务 问题描述 重启后 计算机管理如图 解决方案 使用Windows Powershell 管理员模式 进入到mysql安装目录bin 然后执行 mysqld
  • Unity游戏开发-Assetbundle打包

    本篇主要是分享unity Assetbundle的打包处理 目录 打包接口 整体设计 打包AssetBundle 压缩资源到StreamingAssets 输出资源清单文件 清单文件结构 AssetFile AssetVersion 处理
  • Codeforces-1454E Number of Simple Paths(基环树-思维)

    题目大意 给你n个点 n条边 求图中简单路径的个数 题目思路 n个点n条边 那么图中一定有一个环 拿这个图来讲 我们将两点间的关系分为4种 1 两点都在环上 简单路径的个数为2 例如2与5 2 一个点在环上一个点不在环上 简单路径个数为2
  • 魔兽世界(WOW)诺莫瑞根卡片任务链ASCII码解码(python)

    运行环境 python 3 9 翻译结果 A机器上的编码 Tell your friends to play WoW 白色卡片上的编码 Thrall and Jaina sitting in a tree K I S S I N G A机器
  • 使用openssl中函数MD5_Init、MD5_Update、MD5_Final出现LNK2019 unresolved externalsymbol错误解决方法

    添加对应的静态链接库 以vs2013为例 PROJECT gt Properties gt Linker gt Additional Dependencies 添加libeay32 lib 先确认库的搜索路径中libeay32 lib
  • LVGL8.1笔记3--运行demo(2022-0611)

    LVGL8 1笔记3 运行demo 2022 0611 文章目录 LVGL8 1笔记3 运行demo 2022 0611 toc 前言 一 移植前准备 二 lv demo简介 三 开始移植demo 1 首先下载demo 如果用的不是LVGL