IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> LVGL移植到STM32——之GUI GUIDER -> 正文阅读

[嵌入式]LVGL移植到STM32——之GUI GUIDER


前言

使用GUI GUIDER来创建界面效率很高,且非常直观,推荐使用!

声明:文章只记录本人的使用及学习经历,在此过程中参考了大量的别人的文章,表示感谢。本人水平有限,难免有不合理之处,分享也是为网络做点贡献,如果对你有帮助那就更好了。

一、准备工作

  1. 准备一个可用屏幕显示的工程
    文中移植基于正点原子精英版的示例工程。

  2. 安装好GUI GUIDER
    论坛有网盘下载的链接
    https://www.nxpic.org.cn/module/forum/thread-621968-1-1.html

    安装很简单,这里就不详述了。

二、创建一个简单的工程

路径最好不要有中文
在这里插入图片描述
拖一个按钮
在这里插入图片描述
可以启动模拟器看看效果

三、添加文件

1.创建路径

stm32工程新建GUI文件夹(名字任意,看你喜欢)
在这里插入图片描述
GUI文件夹内再新建如图文件夹
在这里插入图片描述

2.复制gui生成的文件到stm32工程中

文件较多,要仔细

复制LVGL源文件(图中左边目录是gui工程的路径,右边是stm32工程的路径)
在这里插入图片描述

应用文件
在这里插入图片描述
移植文件(改不改名无所谓,看个人喜欢)
在这里插入图片描述
配置文件

在这里插入图片描述

头文件
在这里插入图片描述
终于复制完了,开始修改工程啦!

四、修改stm32工程实现界面显示

同样修改的地方很多要仔细

1.添加C文件路径

创建3个文件夹
在这里插入图片描述

添加应用文件
在这里插入图片描述

添加移植文件
在这里插入图片描述
添加源文件
(当然也可根据所需添加,但是为了避免出错或懒得整理直接全部添加就行了)
在这里插入图片描述

2.添加头文件路径

3.修改头文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.修改源文件

启用该文件

在这里插入图片描述

选择一个实例,如果内存够大可以将缓存改大点或用双缓存,提高刷屏速度。
在这里插入图片描述

在这里插入图片描述

填充屏幕刷新绘制
在这里插入图片描述
启用触摸等输入
在这里插入图片描述

5.添加应用到主程序

在这里插入图片描述

5.添加lvgl“心跳”

可以有很多种方式,这里简单点用了一个定时器。
在这里插入图片描述

6.修改堆栈

在这里插入图片描述
至此大功告成

7.编译下载

若编译出错,仔细看看是不是缺或错步骤了。

看效果是不是还挺不错
在这里插入图片描述
显示部分到此就结束了,后面说说事件的响应。

五、添加事件实现对触控的响应

1.移植触摸驱动

触摸接口一般是iic或spi,以正点原子的触摸为例,只需要这三个文件
在这里插入图片描述
在这里插入图片描述

2.触控移植到lvgl

观察lv_port_indev.c文件会发现触控的框架已经搭建的很完善了,我们要做的就只是将触摸屏的坐标数据给到lvgl。框架中包含了触控、鼠标、键盘、按钮、编码器,我们只用常见的触控和按钮就好。

lv_port_indev_init 函数中只保留touchpad和button相关的,其余注释掉,如下图:

在这里插入图片描述

在这里插入图片描述

添加驱动

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
到这里就移植好了驱动了,在初始化调用lv_port_indev_init后,触摸驱动会被注册到LVGL
在这里插入图片描述
注册到LVGL其实就是创建了一个受lvgl控制的任务,可以看做一个线程,而任务的时基由调用函数lv_tick_inc()实现。

3.添加触控事件

再次打开gui guider 添加如图的事件,重新生成代码,将events_init.c文件替换到工程

在这里插入图片描述
再稍作填充即可
在这里插入图片描述
这样就完成了按钮按下的事件绑定,至于如何将坐标映射到具体按钮的过程就不需要我们关心了,lvgl已经帮我们实现了,我们做的就只是绑定到控件,非常方便。

再试试,按下按钮后发现能变红色了。

在这里插入图片描述

六、添加事件实现对按钮的响应

1.添加按键对应的控件的坐标

在这里插入图片描述

2.添加按钮初始化

在这里插入图片描述

3.修改按键返回ID

在这里插入图片描述
这样就可以啦,按键是很灵活的,其实不一定要按照框架来实现,完全可以自己实现在按键按下的时候去调用某个事件会更快更直接。

七、其他

1.修改字体

修改调用即可
在这里插入图片描述
界面设计更新后直接再将生成代码的generated文件夹内容替换到lvgl_app文件夹,再稍微修改即可

2.中文显示

1).gui guider生成字体

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

2).字体添加到工程

复制文件
在这里插入图片描述

添加到工程目录
在这里插入图片描述
添加声明,名称和字体结构体名称一致
在这里插入图片描述
在这里插入图片描述
修改字符编码为utf-8(不修改的话编译出来是无效的)

在这里插入图片描述
在控件生成函数中修改显示文字及字体

在这里插入图片描述
编译下载则可显示中文了

在这里插入图片描述

3.加快刷屏速度

提高缓冲区大小或使用双缓存
在这里插入图片描述

后话

虽然lvgl宣称占用资源极少,但是对于空间紧张的单片机来说还是占用太多了,尤其是内存,稍微用复杂的控件就得分配大块的内存,否则在运行几次之后就会卡住或者直接就没法显示。如果要显示好看的复杂的界面还是得外扩内存及flash,用上更好的CPU才行,否则还是用基本的绘图吧。
另外,gui guider目前也有不足的点,生成代码稍微有点慢,不支持最新版本的库。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 23:05:40  更:2021-12-28 23:12:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:25:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码