基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)
本篇文章移植思路适用于所有嵌入式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(无操作系统版)的更多相关文章
- STM32F4 HAL库中是如何实现UART IO配置的?
1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...
- 新建基于STM32F103ZET6的工程-HAL库版本
1.STM32F103ZET6简介 STM32F103ZET6的FLASH容量为512K,64K的SRAM.按照STM32芯片的容量产品划分,STM32F103ZET6属于大容量的芯片. 2.下载HA ...
- 基于react hooks,zarm组件库配置开发h5表单页面
最近使用React Hooks结合zarm组件库,基于js对象配置方式开发了大量的h5表单页面.大家都知道h5表单功能无非就是表单数据的收集,验证,提交,回显编辑,通常排列方式也是自上向下一行一列的方 ...
- 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)
说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...
- STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)
STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...
- STM32F072从零配置工程-基于HAL库的串口UART中断配置
先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...
- HAL库|神器cubemx的正确打开方式
前言 工欲善其事,必先利其器.HAL库的开发不一定必须使用cubemx,但是使用了cubemx,你绝对不会后悔.基于一些小伙伴对cubemx的使用还有一些疑问,本次小飞哥从新建工程到生成工程,编写应用 ...
- HAL库与Cubemx系列|Systick-系统滴答定时器详解
Systick是什么? 关于Systick,在Context-M3权威指南中如此描述: SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号: 15).在以前,大多操作系统需要一 ...
- 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章
从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章 如何使用本书 1.1 本书的参考资料 本书参考资料为:<STM32 ...
- stm32F4中断分析-HAL库
详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...
随机推荐
- bean的作用域和@scope注解
bean的作用域由@scope注解来修改,该注解有五个不同的取值,分别是:singleton.prototype.request.session.global-session. singleton,在 ...
- 2020-12-01:java中,什么是安全点和安全区域?
福哥答案2020-12-04: 安全点用户线程暂停,GC 线程要开始工作,但是要确保用户线程暂停的这行字节码指令是不会导致引用关系的变化.所以 JVM 会在字节码指令中,选一些指令,作为"安 ...
- Golang指针隐式间接引用
1.Golang指针 在介绍Golang指针隐式间接引用前,先简单说下Go 语言的指针 (Pointer),一个指针可以指向任何一个值的内存地址 它指向那个值的内存地址,在 32 位机器上占用 4 个 ...
- 批处理bat and 汇编小技巧
来自远古时期的汇编软件MASM是没有像现在一样的exe程序的(汇编萌新的认知),所以为了快捷,写一些bat来方便操作.([表情包]奇怪的知识增加了)哈哈哈 我现在是MASM的路径是D:\Masm64\ ...
- 一次查找分子级Bug的经历,过程太酸爽了
"Debugging is like trying to find a needle in a haystack, except the needle is also made of hay ...
- < Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类
欢迎来到我们的系列博客<Python全景系列>第九篇!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法.无论你是编程新手,还 ...
- 1.ruoyi-ui部署
1.ruoyi-ui 部署 A.用 idea 打开 ruoyi-ui 项目后,点击左下角的这个按钮 B.运行 build:prod 后,会在项目文件夹下生成dist文件夹(里面大概有这些文件) C.将 ...
- 解码器 | 基于 Transformers 的编码器-解码器模型
基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶.本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion ...
- CF1817E Half-sum
题意 有一个大小为 \(N\) 的非负整数集合 \(A\),每次你可以从集合中取任意两个数,并将它们的平均数放回序列.不停操作,知道集合最后剩下两个数.请求出这两个数的差的绝对值的最大值对 \(10^ ...
- 前端Vue加载中页面动画弹跳动画loading
前端Vue加载中页面动画弹跳动画loading, 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13091 效果图如下: 使用方法 ...