本篇文章移植思路适用于所有嵌入式MCU,包括Arm,STM32,NXP,乐鑫,Nuvoton,Arduino,RT-Thread,Zephyr,NuttX,Adafruit等等。

为什么要写这一篇移植教程?

也许你会说各种开源论坛上面上,已经有很多移植教程了,为什么还要再重新写一篇?

因为很简单我按照前辈们的思路和移植步骤,到最后没有一个成功的,这就不得不得需要再重新研究下官网的移植教程了> https://docs.lvgl.io/master/porting/project.html

按照官网的移植教程,我顺利的将最新版的LVGL移植到STM32F4主控板上并且点亮显示屏

后面会不会更新?

由于项目的需要,后续会慢慢的加入操作系统(FreeRTOS),SD卡读取,内存管理,实体键盘等外设或功能。

现在开始移植吧!(LVGL——Vser 8.3)

Step.1LVGL官网下载

1.下载路径①

https://github.com/lvgl/lvgl

通过git clone或者直接下载都行

下载完文件内容是这样的



Tips:文件里面的内容在这一篇文章,不作分析,本篇文章只对移植是否成功进行探究。

Step.2LVGL文件裁剪

需要裁剪的有4个文件,分别是2个文件夹和2个单独文件,如下图所示

Step.3LVGL文件复制

将裁剪出来的文件,复制并且粘贴到自己的工程目录下,至于你想粘贴到哪里随你的便,我不关心,只需要在往MDK中添加时,能够找到相应的路径就行。

Step.4MDK文件分组与.c添加

1.1 创建的分组应该为这样



里面的conf.h文件是我自己方便配置的时候找到文件,故意添加到分组里面的,我的意思:你可以不添加,随你的便。

1.2 往分组里面添加.c文件

再添加前需要将这个文件重新命名下:(就是将名称里template删除)

将..\lvgl\src文件夹下面的所有.c文件添加LVGL_Core分组里面

特别注意是:所有!!!

将..\lvgl\examples\porting文件夹的文件按需添加到LVGL_Port里面

各接口代码含义:

lv_port_disp_template -------显示屏接口代码

lv_port_fs_template --------文件管理接口代码

lv_port_indev_template-------输入接口代码

Step.5MDK头文件添加

添加后,如下图所示

Step.6MDK中修改已经移植好的LVGL文件

1修改lv_port_disp_template.h文件



第7行改为#if 0 改为#if 1

第22行改为#include "lvgl.h"

2修改lv_port_disp_template.c文件



第7行改为#if 0 改为#if 1

第13行改为添加LCD显示屏驱动文件

屏蔽下图部分

disp_flush修改画点函数



将disp_flush函数中,源代码屏蔽或者删除掉,添加自己的显示屏填充函数。

Step.7MDK移植LVGL可能出现的问题

1.空间不够

解决方法将lvgl_conf.h文件中 #define LV_MEM_SIZE (32 * 1024U) /*[bytes]*/ 数值适当缩小,官方默认是512*1024U也就是512k,数值太大你的小小单片机肯定空间不够!

/*************************************************************************************************************************/

至此移植工作已经全部结束,编译,如果再有问题,必须解决后才能往下操作!

Step.8让LVGL跑起来吧!

点击查看代码
void lv_ex_label(void)
{
char* github_addr = "lvgl_test";
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, "test", 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, "123");
lv_obj_align(label2, LV_ALIGN_CENTER, 0, -10);
} /* USER CODE END 0 */ /**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
lv_init();
lv_port_disp_init(); system_init();
lv_ex_label();
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
// LCD_Fill(0,0,480,320,RED);
lv_task_handler();
HAL_Delay(10); /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
目前就写到这里吧,后面再遇到什么问题再补充。

基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)的更多相关文章

  1. STM32F4 HAL库中是如何实现UART IO配置的?

    1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...

  2. 新建基于STM32F103ZET6的工程-HAL库版本

    1.STM32F103ZET6简介 STM32F103ZET6的FLASH容量为512K,64K的SRAM.按照STM32芯片的容量产品划分,STM32F103ZET6属于大容量的芯片. 2.下载HA ...

  3. 基于react hooks,zarm组件库配置开发h5表单页面

    最近使用React Hooks结合zarm组件库,基于js对象配置方式开发了大量的h5表单页面.大家都知道h5表单功能无非就是表单数据的收集,验证,提交,回显编辑,通常排列方式也是自上向下一行一列的方 ...

  4. 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)

    说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...

  5. STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)

    STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...

  6. STM32F072从零配置工程-基于HAL库的串口UART中断配置

    先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...

  7. HAL库|神器cubemx的正确打开方式

    前言 工欲善其事,必先利其器.HAL库的开发不一定必须使用cubemx,但是使用了cubemx,你绝对不会后悔.基于一些小伙伴对cubemx的使用还有一些疑问,本次小飞哥从新建工程到生成工程,编写应用 ...

  8. HAL库与Cubemx系列|Systick-系统滴答定时器详解

    Systick是什么? 关于Systick,在Context-M3权威指南中如此描述: SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号: 15).在以前,大多操作系统需要一 ...

  9. 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章

    从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32 ...

  10. stm32F4中断分析-HAL库

    详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...

随机推荐

  1. CTFShow 反序列化 Web 255-266

    CTFShow 反序列化 255-266 漏洞原理 未队用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等后果. 触发条件 unserialize ...

  2. defer有什么用呢

    1. 简介 本文将从一个资源回收问题引入,引出defer关键字,并对其进行基本介绍.接着,将详细介绍在资源回收.拦截和处理panic等相关场景下defer的使用. 进一步,介绍defer的执行顺序,以 ...

  3. Djnago常用命令

    pip: bundle,创建包含多个包的pybundles:freeze,显示所有已安装的包:help,显示可用命令:install,安装包:search,搜索PyPi:uninstall,卸载包:u ...

  4. 简单记录一下从网上找到的python的渗透方面的第三方库

    python的hacker三方库 Scapy, Scapy3k:发送,嗅探和剖析并伪造网络数据包,可以做交互式应用或单纯的作为库来使用 pypcap, Pcapy and pylibpcap:几个不同 ...

  5. 微软New Bing Chat AI聊天免费体验(需要魔法~)

    必应聊天是什么? Bing Chat是一个AI 聊天机器人,它可以理解您问题的上下文并以人性化的方式回复.Microsoft 已将此功能直接集成到Bing 搜索中,使 Bing 成为搜索结果和AI 支 ...

  6. html+css实现二级导航栏效果,简单易看懂噢!

    这应该是这几天以来看到的最简单易懂的有二级菜单栏的导航栏效果实现了 使用html+css实现,看了好几天导航栏的实现方式,要么是太复杂的需要JS或者框架的,要么是太简单仅仅使用div和超链接的, 再要 ...

  7. Basic Pentesting

    来自tryhackme的 Basic Pentesting 开靶场IP:10.10.227.255 # nmap 端口扫描 PORT STATE SERVICE VERSION 22/tcp open ...

  8. 【Python入门教程】获取图片可视化精准定位(逆地理编码)

    ​ 使用exifread库读取图片的经纬度信息(WGS84坐标) 使用高德开放API将经纬度转为高德底图经纬度,并输出具体位置 使用folium库,以高德底图为基准,在网页上可视化显示地图和兴趣点 一 ...

  9. Delegation Pattern 委托模式

    原文:https://zh.wikipedia.org/wiki/%E5%A7%94%E6%89%98%E6%A8%A1%E5%BC%8F 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个 ...

  10. @Target元注解的使用

    @Target注解标记另外的注解用于限制此注解可以应用哪种Java元素类型.先看Java SE 8中@Target是如何声明的: package java.lang.annotation; publi ...