LVGL移植到STM32F4

news2024/9/22 4:16:36

1、LVGL简介

LittlevGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。

1.1、LVGL特点 

  1. 强大的构建模组:按钮、图表、列表、滑块、图像等
  2. 先进的图形:动画、反锯齿、半透明、平滑滚动
  3. 多样的输入设备:触摸板、鼠标、键盘、编码器等
  4. 多显示器支持:支持同时使用多个TFT或单色显示器
  5. 多语言支持:格式文字编码
  6. 硬件无关:可用于任UTF-8意微控制器或显示器
  7. 可裁剪:用于小内存(64 KB FLASH,16 KB RAM)操作
  8. 外部支持:操作系统、外部存储以及GPU
  9. 单帧缓存:即可实现先进的图形效果
  10. C语言编写:以最大化兼容(C++ 兼容)
  11. 模拟器:无需嵌入式硬件就可以在电脑上开始GUI设计
  12. 文档:在线及离线
  13. 免费开源:基于MIT协议

1.2、LVGL硬件运行要求

名称

最小值

推荐值

Arch

>= 16位的微控制器或处理器

Clock

> 16 MHz 时钟速度

Flash/ROM

> 64 kB

> 180 kB

Static RAM

~2 kB,取决于使用的功能和对象类型

Stack

> 2 kB

> 8 kB

Heap

> 4 KB

> 32 kB

Compiler

C99或以上

1.3、LVGL网址

  1. LVGL官网:LVGL - Light and Versatile Embedded Graphics Library 
  2. LVGL代码库地址(Simulator、Source、Examples、Esp32、MicroPython):https://github.com/lvgl 
  3. LVGL源码下载地址:https://github.com/lvgl/lvgl 

2、LVGL源码下载

1. 在源码链接中下载一份源码,LVGL已经更新迭代了很多个版本,这里我们选择8.2.0版本来移植。    

注意:不同版本之间有很大的不同,尽量使用与本文相同的版本,否则不予解释。

2. 下载后得到如下目录结构

 

3. 源码各文件作用
        github:github的配置文件,忽略即可。
        docs:说明文档。
        examples:示例代码。
        scripts:配置脚本,Linux平台会用到,Windows忽略即可。
        src:源代码。
        tests:测试代码。

4. LVGL移植需求
        STM32工程,该工程应具备功能:

                LCD显示(必备)
                TOUCH触摸(可选)
                内存管理(可选)
                操作系统(可选)
          注意:本示例中使用1.3寸SPI LCD,分辨率为240*240        

3、LVGL移植过程

3.1、 添加源码


在工程目录下创建LVGL文件夹,以及src、port子文件夹,如下图所示

 

  2.将LVGL的源码(lvgl-8.2.0\src)复制到本工程中的LVGL\src目录中


3.将LVGL的驱动接口文件(lvgl-8.2.0\examples\porting)复制到本工程中的LVGL\port文件夹中。
其中共六个文件:
disp为显示接口驱动文件(LCD),
fs为文件系统接口驱动文件(FATFS),
indev为输入设备接口驱动文件(TOUCH)。


4.将LVGL源码中的lv_conf_template.h更名为lv_conf.h,与lvgl.h一同拷贝到工程中的LVGL目录下


5.打开工程,在工程的目录结构中添加两个文件夹lvgl/src ,lvgl/port 
注意:添加.h和.c文件时要注意将所有文件添加,如果少添加或者添加错误会导致编译报很多错误


6.添加源码头文件路径

7.如果工程中没有内存管理,则需要修改启动文件中的堆栈。根据官方推荐我们可以把堆栈修改为4K,假如使用的功能比较多,还需要再适当增大。

8.LVGL的源码需要C99的支持,否则编译无法通过。

9.如果MCU支持编译器优化,可以开启该设置加速界面显示

3.2、更改接口文件


1.默认lv_port_disp_template.c和lv_port_disp_template.h的条件编译是关闭的,我们需要把他打开并修改包含目录层级。

 
修改lvgl.h头文件的位置

2.默认lv_conf.h的条件编译是关闭的,我们需要把他打开并修改包含目录层级。


定义硬件屏幕大小


还需要做如下修改:
在lv_port_disp_template.h中引入lv_conf.h


  
使用单缓冲区渲染,屏蔽不需要的缓冲区,替换屏幕大小宏

3.更改lvgl刷屏函数
添加屏幕设置头文件

更改刷屏函数


     
其它配置暂时默认即可,需要开启时在进行开启


4.在main.h头文件中添加lvgl.h、lv_conf.h、lv_port_disp_template.h文件

3.3、编译工程

3.4、显示实现


1.配置一个定时器为LVGL提供1ms的时钟心跳,该定时器的中断服务函数中调用lv_tick_inc(1);即可。
本例使用系统滴答定时器。
   

  
2.主程序中调用lv_task_handler();函数处理事件
Main.c


lvgl测试代码

// lvgl测试代码
lv_init();
lv_port_disp_init();

lv_obj_t* scrHome = NULL;
lv_obj_t * arc = NULL;

scrHome = lv_obj_create(NULL);
lv_obj_set_pos(scrHome, 0, 0);
lv_obj_set_size(scrHome,240,260);    

arc = lv_arc_create(scrHome);
lv_arc_set_rotation(arc, 270);
lv_arc_set_bg_angles(arc, 0, 360);
lv_obj_remove_style(arc, NULL, LV_PART_KNOB);   /*Be sure the knob is not displayed*/
lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);  /*To not allow adjusting by click*/
lv_obj_center(arc);  

lv_scr_load(scrHome);    

3.编译下载进入板子
屏幕上显示圆弧图案即为移植成功,也可以移植其他官网测试示例.

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hadoop学习---基于Hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段: start_time(表示该条记录的生命周期开始时间——周期快照时的状态)end_time(该条记录的生命周期结束时…

家政保洁上门预约服务小程序源码系统 带完整的安装代码包以及搭建教程

随着社会的快速发展和人们生活节奏的加快,家政保洁服务已成为现代生活中不可或缺的一部分。为了满足广大用户的需求,罗峰给大家分享一款家政保洁上门预约服务小程序源码系统,该系统不仅提供完整的安装代码包,还附带详细的搭建教程…

ContEA阅读笔记

Facing Changes: Continual Entity Alignment for Growing Knowledge Graphs 面对变化:不断增长的知识图谱的持续实体对齐 Abstract 实体对齐是知识图谱(KG)集成中一项基本且重要的技术。多年来,实体对齐的研究一直基于知识图谱是静态的假设&#xff…

嵌入式学习——C语言基础——day14

1. 共用体 1.1 定义 union 共用名 { 数据类型1 成员变量1; 数据类型2 成员变量2; 数据类型3 成员变量3; .. }; 1.2 共用体和结构体的区别 1. 结构体每个成员变量空间独立 2. 共用体每个成员变量空间共享 1.3 判断内存大小端 1. 内存大端…

从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等

1、多个环境与配置文件 2、统一返回值 返回值包括两种场景:正常controller的返回、异常发生之后返回 正常controller的返回:通过在controller的默认返回Response实现 异常发生之后返回:通过全局异常处理统一捕获返回 首先创建类StatusCode…

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…

常用六大加密软件排行榜|好用加密文件软件分享

为了保障数据安全,越来越多的企业开始使用文件加密软件。哪款加密软件适合企业哪些办公场景呢? 今天就给大家推荐一下文件加密软件排行榜的前六名: 1.域智盾 这款软件专为企业和政府机构设计,提供全面的文件保护解决方案。 点…

typescript类型基础

typescript类型基础 枚举类型 enum Season {Spring,Summer,Fall,Winter }数值型枚举 enum Direction {Up,Down,Left,Right } const direction:Direction Direction.up每个数值型枚举成员都表示一个具体的数字,如果在定义一个枚举的时候没有设置枚举成员的值&…

InfiniGate自研网关实现三

9.网关注册中心服务初始创建 整理整个网关调用链路流程,梳理核心服务。并完成网关中心简单DDD模型结构工程的搭建,与库表连通可以查询接口映射数据。 在前面我已经开发出了一个初具模型的核心通信组件,那么我该如何使用这个组件呢&#xff…

私域流量引流方式有哪些?

私域流量引流的方法无非是营销渠道投放、各平台KOL投放、自有自媒体平台账号内容引流、线下引流、老客户转介绍裂变等几个方面,下面对各种不同方法进行简单介绍。 1、营销渠道投放:选择广点通、粉丝通、某些app的信息流和dou等大平台自带的推广渠道工具…

【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』

文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…

揭秘“循环购”模式:为何商家如此慷慨,消费者又能获利?

亲爱的朋友们,我是吴军。今天,我将为大家揭开一种备受瞩目的商业模式——“循环购”的神秘面纱。你是否也好奇,为何商家愿意在你消费后给予丰厚的回馈,甚至让你在消费过程中还能赚取收益?这种模式的背后到底隐藏着什么…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时,使用XSSFWorkbook进行写入时会发现,只有将100w条数据全部加载到内存后才会用write()方法统一写入,效率很低,所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

IMU在羽球发球力中的应用

在羽毛球运动中,发球不仅是比赛得分的关键,其技术细节更是影响比赛走向的重要因素。近期,来自斯洛伐克和波兰的科研团队利用先进的IMU传感器技术,对顶尖选手的发球技巧进行了深度分析,旨在揭示不同发球方向对上身动作的…

通过线程池开启异步任务 @Async

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用户体…

《第一行代码》第二版学习笔记(7)——使用通知和摄像头

文章目录 一、使用通知二、调用摄像头 介绍了通知基于8.0的使用方法和如何调用摄像头拍照 一、使用通知 public void onClick(View v) {if (v.getId() R.id.send_notice){Intent intent new Intent(this,NotificationActivity.class);PendingIntent pi PendingIntent.getAct…

如何快速找出文件夹里的全部带有英文纯英文的文件

参考此文章:如何快速找出文件夹里的全部带有中文&纯中文的文件 只需要根据自己的需求,把下面相关的设置调整好即可

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一,主要的功能是将客户端输入的 SQL 语句分解为语法单元,然后将这些语法单元转化成数据库内部可识别的数据结构,最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

事件知识图谱 - EventKGE_Event knowledge graph embedding with event causal transfer

EventKGE: Event knowledge graph embedding with event causal transfer 作者:Daiyi Li(南航) 来源:2023 Knowledge-Based Systems(中科院一区,影响因子8.8) 论文:[ScienceDirec…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月6日,星期一

每天一分钟,知晓天下事! 2024年5月6日 星期一 农历三月廿八 1、 五一假期全社会跨区域人员流动量预计约13.6亿人次,日均超2.7亿人次。 2、 祝贺!国羽男队第11次夺得汤姆斯杯冠军,国羽女队第16次夺得尤伯杯冠军。 3、…