移植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”就行了.

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

效果展示

在这里插入图片描述

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman:如何对WebService接口进行测试

前言 由于工作所需,需要使用Postman测试工具,对基于ws规范的WebService接口进行测试。在经过多种尝试后,终于找到了正确的测试方法,下面我便详细记录测试步骤,以便以后再次测试时可以拿来主义。 第一步:确保WebServi…

使用matlab实现图像信号的色彩空间转换

利用matlab对图像信号进行读取,并对RGB空间进行转换,如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后,进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像;但是爆出了 Untitled5(line 5)hsi rgb2h…

SpringBoot 自动配置原理

SpringBoot 自动配置原理 注: 本文使用的springboot版本为 2.7.11 1、SpringBootApplication 字面分析,这个注解是标注一个Spring Boot应用。 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration En…

哈希竞猜游戏开发源码部署方案

随着互联网技术的发展,越来越多的人开始关注网络安全问题,而哈希算法作为一种重要的加密技术,在网络安全领域得到了广泛应用。其中,哈希竞猜游戏作为一种新型的网络安全挑战赛,也受到了越来越多人的关注。本文将介绍哈…

应用层——HTTP协议

文章目录 HTTP协议1.HTTP简介2.认识URL3.urlencode和urldecode4.HTTP协议格式(1)HTTP请求协议格式(2)HTTP响应协议格式 5.HTTP的方法6.HTTP的状态码7.HTTP常见的Header8.Cookie和Session HTTP协议 1.HTTP简介 HTTP(Hy…

centos7 安装网络文件共享NFS详细过程

网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。 多个服务器之间需要共享文件,通过NFS服务共享是一个简…

说说你对React Router的理解?常用的Router组件有哪些?

一、是什么 react-router等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面 路由的本质就是页面的URL发生改变时,页面的显示结果可以根据URL的变化而变化,但是页面不会刷新 因此,可以通过前端路由可以实现单页(SPA)应用 react-router主要分成了几个不…

如何向MapInfo Pro添加自定义符号?

用户可以在MapInfo Pro中创建和使用自己的自定义图像作为符号。要访问这些自定义符号,请将它们放在CUSTSYMB目录中,然后从“符号样式”对话框(Style>符号样式)的“字体”列表中的“自定义符号”选项中选择它们。MapInfo Pro中的…

微信小程序_02

能够使用WXML模版语法渲染页面结构 数据绑定 1、数据绑定的基本原则 在data中定义数据在WXML中使用数据 2、在data中定义页面的数据 ​ 在页面对应的.js文件中,把数据定义到data对象中即可: Page({data:{//字符串类型的数据info:init data,//数组类…

信驰达科技加入车联网联盟(CCC),推进数字钥匙发展与应用

CCC)的会员。 图 1 深圳信驰达正式成为车联网联盟(CCC)会员 车联网联盟(CCC)是一个跨行业组织,致力于推动智能手机与汽车连接解决方案的技术发展。CCC涵盖了全球汽车和智能手机行业的大部分企业,拥有150多家成员公司。CCC成员公司包括智能手机和汽车制造…

navicat创建MySql定时任务

navicat创建MySql定时任务 前提 需要root用户权限 需要开启定时任务 1、开启定时任务 1.1 查看定时任务是否开启 mysql> show variables like event_scheduler;1.2 临时开启定时任务(下次重启后失效) set global event_scheduler on;1.3 设置永久开启定时任务 查看my…

2011年12月13日 Go生态洞察:从零到Go,在谷歌首页上的24小时飞跃

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

MacOS下VMware Fusion配置静态IP

前言 在虚拟机安装系统后,默认是通过DHCP动态分配的IP,这会导致每次重启虚拟机ip都可能会改变,使用起来会有很多不便。 配置静态IP 查看主机网关地址 cat /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 查看主机DNS,m…

云课五分钟的一些想法

起源 自中学起,就积极学习和掌握互联网相关知识,到如今已经快30年了。 个人也全程经历了从信息时代的互联网(硬)到智能时代的大模型(软)。 整体信息到智能的基础设施,由硬到软,机…

51单片机应用从零开始(二)

目录 1. 什么是单片机系统 1.1 单片机本身 1.2 构成单片机系统——单片机外围器件 2. 如何控制一个发光二极管 2.1 硬件设计(系统电路图 ) 2.2 硬件设计(搭建硬件电路的器材 ) 2.3 软件设计(中文描述的程…

个人怎么投资伦敦金?

伦敦金是一种被广泛交易的黄金合约,是投资者参与黄金市场的一种交易方式。伦敦金投资也是黄金交易中最为方便快捷的一个种类,在黄金交易市场中占有较大的比例,每天都有来自全球各地的投资者参与买卖,是实现财富增益的一个有效途径…

钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成

连接科技与能源:钉钉API与集简云的一次集成尝试 在数字化时代,许多公司面临着如何将传统的工作方式转变为更智能、高效的挑战。某能源科技有限公司也不例外,他们是一家专注于能源科技领域的公司,产品包括节能灯具、光伏逆变器、电…

PayPal的CISO谈GenAI如何提高网络安全

在最近一个季度(2023财年第二季度),PayPal报告收入为73亿美元,同比增长7%,5%的交易增长和37%的增值服务收入增长带来了强劲的季度业绩。截至2022年,PayPal的营收为275亿美元。 在进入PayPal之前,Keren创建了两家网络安…

个微协议开发/微信个人号二次开发/ipad协议/api接口

E云管家,是完整的第三方服务平台,并基于IPAD协议8.0.37开发出的最新个微API服务框架。 你可以 通过API 实现 个性化微信功能 (例云发单助手、社群小助手、客服系统、机器人等),用来自动管理微信消息。用户仅可一次对接…

研究前沿 | Science:单细胞测序助力绘制迄今最完善的灵长类动物前大脑发育图谱

引言 大脑发育的关键分子机制在啮齿动物中已有所了解,但在灵长类动物中仍然不清楚,这限制了研究者对高级认知能力起源和功能障碍的理解。此外,在包括人类在内的灵长类动物中,关于轴突投射路径上的丘脑区域和皮层区域多样化的早期分…