stm32 移植 LVGL 基础工程

这篇具有很好参考价值的文章主要介绍了stm32 移植 LVGL 基础工程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

stm32 移植 LVGL

注意:这里只是本人的一些学习心得,和对移植的理解,不明白之处还得去跟着官方教程学学!

一、准备工作

(1) LVGL 源码 8.3 版本 获取(win11 可以直接右键菜单里面打开dos命令框的):
 	git clone -b release/v8.3 --depth=1 https://github.com/lvgl/lvgl.git
 (2)下面两个实验来自于 正点原子的 实验源码(可以从以下链接去正点原子下载自己对应的开发板源码):
	 http://www.openedv.com/docs/index.html

开发板使用的是 stm32f103zet6 芯片
准备 LVGL 源码 8.3 版本
定时器实验
触摸屏实验(使用 3.5的 屏幕)
stm32 lvgl,stm32,单片机,嵌入式硬件

二、配置目录结构文件

1、使用触摸屏实验为主体来配置文件

(1)把触摸屏实验改为 LVGL 移植实验
(2)移植 基本定时器的BSP内的文件到主体文件的BSP

下面是基本定时器的BSP文件内容(只需要复制TIMER即可)
stm32 lvgl,stm32,单片机,嵌入式硬件
下面是主目录的BSP复制后的内容
stm32 lvgl,stm32,单片机,嵌入式硬件(3)移植 LVGL库的内容
1)配置目录结构(在主文件Middlewares里面创建以下目录结构)
stm32 lvgl,stm32,单片机,嵌入式硬件
2) 移植下载的 lvgl 文件到刚刚创建的目录 lvgl文件夹里面
stm32 lvgl,stm32,单片机,嵌入式硬件
自此完成了目录的配置!

三、文件修改

1、修改文件名 lv_conf_template.h 为 lv_conf.h
stm32 lvgl,stm32,单片机,嵌入式硬件

2、删除 examples 内的文件 只保留 porting (porting是个接口文件,用于LCD显示器输入输出的配置的,是必须的文件)
stm32 lvgl,stm32,单片机,嵌入式硬件

四、进入 kail 配置目录结构

1、修改项目名称 红线部分把原来的名称改为 LVGL (改为其他也行)
stm32 lvgl,stm32,单片机,嵌入式硬件
2、配置kail的目录结构
在 Manage Project Item 里面配置目录结构,添加图下目录结构:

Middlewares/lvgl/example/porting
Middlewares/lvgl/src/core
Middlewares/lvgl/src/draw
Middlewares/lvgl/src/extra
Middlewares/lvgl/src/font
Middlewares/lvgl/src/hal
Middlewares/lvgl/src/misc
Middlewares/lvgl/src/widgets

注意:这个目录结构是根据原始文件 lvgl 的src目录结构添加的(以下是原始目录结构)
stm32 lvgl,stm32,单片机,嵌入式硬件
3、目录结构内添加文件:

把每个文件里面的 .c 文件添加到对应的 文件目录即可(这里是把 原始文件没目录添加到 kail 目录) .h 文件暂时不用管

4、头文件包含
找到下面的头文件目录添加即可:
stm32 lvgl,stm32,单片机,嵌入式硬件

五、修改文件内容

1、修改开启头文件的内容,以下是要修改的文件名:

//GUI下的lvgl目录内
lvgl.h
lv_conf.h
//接口文件 porting 内
lv_port_disp_template.h
lv_port_disp_template.c
lv_port_indev_template.h
lv_port_indev_template.c

把上面文件里的 if 置 1,开启上下文,实例如下:

#if 1 /*Set it to "1" to enable content*/

2、修改 基本定时器文件 btim.c 文件(修改前如果文件没有在kail目录就需要先把文件添加到kail目录的BSP目录)
1)导入头文件

#include "../../lvgl.h"
2)修改回调函数 
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == BTIM_TIMX_INT)
    {
    	//这里是给 lvgl 提供一个时基
        lv_tick_inc(1);
    }
}

3、修改接口文件以适配开发板 lcd
(1)修改 lv_port_disp_template.c 文件
1. 导入头文件
2. 修改显示屏的大小(根据自己的来)(一般 3.5 的为 320*240 )
3. 配置初始化函数 disp_init(void)
4. 配置刷新函数 void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
5. 配置宽高自动获取(防止 lcd 那边修改了横竖屏,这边没修过)
6. 注释掉多余的 缓存区 创建(这里使用的是 文件提供的方法1)
下面是配置的代码(需要自己去找到每一部分代码位置来修改):

//1、导入头文件
#include "../../lvgl.h"
#include "./BSP/LCD/lcd.h"
//2. 修改显示屏的大小
#ifndef MY_DISP_HOR_RES
    #warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen width, default value 320 is used for now.
    #define MY_DISP_HOR_RES    320
#endif

#ifndef MY_DISP_VER_RES
    #warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen height, default value 240 is used for now.
    #define MY_DISP_VER_RES    240
#endif
//3. 配置初始化函数 disp_init(void)
static void disp_init(void)
{
    /*You code here*/
    lcd_init();
    lcd_display_dir(1);
}
//4. 配置刷新函数
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
    if(disp_flush_enabled) {
        /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/

        lcd_color_fill(area->x1,area->y1,area->x2,area->y2,(uint16_t*)color_p);
    }

    /*IMPORTANT!!!
     *Inform the graphics library that you are ready with the flushing*/
    lv_disp_flush_ready(disp_drv);
}
// 5. 配置宽高自动获取
	disp_drv.hor_res = lcddev.width;
    disp_drv.ver_res = lcddev.height;
// 6. 注释掉多余的 缓存区 创建(这里使用的是 文件提供的方法1)
// 找到下面两行注释代码 对注释下的代码进行注释
// /* Example for 2) */
/* Example for 3) also set disp_drv.full_refresh = 1 below*/

以上是对LCD输出进行的配置!
(2)修改 lv_port_indev_template.c 文件
1. 导入头文件
2. 删除多余的文件(这里只是用到了 touch 触摸屏的文件,其他的可以进行删除)
3. 初始化 触摸屏
4. 修改 触摸屏 按下时调用的函数: touchpad_is_pressed
5. 修改获取坐标函数:touchpad_get_xy

// 1. 导入头文件
#include "../../lvgl.h"
#include "./BSP/TOUCH/touch.h"
// 2. 删除多余的文件
//这个需要自己自行删除,他自己有注释,看注释部分,不是touch的就可以删除
// 3. 初始化 触摸屏
static void touchpad_init(void)
{
    /*Your code comes here*/
    tp_dev.init();
}
// 4. 修改 触摸屏 按下时调用的函数
static bool touchpad_is_pressed(void)
{
    /*Your code comes here*/
    tp_dev.scan(0);
    if(tp_dev.sta & TP_PRES_DOWN){
        return true;
    }
    return false;
}
// 5. 修改获取坐标函数
static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
{
    /*Your code comes here*/

    (*x) = tp_dev.x[0];
    (*y) = tp_dev.y[0];
}

4、修改 main 文件
(1)导入头文件

#include "./BSP/TOUCH/touch.h"
#include "./BSP/TIMER/btim.h"
#include "../../lvgl.h"
#include "lv_port_indev_template.h"
#include "lv_port_disp_template.h"

(2)配置运行文件

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    delay_init(72);                     /* 延时初始化 */
    usart_init(115200);                 /* 串口初始化为115200 */

    btim_timx_int_init(10-1,7200-1); /* 根据自己的开发板 MCU 定义定时器周期为 1ms */
    lv_init(); /* lvgl 系统初始化 */
    lv_port_disp_init(); /* lvgl 显示接口初始化,放在 lv_init()的后面 */
    lv_port_indev_init(); /* lvgl 输入接口初始化,放在 lv_init()的后面 */

    lv_obj_t *label = lv_label_create(lv_scr_act());
    lv_obj_set_style_text_color(label, lv_palette_main(LV_PALETTE_RED),
    LV_STATE_DEFAULT);
    lv_obj_set_style_bg_color(lv_scr_act(),lv_palette_main(LV_PALETTE_BLUE),
    LV_STATE_DEFAULT);
    lv_obj_set_style_text_font(label,&lv_font_montserrat_14, LV_STATE_DEFAULT);
    lv_label_set_text(label,"Hello Alientek!!!");
	
	while(1){
        HAL_Delay(5);
        lv_timer_handler(); /* LVGL 管理函数相当于 RTOS 触发任务调度函数 */
	}
    
}

自此,整个LVGL移植就完成了!

六、大体步骤梳理

  1. 进行文件目录移植
  2. 在kail里面创建目录导入文件以及导入头文件
  3. 配置定时器,给lvgl提供时基
  4. 配置LCD,给lvgl接口做准备
  5. 裁剪lvgl屏幕接口文件,配置 lvgl 与 lcd 的接口对接
  6. 裁剪vgl触摸屏接口文件,配置 lvgl 与 触摸屏 的接口对接
  7. 初始化配置文件(定时器、lvgl 和 接口配置文件 )
  8. 使用 lvgl 调度 lv_timer_handler();
  9. 可以开心的使用库来做屏幕控件了

七、问题记录

(1) lvgl 使用时要把 c99给勾选上(否则编译会有一群错误)
stm32 lvgl,stm32,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-809166.html

到了这里,关于stm32 移植 LVGL 基础工程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • LVGL触摸移植——stm32野火F103

    LVGL触摸移植——stm32野火F103

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

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

    STM32移植LVGL+旋转编码器接口对接

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

    2024年02月10日
    浏览(6)
  • 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 修改输入设备驱动接口  五:下载验证  六:工

    2024年02月03日
    浏览(4)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植过程成功

    【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日
    浏览(32)
  • STM32 RGB屏幕驱动+LVGL移植 从底层到应用小项目

    STM32 RGB屏幕驱动+LVGL移植 从底层到应用小项目

    项目使用正点原子STM32F767阿波罗开发板+IPS TFT-LCD屏幕(非正点原子屏幕)进行开发,应用层移植轻量级GUI库LVGL实现列表按键点击,切换,显示当前内部工作电压功能。重点在于对于RGB屏幕驱动普适性的学习和LVGL开发的理解。希望我实习期间的项目学习过程能对大家有所帮助

    2024年02月15日
    浏览(5)
  • 【STM32 LVGL基础教程】初识LVGL

    【STM32 LVGL基础教程】初识LVGL

    嵌入式系统中的图形用户界面(GUI)已经成为现代设备不可或缺的一部分。STM32系列微控制器广泛用于各种嵌入式应用中,而LittlevGL(LVGL)是一个强大的开源库,用于在STM32上创建出色的GUI。本文将深入探讨LVGL的基础知识,带您了解这个引人注目的库。 LVGL,全称为Littlev Gr

    2024年02月04日
    浏览(12)
  • stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    声明: 本文主要参考 stm32移植lvgl_NULL_1969的博客-CSDN博客_lvgl stm32 及 STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件 ,底层驱动主要采用正点原子触摸屏实验和定时器实验 1.1 主要硬件接口 1.1.1 触摸屏 主要需要触摸屏来实现屏幕的显示及触摸。 触摸屏需要底层的接

    2024年01月16日
    浏览(8)
  • GUI——LVGL移植+STM32f407zgt6(正点原子最小系统板+GUI Guider

    GUI——LVGL移植+STM32f407zgt6(正点原子最小系统板+GUI Guider

    首先是GUI Guider的介绍 GUI Guider是NXP公司开发的一个图形化软件,对于初学GUI或者写ui界面的小白们非常合适,也非常方便,现在就示例写一个demo  首先是初始化界面,在相应的位置填写相关信息(文件名,是否使用模板,以及数据位,最重要的 是大小),这个显示的大小要和

    2023年04月24日
    浏览(11)
  • 移植LVGL到单片机的一个demo简单介绍

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

    背景 : 本文使用的是主控IC为stm32f103zet6, 显示IC为ST7735s,它是128*160的像素,色深为RGB565颜色。 官方虽然说LVGL移植平台只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。但我移植到stm32f103c8t6,不管怎么修改配置,一直显示内存不够。 LVGL 可以驱动单色OLED、TFT 显示器、监视

    2024年01月17日
    浏览(9)
  • ESP32 移植 LVGL UI 库

    ESP32 移植 LVGL UI 库

    硬件:ESP32 LCD : ST7796  3.5寸 480*320 屏  电容触摸 IC: GT911 IDE: Visual Studio Code with Platoform IO extension LVGL 版本:3.0 移植前已经使用 eSPI 驱动起了 ST7796 屏,别且实现了触摸驱动。 下载 LVGL 代码 下载 LVGL 文件,放置到 工程的 .lib 库中:   编辑配置文件 把 LVGL 源文件根目录下的 

    2024年02月07日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包