单片机
返回首页

STM32与Proteus仿真实现LVGL图形界面的方法与资料指南

2025-09-19 来源:cnblogs

一:LVGL简介

LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面(GUI)库,专为嵌入式系统设计。它提供了一套丰富的图形组件和功能,适用于各种显示设备,如小型屏幕、触摸屏和大型显示器。LVGL的主要特点包括:

  1. 轻量级:LVGL的设计目标是占用较少的内存和处理器资源,适合资源有限的嵌入式设备。

  2. 高性能:LVGL经过优化,能够在低功耗的微控制器上流畅运行,提供良好的用户体验。

  3. 丰富的组件:LVGL提供了多种预定义的UI组件,如按钮、滑块、列表、图表等,方便开发者快速构建应用界面。

  4. 灵活的主题支持:LVGL支持主题和样式,可以自定义组件的外观,以适应不同的应用需求。

二:LVGL移植

将LVGL移植到STM32微控制器上是一个相对常见的任务,许多开发者利用STM32的强大性能和LVGL的图形能力来创建丰富的用户界面。以下是移植LVGL到STM32的一般步骤:

  1. 准备开发环境

硬件:直接使用proteus里面提供的元件模型STF32F401VE,绘制电路图,模拟实物硬件开发板。

软件:安装STM32CubeIDE或其他支持STM32的IDE(如Keil、IAR等)。

  1. 下载LVGL

Github仓库:https://github.com/lvgl/lvgl


国内码云仓库:https://gitee.com/mirrors/lvgl

选择想移植的版本,本文选择下载LVGL8.1.

  1. 创建STM32项目

使用STM32Cube创建一个新的STM32项目,选择STM32F401VET6,配置所需的外设,例如GPIO、SPI、定时器,并生成Keil工程。

  1. 添加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)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

lv_task_handler();


}

/* USER CODE END 3 */

}


编译工程,生成.hex文件,proteus绘制的电路图中双击STM32F401VE,在出现的对话框中选择keil工程编译生成的.hex文件,加载到芯片中

点击左下角运行按钮,即可出现程序运行结果:

通过以上步骤,你可以在Proteus中成功仿真LVGL。


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 以太网控制器

  • 便携式耳机放大器

  • 最简单的调频接收机

  • PLL调谐模块

  • 简易调频接收机

  • 铃声发生器

    相关电子头条文章