LVGL移植(STM32)

源码裁剪

源码所需要的内容如下:

  • 【文件夹】demos、examples(里面只保留porting)、src
  • 【.h文件】lv_conf_template.h、lvgl.h
    其中,以下文件需要进行改名:
  • lv_conf_template.h -> lv_conf.h
  • lv_port_disp_template -> lv_port_disp(位于example->porting)
  • lv_port_indev_template -> lv_port_indev(位于example->porting)

插入代码

在STM32工程文件夹中,在"Middlewares"下新建"LVGL"文件夹存放LVGL代码。"LVGL"下面再新建两个文件夹:

  • LVGL_SRC:再新建"lvgl"文件夹,用于存放lvgl裁剪后的代码,原因是源码中的头文件引用表述
  • APPs:用于存放官方demos或自己已写的app

在MDK工程配置中,Group配置如下:(其中的 "所有.c文件" 包含其子目录)

添加头文件路径:

此外,魔术棒中Target->ARM Compiler要选择v5,并在C/C++中勾选C99

修改堆栈

CubeMX默认生成的堆栈不够,直接执行会卡死在HardFault_Handler,要修改堆栈大小(上次移植修改为:stack:0x1000,heap:0x4000)。具体修改方式如下:

配置显示

主要是lv_port_disp的内容,先把一些#if 0改为#if 1,然后配置以下内容:

  1. 配置图像数据缓冲模式,有三种模式,保留一种,注释掉不用的两种模式的代码(这一板块在lv_port_disp_init内)
  2. disp_init函数,配置屏幕初始化 和设置横向显示
  3. 配置屏幕尺寸:MY_DISP_HOR_RESMY_DISP_VER_RES
  4. disp_flush函数,配置区域描点操作,注释掉官方if(disp_flush_enabled)内的,用自己的代码

配置输入

主要是lv_port_indev的内容,先把一些#if 0改为#if 1,然后配置以下内容:

  1. 注释掉lv_port_indev_init中无用设备初始化代码;
  2. touchpad_init函数,初始化触屏;
  3. 配置触摸检测touchpad_is_pressed
  4. 配置读取坐标函数touchpad_get_xy

配置时基

创建一个1ms的时基单元,每1ms执行lv_tick_inc(1)

测试

参考链接 :
[2-01]LVGL移植前的准备工作_哔哩哔哩_bilibili
STM32堆栈的大小及内存四 日(五)区的分析

相关推荐
2601_9491465315 分钟前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
知南x2 小时前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
代码游侠3 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
2的n次方_4 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
凡人叶枫5 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
xuxg20055 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
凡人叶枫7 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CODECOLLECT7 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen7 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
傻乐u兔7 小时前
C语言进阶————指针3
c语言·开发语言