STM32与Proteus仿真实现LVGL图形界面的方法与资料指南
2025-09-19 来源:cnblogs
一:LVGL简介
LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面(GUI)库,专为嵌入式系统设计。它提供了一套丰富的图形组件和功能,适用于各种显示设备,如小型屏幕、触摸屏和大型显示器。LVGL的主要特点包括:
轻量级:LVGL的设计目标是占用较少的内存和处理器资源,适合资源有限的嵌入式设备。
高性能:LVGL经过优化,能够在低功耗的微控制器上流畅运行,提供良好的用户体验。
丰富的组件:LVGL提供了多种预定义的UI组件,如按钮、滑块、列表、图表等,方便开发者快速构建应用界面。
灵活的主题支持:LVGL支持主题和样式,可以自定义组件的外观,以适应不同的应用需求。
二:LVGL移植
将LVGL移植到STM32微控制器上是一个相对常见的任务,许多开发者利用STM32的强大性能和LVGL的图形能力来创建丰富的用户界面。以下是移植LVGL到STM32的一般步骤:
准备开发环境
硬件:直接使用proteus里面提供的元件模型STF32F401VE,绘制电路图,模拟实物硬件开发板。
软件:安装STM32CubeIDE或其他支持STM32的IDE(如Keil、IAR等)。
下载LVGL
Github仓库:https://github.com/lvgl/lvgl
国内码云仓库:https://gitee.com/mirrors/lvgl
选择想移植的版本,本文选择下载LVGL8.1.
创建STM32项目
使用STM32Cube创建一个新的STM32项目,选择STM32F401VET6,配置所需的外设,例如GPIO、SPI、定时器,并生成Keil工程。
添加LVGL到项目中
新建一个GUI目录,在该目录下建两个文件夹
lvgl、lvgl_port,拷贝下面选中的文件夹和文件到GUI/lvgl文件夹里。
拷贝下载的源代码文件夹examples/porting下所有文件到GUIlvgl_port目录下。并将他们改名 去掉template
复制LVGL库根目录下的'lv_conf_template.h'文件到工程文件夹“GUI”下,并将'lv_conf_template.h'重命名为'lv_conf.h'。
在GUI/lvgl组中添加以下文件夹中所有的.c文件:
在GUI/lvgl_port组中添加以下.c文件
GUI/lvgl_port/lv_port_disp.c
GUI/lvgl_port/lv_port_indev.c
在STM32CubeMX生成的工程文件中的Core/Src文件夹中,添加lvgl_conf.h配置文件
添加完LVGL的源码后,在Keil里面设置包含文件路径:
修改lv_conf.h文件,使能配置文件
修改显示驱动接口,在lv_port_disp.c文件中,使能并添加ili9341.h,该文件为TFT屏驱动头文件,修改宏定义为屏幕实际宽度和高度,proteus自带的ILI9341为240*320大小的屏幕:
#define MY_DISP_HOR_RES 240
#define MY_DISP_VER_RES 320
在disp_init函数中增加ILI9341的初始化函数
static void disp_init(void)
{
/*You code here*/ ILI9341_Init();
}
修改 disp_flush() 函数,将自己显示屏对应的填充颜色块函数放到这里
修改输入设备驱动文件lv_port_indev.c,使能文件
注释掉void lv_port_indev_init(void)函数中的鼠标注册部分,防止初始化屏幕后在左上角有小房子图标
三,绘制电路,打开proteus,新建工程,加入STM32F401VE,ILI9431仿真模型,并绘制电路图:
四,编写代码
在main文件中添加包含文件
#include “main.h”
/* Private includes ———————————————————-*/
/* USER CODE BEGIN Includes */
#include #include #include “ili9341.h” #include “ili9341_touch.h” #include “fonts.h” #include “hanzi.h” #include “lv_port_disp.h” #include “lv_port_indev.h” #include “lvgl.h” int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_SPI1_Init(); MX_TIM10_Init(); /* USER CODE BEGIN 2 */ Display_init(); lv_init(); // lvgl初始 lv_port_disp_init(); // 显示器初始化 lv_port_indev_init(); // 输入设备初始 HAL_TIM_Base_Init(&htim10); HAL_TIM_Base_Start_IT(&htim10); // 使用中断模式启动TIM10 DashBoard(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { lv_task_handler(); } /* USER CODE END 3 */ } 编译工程,生成.hex文件,proteus绘制的电路图中双击STM32F401VE,在出现的对话框中选择keil工程编译生成的.hex文件,加载到芯片中 点击左下角运行按钮,即可出现程序运行结果: 通过以上步骤,你可以在Proteus中成功仿真LVGL。/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */

- 东日热敏标签打印机拆解与内部结构分析
- 意法半导体携手华虹实现STM32 MCU本土量产交付!
- 嵌入式变电站烟雾预警系统的设计与实现
- 意法半导体中国本地造STM32微控制器启动规模量产
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
- 内置全栈安全,一站式满足CRA法案与IEC 62443标准——米尔STM32MP257核心板
- 如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
- 实战解析:通过一个小项目掌握STM32所有外设




