移植LVGL到单片机的一个demo简单介绍

简介

背景
本文使用的是主控IC为stm32f103zet6, 显示IC为ST7735s,它是128*160的像素,色深为RGB565颜色。

官方虽然说LVGL移植平台只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。但我移植到stm32f103c8t6,不管怎么修改配置,一直显示内存不够。

LVGL 可以驱动单色OLED、TFT 显示器、监视器或任何其他显示器。c 代码使其可在任何平台上使用,例如 NXP LPC 或 iMX、STM32、PIC、Arduino、ESP32、Raspberry 等。

准备

下载lvgl 8.2.0版本源码下载地址:https://github.com/lvgl/lvgl
在这里插入图片描述

使用stm32cube编写驱动

在这里插入图片描述
在这里插入图片描述

移植LVGL和屏幕驱动

  1. 在lvgl_stm32f103ze_demo项目中新建Middlewares/LVGL文件夹
  2. LVGL文件夹下创建GUI/lvgl和GUI_APP文件夹
  3. 拷贝lvgl下的examples文件夹和src文件夹以及lv_conf_template.h和lvgl.h到Middlewares/LVGL/GUI/lvgl目录下注意:拷贝之后将lv_conf_tempalate.h修改为lv_conf.h
  4. 把lv_conf.h的条件编译指令#if 0修改成#if 1
    在这里插入图片描述

LVGL主要配置

驱动IC的色深和当前硬件支持的内存资源大小。
在这里插入图片描述

· 显示缓冲区初始化有三种方式,这里使用的是方式1,方式1消耗的硬件资源最小,但运行效果也是最差的,三种方式如下 ·
第一种只创建一个缓存区,长度是横轴像素长度的 10 倍 · 第二种创建两个缓存区,长度都是横轴的 10 倍,可以结合 DMA
加快写入速度 · 第三种则是创建两个,大小是横轴乘以纵轴,相当于整个屏幕大小

本人选择第一种,大家看情况

在这里插入图片描述

划重点

这里必须重写打点函数,用自己的屏画点或划区域的函数替代一下。
在这里插入图片描述
屏幕宽高也需改成自己真实屏幕大小。
在这里插入图片描述

main.c主函数实现
在这里插入图片描述

static void event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
	if(code == LV_EVENT_CLICKED) 
	{
//	    printf("Clicked\n");
	}
	else if(code == LV_EVENT_VALUE_CHANGED) 
	{
//	    printf("Toggled\n");
	}
}

void test_button()
{
	lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
	lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);
	lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40); //设置为中心位置的下面40个像素
	
	//设置按钮名称为test button(如果不设置,按钮上则没有名字显示)
	lv_obj_t *label = lv_label_create(btn1);
	lv_label_set_text(label, "test button");
 	lv_obj_center(label);
}

自定义显示Demo
在这里插入图片描述
在这里插入图片描述
在main()函数的循环内调用lv_tick_inc(1);函数来提供心跳。并且调用lv_timer_handler()来使得LVGL正常运行(建议在定时器内调用更加方便)。

如果在编译代码,报错是#include“lvgl.h”这个出问题了,将#inclde"./././lvgl.h"这种改成#include“lvgl.h”就行了.

编译运行
在这里插入图片描述

效果展示

在这里插入图片描述

使用模拟器生成后移植效果
这里就不具体展示模拟器生成代码的移植过程了。
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/135616.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】入队序列出队序列问题(以21年408真题举例)

题型说明 一般是一个队列,其中一边可以入队,另一边可以入队和出队只可入队的含义是从这个方向是以队列形式存在可以入队和出队表示此边以堆形式存在 怎么分析? 以21年408真题举例 考点分析 出队序列存在两种情况:入之后就出&…

是谁为所欲为,将我的电脑控作己用?

在刚刚发完短篇小杂文《要找事做,我真怕被闲死》的投稿之后,笔者继续浏览社交网站的网页搜索...... 正看到《温州殡仪馆 》《温州动车723事故死亡高 》《 动车脱轨温州事件真正原因》《 浙江平阳县灭门惨案处理结果公布》《 温州厉秀珍死亡 》这一串又一…

从HDFS到对象存储,抛弃Hadoop,数据湖才能重获新生?

Hadoop与数据湖的关系 1、Hadoop时代的落幕2、Databricks和Snowflake做对了什么3、Hadoop与对象存储(OSD)4、Databricks与Snowflake为什么选择对象存储5、对象存储面临的挑战 1、Hadoop时代的落幕 十几年前,Hadoop是解决大规模数据分析的“白…

Qt开发流程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

SpringBoot整合第三方技术

SpringBoot整合JUnit 名称:SpringBootTest 类型:测试类注解 位置:测试类定义上方 作用:设置JUnit加载的SpringBoot启动类SpringBootTest(classes Springboot05JUnitApplication.class) class Springboot07JUnitApplicationTests…

腾讯云3年轻量2核4G5M服务器756元,抓紧数量不多

腾讯云轻量应用服务器特价是有新用户限制的,所以阿腾云建议大家选择3年期轻量应用服务器,一劳永逸,免去续费困扰。腾讯云轻量应用服务器3年可以选择2核2G4M和2核4G5M带宽,3年轻量2核2G4M服务器540元,2核4G5M轻量应用服…

redis学习指南--概览篇

redis怎么学 官方学习网站: redis.cn 1、整体了解redis redis是一个内存数据库、kv数据库,数据结构数据库,redis中数据都是存储在redis中,可以通过key查找value,value可以有多种数据结构,有:…

归并外排序实现

文章目录 1. 海量数据排序 1. 海量数据排序 如果我们想在文件中海量数据排序,我们比较适合选用归并排序。 首先,我们要看要排序的文件的大小,比如说这个文件是10G,而我们的内存是1G,那么我们可以把文件切成10份。这样…

汽车操纵稳定性matlab仿真

1、内容简介 略 14-可以交流、咨询、答疑 2、内容说明 汽车操纵稳定性matlab仿真,包含完整的论文 操纵动力学、两自由度 摘要:当今,仿真技术日益广泛地应用于汽车工程领域,操纵稳定性研究越来越多地使用成熟的计算机仿真理论…

【LeetCode:715. Range 模块 | 线段树】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

unity line renderer绘制的颜色不是想要的红色

线条不是暗红色的,用的是默认的红色 将材质选则为如下即可

javaSE学习笔记(七)IO流

目录 六、IO流 1.IO流概述 概念 分类 IO体系 简单介绍 最重要,最常用,最常见的两个流 2.File类 路径分隔符 绝对路径和相对路径 构造方法 方法 重命名注意事项 删除注意事项 3.FileInputStream&FileOutputStream FileInputStream 获取…

哨兵1号回波数据(L0级)产品目录介绍

1 数据包总览 哨兵1号L0级数据产品系列如下图所示,本文针对图中红框中的数据产品进行介绍(定标数据、噪声数据没下载到。。。)。 1.1 数据包名称 示例: S1A_S3_RAW__0SSV_20211230T105851_20211230T105907_041237_04E698_94F0.S…

github私有仓库开发,公开仓库发布版本

文章目录 github私有仓库开发,公开仓库发布版本需求背景实现思路GitHub Releases具体步骤广告 github私有仓库开发,公开仓库发布版本 需求背景 github私有仓库开发,公开仓库发布版本,既可以保护源代码,又可以发布版本给用户使用。许多知名软件项目都采用了这样的开…

Qt 子窗口不设置parent时,如何随主窗口关闭

遇到个情况,new一个子窗口的时候,如果指定了parent,那在最小化这个子窗口时这个子窗口并不是在缩小到任务栏,而是在任务栏的左上角。像这种: 并且,点击主窗口之后,子窗口也始终显示在主窗口之前…

视频批量剪辑:视频嵌套合并实战指南,剪辑高手速成秘籍

随着社交媒体的兴起,视频制作的需求越来越广泛。无论是个人用户还是专业团队,都需要对视频进行剪辑以符合其需求。而在这个过程中,批量剪辑视频的能力就变得至关重要。视频批量剪辑是指在一次操作中处理多个视频文件的剪辑。通过使用专业的视…

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例,有关《软件工程与计算》23章内容的重点知识整理,已经总结在了博客专栏中,有需要的自行阅读: 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…

Dubbo快速入门

1.什么是Dubbo? Dubbo是一款高性能分布式服务框架,由阿里巴巴开发并开源发布。它支持多种协议,如dubbo、HTTP、Hessian、Thrift等,可以很好地解决分布式服务中的服务治理问题,提供了服务注册、发现、负载均衡、容错等功…

第26章_事务概述与隔离级别

文章目录 事务事务的特征事务的控制语句事务的生命周期事务的执行过程 ACID特性原子性一致性隔离性持久性 隔离级别不同隔离级别并发异常脏读不可重复读幻读区别 总结 事务 (1)事务的前提:并发连接访问。MySQL的事务就是将多条SQL语句作为整…

伦敦金股票代码是什么?

伦敦金是跟踪实时的现货黄金价格走势的差价合约交易,它的代码一般是LLG、GOLD,但也有一些货币交易平台会显示为XAU。伦敦金不是股票交易,因此没有四位数或六位数的股票代码,但伦敦金交易品种单一,投资者不用在数千支股…