LVGL学习笔记(二):从0到1移植LVGL8.1到STM32平台上(完结篇)

这篇具有很好参考价值的文章主要介绍了LVGL学习笔记(二):从0到1移植LVGL8.1到STM32平台上(完结篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:TFT-LCD屏触摸

二:STM32CubeMX配置

三:FT5206触摸芯片驱动代码移植

四:LVGL 移植

4.1 源码下载

4.2 代码移植

 4.3 添加源码至工程

4.4 指定头文件路径

4.5 设置编译参数

 4.6 修改LVGL源文件

  4.7 修改显示驱动接口

   4.8 修改输入设备驱动接口

 五:下载验证

 六:工程代码


· 废话不多说,有关电容屏的触摸原理,此文不作解释,自己去看

· 确定自己的触摸屏的驱动IC是什么型号的,找供应商要驱动源代码

· 我使用的是正点原子ALIENTEK 7’ TFTLCD 电容触摸屏,驱动IC为FT5206

一:TFT-LCD屏触摸

· 废话不多说,有关电容屏的触摸原理,此文不作解释,自己去看

· 确定自己的触摸屏的驱动IC是什么型号的,找供应商要驱动源代码

· 我使用的是正点原子ALIENTEK 7’ TFTLCD 电容触摸屏,驱动IC为FT5206

原理图

lvgl stm32,学习

· 从图中可以看出, T_MOSI、T_MISO、T_SCK、T_CS 和 T_PEN 分别连接在
STM32F1 的:PF9、PB2、PB1、PF11 和 PF10 上,电容式触摸屏没有用到
T_MISO,而是用到四根线,分别是: T_PEN(CT_INT)、 T_CS(CT_RST)、
T_CLK(CT_SCL) 和T_MOSI(CT_SDA)。

· 其中:CT_INT、CT_RST、CT_SCL 和 CT_SDA 分别是 FT5206的:中断输出
信号、复位信号,IIC 的 SCL 和 SDA 信号(PS:为了节省CPU开支,可以
使用外部中断的方式判断屏幕是否被触摸,具体设置方式,此文不作介绍)

二:STM32CubeMX配置

· 打开我们上节配置的CubeMx工程

· 软件模拟IIC

· 配置以下4个引脚

lvgl stm32,学习

lvgl stm32,学习

 · 检查引脚无误后,生成代码,编译后无问题,开始移植触摸芯片代码

三:FT5206触摸芯片驱动代码移植

· 我使用的正点原子的屏幕,所以我直接移植正点原子编写的FT5206驱动代码

· 如果你们用的是其它厂商的代码,直接问他们要触摸芯片的驱动代码就行了

· 以下移植步骤局限于正点原子的屏幕

· 将此文件夹,复制至自己的工程文件下

lvgl stm32,学习

lvgl stm32,学习

· 添加 .c和 .h文件

lvgl stm32,学习

. 我的触摸芯片是FT5206,所以加入这几个源文件即可

. 把所有.c 文件中的printf函数屏蔽掉,因为我们这里是没有开启串口,会导致程序卡死!!!!!!!!!!

· 把正点原子触摸屏实验下的sys文件拷贝至自己的工程文件,并添加.c 和 .h文件

lvgl stm32,学习

lvgl stm32,学习

· 打开lcd.h 头文件,屏蔽#include "stm32f103xe.h",添加sys.h

lvgl stm32,学习

· 打开sys.h 头文件,添加stm32f103xe.h头文件

lvgl stm32,学习

 · 打开ctiic.c,屏蔽CT_IIC_Init()函数里的内容,并屏蔽delay.h,添加tim.h

lvgl stm32,学习

lvgl stm32,学习

· 打开ft5206.c,增加tim.h,屏蔽usart.h,delay.h

lvgl stm32,学习

· 屏蔽FT5206_Init(void)函数以下内容

· 打开touch.c文件,把电阻屏用到的相关接口屏蔽掉

lvgl stm32,学习

 lvgl stm32,学习

 lvgl stm32,学习

 lvgl stm32,学习

· TP_Init(void)函数,只留下以下部分,其余屏蔽掉

lvgl stm32,学习

 · 打开main.c,添加touch.h头文件

lvgl stm32,学习

 · 在main函数添加以下三个函数的全部内容

lvgl stm32,学习

· 移植完成后、编译、烧录

· 触摸效果展示

lvgl stm32,学习

四:LVGL 移植

4.1 源码下载

  • Github仓库:http:/github.com/lvgl/lvgl

lvgl stm32,学习

4.2 代码移植

· 在自己的工程文件下新建两个文件夹 GUI 和 GUI_APP

 lvgl stm32,学习

在GUI目录下新建两个文件夹 lvgl 和lvgl_port

lvgl stm32,学习

· 将LVGL源码目录下的src文件夹以及 lvgl.h 头文件拷贝至工程文件GUI/lvgl目录下

lvgl stm32,学习

· 把lvgl源码根目录下的lv_conf_template.h 拷贝至工程文件下GUI根目录下,
   并且去掉_template

lvgl stm32,学习

 4.3 添加源码至工程

在MDK里面新建以下这两个文件

lvgl stm32,学习        

 在GUI/lvgl组中添加以下文件夹中所有的.c文件:

GUI/lvgl/src/lv_core
GUI/lvgl/src/lv_draw
GUI/lvgl/src/lv_extra(除了lib外,除非你用到了相关功能)
GUI/lvgl/src/lv_font
GUI/lvgl/src/lv_hal
GUI/lvgl/src/lv_misc
GUI/lvgl/src/lv_themes
GUI/lvgl/src/lv_widgets
//注意不要添加 GUI/lvgl/src/lv_gpu 中的文件,除非你用到了相关功能

在GUI/lvgl_port组中添加以下.c文件:

GUI/lvgl_port/lv_port_disp.c
GUI/lvgl_port/lv_port_indev.c
//注意不要添加 GUI/lvgl_port/lv_port_fs.c 中的文件,除非你用到了相关功能

lvgl stm32,学习

4.4 指定头文件路径

LVGL 的源码已经添加到开发环境的组文件夹下面,编译的时候需要为这些源文件指定头文件的路径,不然编译会报错。只需要将 GUIGUI/lvglGUI/lvgl_port 的路径在开发环境里面指定即可。

lvgl stm32,学习

4.5 设置编译参数

LVGL要求 C99 或更新的编译器,否则编译是会报错的。

lvgl stm32,学习

 4.6 修改LVGL源文件

· 打开lv_conf.h 头文件,将第15行改为1
· 第27行是颜色设置,如果是单色屏的话就改为1

lvgl stm32,学习

 · 内存设置
给LVGL分配动态内存RAM的大小,至少需要2k,资源允许的情况下可以稍微设大些,这个设置过小的话,在跑一些稍微复杂的demo时界面就会刷不出来。

lvgl stm32,学习

 · 底层设置

· 第88行,如果LV_TICK_CUSTOM == 0,可以用lv_tick_inc()提供时钟节拍,也就是将
  lv_tick_inc(1)放在我们上节开启的定时器6中断里调用即可

· 如果LV_TICK_CUSTOM == 1,就无须在应用程序中主动调用 lv_tick_inc(x) 函数,而是需要定义一个 获取当前系统已运行时间的函数(例如HAL_GetTick())
 
· 第90行就是提供时钟节拍函数所在的头文件

· 第91行就是提供时钟节拍的函数

· 我这里直接使用sys_tick为LVGL提供时钟节拍

· 第96行用来调节界面缩放比例的,此值越大,控件分布的就越散,控件自身的间隔也会
  变大。可根据实际情况进行更改,例如128x128分辨率1.44英寸的屏幕,那么 DPI = ((√128*128) / 1.44) ≈ 89

lvgl stm32,学习

  4.7 修改显示驱动接口

        打开lv_port_disp.c

· 将第7行修为1

· 第12行去掉_template

· 第19 20行定义屏幕像素高度

lvgl stm32,学习

· 第54行,可以将屏幕的显示驱动初始化接口放进disp_init()函数,该函数在下方定义
  我这里是没有放进去,直接在main函数哪里初始化了,看个人需求,我比较懒!

lvgl stm32,学习

· 显示缓冲区初始化有三种方式,这里使用的是方式1,方式1消耗的硬件资源最小,但运行效果也是最差的,三种方式如下

· 第一种只创建一个缓存区,长度是横轴像素长度的 10 倍

· 第二种创建两个缓存区,长度都是横轴的 10 倍,可以结合 DMA 加快写入速度

· 第三种则是创建两个,大小是横轴乘以纵轴,相当于整个屏幕大小

lvgl stm32,学习

· 第108、109行修改为上方屏幕分辨率的宏定义

lvgl stm32,学习

· 修改 disp_flush() 函数,将自己显示屏对应的填充颜色块函数放到这里,这个函数是用来刷新显示区域的,速度越快越好

红色标注部分的函数也就是以单个像素点填充屏幕的函数

lvgl stm32,学习

   4.8 修改输入设备驱动接口

        打开lv_port_disp.c

· 第7行修改为1

· 第12行去掉_template

· 第14行增加touch.h头文件

lvgl stm32,学习

· 找到lv_port_indev_init(void)函数

· 将屏幕触摸驱动接口初始化放进touchpad_init();

· touchpad_init();在下方有定义,我这里就不放了,因为在main函数已经初始化了,我比较懒

lvgl stm32,学习

·  注册一个输入设备,输入设备可以是触摸屏、鼠标、键盘、编码器、按键,这里我们只使用触摸屏,第99行往后的代码全部注释。lvgl stm32,学习

 · 修改touchpad_read函数

· 以下代码局限于正点原子的板子,具体写法参考你所用的板子

static uint16_t last_x = 0;
static uint16_t last_y = 0;
	
if(tp_dev.sta&TP_PRES_DOWN)//触摸按下了
{
	last_x = tp_dev.x[0];
	last_y = tp_dev.y[0];
	data->point.x = last_x;
	data->point.y = last_y;
	data->state = LV_INDEV_STATE_PR;
}
else
{//触摸松开了
	data->point.x = last_x;
	data->point.y = last_y;
	data->state = LV_INDEV_STATE_REL;
}

lvgl stm32,学习

 · 打开lv_port_indev.h

   使能文件及声明函数

lvgl stm32,学习

  · 打开main.c

#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lvgl.h"

lvgl stm32,学习

lv_port_disp_init();       
lv_port_indev_init();       
lvgl_first_demo_start();


tp_dev.scan(0);
lv_timer_handler();

· 第272行是屏幕触摸扫描函数

lvgl stm32,学习

 五:下载验证

video(11)

 六:工程代码

链接:https://pan.baidu.com/s/1HjQSt3Lb4xQe9VRjZbPcSQ 
提取码:h1xu文章来源地址https://www.toymoban.com/news/detail-776157.html

到了这里,关于LVGL学习笔记(二):从0到1移植LVGL8.1到STM32平台上(完结篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习笔记ESP32——lvgl disp移植(1)

    目录 一、简介 二、GitHub上下载lvgl库         1、下载lvgl库 三、准备一个工程  四、修改工程  五、对disp进行修改 ​编辑 六、主函数的修改 七、硬件的修改 八、MUSIC示例演示 一、简介         以esp32 idf导出的hello world例程,移植lvgl disp和indev驱动的学习笔记。 二、Gi

    2024年01月16日
    浏览(41)
  • 【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

    目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件  六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL  十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 丰富且强大的模块化图形组

    2024年04月27日
    浏览(35)
  • idf lvgl8显示触摸移植,st7789v+cst816

    用到的所有文件链接 我整理的lvgl文件:https://gitee.com/BHJ2022/lvgl.git gsm项目地址:https://gitee.com/gsm-wheather-project 1)将gsm中的屏幕及触摸驱动(touch_screen文件夹)直接复制到lvgl_disp_indev的component文件中 2)修改touch_screen的cmakelist如图 3)将gsm中的main中的include直接复制到lvgl_disp_

    2024年02月07日
    浏览(55)
  • STM32移植LVGL(LittleVGL)

    https://lvgl.io/ 这是LVGL的官网, http://lvgl.100ask.org/8.2/intro/index.html 这是lvgl的中文介绍网站。 先通过这两个网站大致了解一下lvgl,在后面移植时会有个大概了解,移植起来会更清晰易懂。 1、准备STM32工程 1、先准备所用到的屏幕的显示和触摸(有触摸功能的屏幕)的工程。我这

    2023年04月16日
    浏览(42)
  • stm32 移植 LVGL 基础工程

    注意:这里只是本人的一些学习心得,和对移植的理解,不明白之处还得去跟着官方教程学学! 开发板使用的是 stm32f103zet6 芯片 准备 LVGL 源码 8.3 版本 定时器实验 触摸屏实验(使用 3.5的 屏幕) 1、使用触摸屏实验为主体来配置文件 (1)把触摸屏实验改为 LVGL 移植实验 (

    2024年01月20日
    浏览(43)
  • LVGL触摸移植——stm32野火F103

    目录 系列文章目录 章目录 目标 一、认识端口文件 二、使能 lv_port_indev.c  三、接口函数 1.输入设备初始化 四、Main函数 五、过程中的疑难杂症 1.内存不足 2、LCD白屏 五、效果 总结 在显示的基础上添加触摸输入 提示:以下是本篇文章正文内容,下面案例可供参考 这两个是

    2024年02月11日
    浏览(47)
  • STM32移植LVGL+旋转编码器接口对接

    写在前面:本菜鸟结合了许多大佬的文章,成功实现了基于LVGL的GUI设计,小开心~浅浅记录一下!~ 本文以单片机STM32F103VET6为核心,利用ST7796芯片驱动分辨率为480*320的LCD液晶屏模块,移植LVGL,对接显示接口,对接外部接口——旋转编码器,完成以上两步,就可以实现LVGL的显

    2024年02月10日
    浏览(46)
  • LVGL8.1版本笔记

    之前学过LVGL6,现在版本更新到LVGL8了,学习下新版本,本文主要是记录一些LVGL8的新特性,区别和lvgl6的不同之处 。 lv_task_handler()的作用: 链接: lv_task_handler()是什么,lvgl到底在while(1)中做了什么 总结:lv_task_handler()中,调用lv_indev_read_task()来处理输入信息,当没有输入时,whi

    2024年01月16日
    浏览(43)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植过程成功

    STM32F103ZET6——LVGL_GUI_GUIDER移植过程 STM32F103ZET6——LVGL_GUI_GUIDER移植过程 使用工具: 1.LVGL库8.02 2.GUI_GUIDER 3.keil5 设计出来的总体是这样 提示:以下是本篇文章正文内容,下面案例可供参考 这部分有很多大佬已经写的很成熟了,我就不赘述了 安装包在这里硬件资源 右上角可将

    2024年02月12日
    浏览(66)
  • SquareLine studio设计LVGL工程,移植到stm32的过程

            本文主要是给大家介绍一下如何将SquareLine studio设计的LVGL工程,移植到stm32的LCD液晶显示屏上。 本文做好的移植模板在这(移植模板),模板可以直接在正点原子stm32f103ze系列板子上运行测试。显示屏使用的是4.3寸屏幕(像素800*480)         ·以我自己设计的LVGL工程

    2024年02月03日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包