jjzjj

LVGL移植stm8.3超详细【stm32移植lvgl】

林叔叔336 2024-02-13 原文

LVGL8.3移植stm超详细【stm32移植lvgl8.3】

序言

CSDN中很多移植lvgl的,跟着他们的最后很多都是花屏。
“大抵是写的太过糊弄,碰壁的鼻是平了,所以不敢有所期待”。
在移植lvgl之前你必须有能够正常显示的屏幕。下面我们加入正题。

1、lvgl简介

lvgl是一款全部用c语言实现的ui图形库,对硬件的要求比较低,可以较为流畅的运行在单片机上。并且完全开源,对按钮,触摸,编码器旋钮等支持的非常到位。
目前最新的是8.3版本可以在github中下载到:
官方github
在网盘中也可以下载到:
链接:百度网盘地址
提取码:qeb6

2、lvgl码源

下载以后打开文件可以看见下面四个文件

第一步

在stm32工程下面创建一个文件夹,名称为lvgl
将上图中的四个文件加入到lvgl文件夹中。
把v_conf_template.h文件重命名为lv_conf.h

第二步

在lvgl/examples/porting文件夹中把三个.h文件开头的#if 0改为#if 1;
打开你原本的stm32工程(就是那个正常驱动屏幕的工程),使能c99

第三步

在左侧栏中添加两个文件夹

添加两个port文件
位于lvgl/examples/porting,因为没有用到文件系统,故没有添加fs

添加lvgl源文件
将lvgl/src目录下的core draw font hal misc widgets文件夹下的所有文件全部添加进lvgl组

注:文件夹中还有子文件夹要一层一层打开并加入。


将lvgl/src/extra/目录下的文件添加进lvgl组。具体为:
layouts目录下所有子目录文件
themes目录下所有子目录文件
widgets目录下所有子目录文件
lv_extra.c


加入路径
将lvgl ,src,porting文件夹添加到源路径下。

3、修改配置文件

修改lv_port_disp_template.h

如图

修改lv_port_disp_template.c

将开头的#if 0改成#if 1

修改lv_conf.h


这两句是修改你屏幕大小的,直接粘贴在那里就可以了。

#define MY_DISP_HOR_RES 160
#define MY_DISP_VER_RES  128

4、修改显示的必要文件

在lv_port_disp_template.c中包含着显示的重要文件,这里我们只需要修改两处:

第一处

把框选的地方注释掉,

去除warning

此时编译应该没有error,但是有warning这个warning无伤大雅可以直接屏蔽

--diag_suppress=188,546,68,111
当完成这一步的时候就已经说明你已经把显示的移植了99%了,如若到这一步的时候会有很多的error那就不能继续下一步,需要排除一下问题在哪,可在评论区询问,我看到会给你回复。

第二处

这是刷新函数,用于图形填充的,这里介绍两种方法,第一种是不断画点,只需要把红色部分写成你原来工程中的画点的函数就可以了,如果你的画点函数传入的形参中颜色的定义并不是指针的方式的话,一定要写成图中color_p->full的形式,不然会报错的。

不要把#include“lcd.h”遗忘


第二种方法是通过区域填充来实现的如果你是使用中景园的代码,你直接调用他的区域填充函数基本上会花屏,所以需要对他的函数进行一下改良。
可在你本来工程下面的lcd.c中添加一段代码:

void lvgl_LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, lv_color_t *color)
{

	uint32_t y=0; 
	u16 height, width;
	width = ex - sx + 1;            //得到填充的宽度
  height = ey - sy + 1;           //高度
	
	LCD_SetWindows(sx,sy,ex,ey);
	
	for(y = 0; y <width*height; y++) 
	{
		Lcd_WriteData_16Bit(color->full);
		color++;
  }
}

也许他会报错说找不到lv_color_t 这是以为我们没有在文件开头添加#include "lvgl.h" 添加以后还需要在lcd.h文件中进行声明,不出意外还会报错,需要你在文件开头加入#include "lvgl.h" ,我们就可以把第一种的描点换成画图,

5、显示测试

在main.c中#include "lvgl.h" #include "lv_port_disp_template.h" 随后在屏幕初始化后面加上代码:

	lv_init();
	lv_port_disp_init();

还需要一个在嘀嗒定时器里加一个跳动的“心脏”进行刷新

lv_tick_inc(1);//在中断里面进行刷新
如果这个对你而言比较难实现你也可以把这个放到主函数的循环里面。

并在主函数中创建一个测试函数

void lv_ex_label(void)
{
		char* github_addr = "https://gitee.com/W23";
		lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_recolor(label, true);
    lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/
    lv_obj_set_width(label, 120);
    lv_label_set_text_fmt(label, "#ff0000 Gitee: %s#", github_addr);
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 10);
	
    lv_obj_t * label2 = lv_label_create(lv_scr_act());
    lv_label_set_recolor(label2, true);
    lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/
    lv_obj_set_width(label2, 120);
    lv_label_set_text_fmt(label2, "#ff0000 Hello# #0000ff world !123456789#");
    lv_obj_align(label2, LV_ALIGN_CENTER, 0, -10);
}

将测试函数写在lv_port_disp_init();的后面

	LCD_Init();
	lv_init();
	lv_port_disp_init();
	lv_ex_label();

在主函数中写:

		lv_task_handler();
		HAL_Delay(10);

6、总结

第一次在csdn上发文章,我也遇到各种坑,移植完显示之后屏幕一片漆黑已经习以为常,移植完触控没反应,这些小坑我就先踩为敬。

今天就只写到了这里后面还会更新触摸和按键。
相逢何必曾相识,江湖再见!!

有关LVGL移植stm8.3超详细【stm32移植lvgl】的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  3. ruby-on-rails - 可移植 Ruby on Rails 环境 - 2

    我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

  4. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  5. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  6. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  7. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  8. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

  9. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

  10. Linux操作系统CentOS7安装Nginx[详细版] - 2

    Nginx安装1.官网下载Nginx2.使用XShell和Xftp将压缩包上传到Linux虚拟机中3.解压文件nginx-1.20.2.tar.gz4.配置nginx5.启动nginx6.拓展(修改端口和常用命令)(一)修改nginx端口(二)常用命令1.官网下载Nginxhttp://nginx.org/en/download.html这里我下载的是1.20.2版本,大家按需下载对应稳定版即可2.使用XShell和Xftp将压缩包上传到Linux虚拟机中没有XShell可以参考《Linux操作系统CentOS7连接XShell》3.解压文件nginx-1.20.2.tar.gz1)检查是否存

随机推荐