根据MM32F5260的LVGL运用教程
MM32。F5260 简介。
MM32F5260 是一款搭载了根据。 Arm。v8-M 架构 32 位 Star-MC1 内核(兼容 Cortex-M33)的。 MCU。产品。,其作业频率可达 120MHz,装备浮点运算单元(Floating Point Unit, FPU)、。数字信号。处理单元(Digital Signal Processing,DSP。)、。信号。间互联矩阵 MindSwitch、可装备逻辑单元 CLU、三角函数加快单元 CORDIC 等。算法。加快单元,并集成了丰厚的外设模块和足够的 I/O。 端口。。
图1 MM32F5260示意图。
LVGL。介绍。
LVGL(Light and Versatile Graphics Library)是一个专为。嵌入式体系。规划的开源图形用户界面(GUI)库。它运用。C言语。编写,具有轻量级、可移植、灵敏和易于运用的特色。LVGL供给了丰厚的图形界面元素和灵敏的布局方法,使。开发者。能够轻松为。嵌入式。设备创立交互式用户界面。
LVGL软。硬件。需求。
根本上,每个能够驱动显现器的现代。操控器。都合适运转LVGL。最低要求是:
16, 32。 or。64 bit。 微操控器。或。处理器。
引荐。16 MHz。 时钟。速度。
Flash/。ROM。: >根本要求:64 kB (>引荐:180 kB )。
RAM。:。
静态RAM运用率:~2 kB,详细取决于运用的功用和目标类型。
St。ac。k: >2kB (>8 kB is。 recom。mended)。
Dynamic data (heap): >4 KB (>32 kB is recommended if using several objects)。
C99 或更新的编译器。
源码获取。
获取MM32的LibSamples和LVGL的源代码:
从灵动官网获取LibSamples_MM32F5260样例工程, https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_pe。rf。ormance/mm32f5260/挑选翻开页面中的东西和软件。标签。栏,点击。下载。MM32F5260 库函数与例程。
图2 LVGL协议栈源码。
获取LVGL源代码,这儿咱们运用到的是v8.1.0版别的协议栈:
https://github.com/lvgl/lvgl/archive/refs/tags/v8.1.0.zip。
lvgl-v8.1.0 协议栈如下图2所示:
图3 LVGL协议栈源码。
移植简介。
复制 LVGL 源码到工程目录。
根据LibSamples_MM32F5260样例工程,在其根目录文件夹下创立~3rdPartySoftwarePor。ti。ngLVGL 途径及文件夹,将 lvgl-v8.1.0 软件包解压后直接复制到该途径下,并在该途径下创立 Demos文件夹。接下来,咱们将在 Demos 文件夹下创立示例工程。
在 Demos 文件夹下中新建LVGL_B。asic。样例工程目录。将 lv_conf_。te。mplate.h 复制到 LVGL_Basic 工程目录下,并将其重命名为 lv_conf.h。
将软件包中 examples/porting 下的 lv_port_disp_template.c&.h 文件,复制到 LVGL_Basic 工程目录下,并进行重命名去掉 __template。
FSMC 及LCD初始化装备。
在 platform.c &.h 文件中进行进行FSMC相关初始化装备,包含时钟、引脚、初始化。
新建 lcd.c/.h 文件,完成 LCD 驱动初始化和根本的运转。参数。序列装备以及根本的的绘图操作,如铲除窗口操作、填充窗口操作和画像素点操作函数。
新建 lcd_port.c 文件,完成根据 FSMC 的 LCD 驱动装备。接口。,并完成对 LCD 的写指令和写数据的操作接口。
LVGL_Basic样例工程完好目录如下图4所示:
图4 LVGL_Basic样例工程。
增加到。 Keil。工程中。
增加lvgl到工程的文件。索引。途径中,如下图5所示:
图5 装备lvgl索引途径。
如图6所示,将 lvgl_v8 文件夹下的 src 目录下的一切 .c 格式文件增加到工程中。
图6 增加lvgl源文件。
代码适配。
增加移植接口相关文件到工程中:
修正 lv_conf.h 文件,使能装备文件内容,敞开帧率显现和内存占用状况显现。
修正 lv_port_disp.c 文件,使能LVGL装备。
修正 lv_port_disp_init() 函数,挑选界说图画缓存的方法,并设置屏幕像素尺度。
修正 disp_init() 函数,适配屏幕初始化,调用屏幕初始化函数。
修正 disp_flush() 函数,适配屏幕填充函数接口。
编写 lvgl_bas。ic。.c 文件,包含头文件,调用 lvgl 初始化函数,完成Systick中止服务函数为lvgl供给时刻基准,并在 main.c 文件中调用 LVGL_Basic_Sample() 函数。
#include "platform.h"#include "main.h"#include "lvgl.h"#include "lv_port_disp.h"static const char * btnm_map[] = {"0", "1", "2", "3", "4", "","5", "6", "7", "8", "9", "","Action1", "Action2",""};void lv_example(void);void LVGL_Basic_Sample(void){ lv_init(); lv_port_disp_init(); lv_example(); while (1) { lv_task_handler(); }}void lv_example(void){ /* create a label. */ lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_obj_set_width(label, 150); lv_obj_set_pos(label, 10, 10); lv_label_set_text(label, "MindMotion MindMotion"); /* create a btn matrix. */ lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); lv_btnmatrix_set_map(btnm1, btnm_map); lv_btnmatrix_set_btn_width(btnm1, 10, 2); /*Make "Action1" twice as wide as "Action2"*/ lv_obj_align(btnm1, LV_ALIGN_CENTER, 0, 0);}。
LVGL_Basic 样例展现。
这个样例展现了最根本的GUI元素,如按钮、标签和文本框。它演示了如安在屏幕上创立和操作这些根本元素。
图7 LVGL_Basic示意图。
参阅样例展现。
LVGL_Benchmark。
这个样例用于测验和评价MM32F5260的功能。它经过快速创立和删去很多的目标来展现开发板的烘托才能。
图8 LVGL_Benchmark示意图。
LVGL_Stress。
这个样例经过一起运用多种不同的GUI元素和杂乱的布局来对体系进行压力测验,保证在高负载状况下体系的稳定性。
图9 LVGL_Stress 示意图。
LVGL_Widgets。
这个样例展现了LVGL支撑的一切小部件(Widgets),包含但不限于图表、滑块、复选框和下拉列表。它协助开发者了解怎么运用这些小部件来构建杂乱的用户界面。
总结。
本文简略介绍了MM32F5260及LVGL的运用,开发者能够经过运用LibSamples在MM32F5260上快速开端LVGL的学习和开发作业。
关于灵动。
上海。灵动微电子。股份有限。公司。成立于 2011 年,是我国本乡抢先的通用 32 位 MCU 产品及解决计划供货商。灵动微电子的 MCU 产品以 MM32 为标识,根据 Arm Cortex-M 系列内核,自主研制软硬件和生态体系。现在已量产近 300 款类型,在本乡通用 32 位 MCU 公司中位居前列。
客户包括。消费电子。、。电机。与。电源。、家电、轿车、计算机与。通讯。、。工业操控。等应用领域。灵动是我国为数不多的且一起获得了 Arm-KEIL、IAR、SEGGER 官方支撑的本乡 MCU 公司,并建立了独立、完好的通用 MCU 生态体系。灵动一直秉承着“诚信、许诺、立异、协作”的精力,为客户供给从硬件。芯片。到软件算法、从参阅计划到体系规划的全方位支撑。