正点原子学习小组
直播中

jf_07365693

1年用户 379经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[经验]

【正点原子STM32H7R3开发套件试用体验】LVGL

LVGL

【正点原子STM32H7R3开发套件试用体验】LVGL

本文介绍了正点原子 STM32H7R3 开发板实现 LVGL 的综合例程开发。

该例程实现了一个基于 LVGL 的 GUI 界面,包含多款 APP 图标,如计算器、文件管理、设置等。

简介

LVGL (Light and Versatile Embedded Graphics Library) 是一个免费的开源图形库,提供创建易于使用的嵌入式 GUI 所需的一切图形元素、美观的视觉效果和低内存占用。

LVGL_logo.jpg

LVGL 是最流行的免费开源嵌入式图形库,可为任何 MCU、MPU 和显示类型创建漂亮的 UI。

从消费电子产品到工业自动化,任何应用程序都可以利用 LVGL 的 30+ 内置小部件、100+ 样式属性、受 Web 启发的布局和支持多种语言的排版系统。

LVGL_intro_data_flow.jpg

LVGL 是完全开源的,没有外部依赖项,这使得它的移植非常简单。它适用于任何现代 MCU 或 MPU,可与任何 (RT)OS 或裸机设置一起使用,以驱动电子纸、单色、OLED 或 TFT 显示器,甚至显示器。此外,它甚至对于商业项目也是免费的。

LVGL 可与从 100 MHz MCU 到基于 Linux 的多核 MPU 的任何硬件配合使用。领先的芯片供应商已经在其生态系统中支持 LVGL。我们还提供提供无缝集成的即用型项目。这些项目包括最新的存储库、响应式支持和广泛的文档。

主要特点

  • 强大的构建块,如按钮、图表、列表、滑块、图像等。
  • 具有动画、抗锯齿、不透明度、平滑滚动的高级图形
  • 各种输入设备,如触摸板、鼠标、键盘、编码器等。
  • UTF-8 编码的多语言支持
  • 支持多显示器,即使是混合颜色格式
  • 具有类似 CSS 样式的完全可自定义图形元素
  • 独立于硬件:与任何微控制器或显示器一起使用
  • 可扩展:能够在很少的内存(64 kB 闪存、16 kB RAM)下运行
  • 支持操作系统、外部存储器和 GPU,但不是必需的
  • 单帧缓冲区操作,即使具有高级图形效果
  • 用 C 语言编写,以实现最大的兼容性(兼容 C++)
  • 模拟器,用于在没有嵌入式硬件的 PC 上开始嵌入式 GUI 设计
  • 在模拟器下开发的用户代码可以与固件共享,以提高 UI 开发效率。
  • 绑定到 MicroPython
  • 用于快速 GUI 设计的教程、示例、主题
  • 文档可在线获取
  • 在 MIT 许可下免费和开源

硬件要求

基本上,每个能够驱动显示器的现代控制器都适合运行 LVGL。最低要求是:

  • 16、32 或 64 位微控制器或处理器
  • 建议使用 > 16 MHz 的时钟速度
  • Flash/ROM:> 64 kB(对于非常重要的组件)(建议使用 > 180 kB)

存储库布局

LVGL 项目的所有存储库都托管在 GitHub 上。

硬件准备

  • 正点原子 2.8/3.5/4.3/7/10 寸 TFT LCD模块 (仅限 MCU 屏,16 位 8080 并口驱动)
  • 触摸屏(电阻式/电容式)
  • SD卡(需要将驱动文件放置在根目录)

TF_list.jpg

项目实现

  • 开机后运行程序,检测字库,进入主界面,和智能手机类似,点击图标即可进入相应的功能;
  • LED1 闪烁指示系统运行。

代码

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./SYSTEM/usart/usart.h"
#include "./MALLOC/malloc.h"
#include "./FATFS/exfuns/exfuns.h"
#include "./BSP/LED/led.h"
#include "./BSP/BEEP/beep.h"
#include "./BSP/KEY/key.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/TIMER/btim.h"
#include "./BSP/TIMER/gtim.h"
#include "./BSP/HYPERRAM/hyperram.h"
#include "./BSP/ADC/adc.h"
#include "./BSP/RTC/rtc.h"
#include "./BSP/SDMMC/sdmmc_sdcard.h"
#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"
#include "image.h"
#include "lv_load_image.h"int main(void)
{
    uint8_t key;
    uint8_t res;
    
    sys_mpu_config();                                   /* 配置MPU */
    sys_cache_enable();                                 /* 使能Cache */
    HAL_Init();                                         /* 初始化HAL库 */
    sys_stm32_clock_init(300, 6, 2);                    /* 配置时钟,600MHz */
    delay_init(600);                                    /* 初始化延时 */
    usart_init(115200);                                 /* 初始化串口 */
    led_init();                                         /* 初始化LED */
    key_init();                                         /* 初始化按键 */
    beep_init();                                        /* 初始化蜂鸣器 */
    lcd_init();                                         /* LCD初始化 */
    hyperram_init();                                    /* 初始化HyperRAM */
    adc_init();                                         /* 初始化ADC */
    gtim_timx_pwm_chy_init(500 - 1, 300 - 1);           /* 初始化通用定时器PWM输出 */
    rtc_init();                                         /* 初始化RTC */
    rtc_set_wakeup(RTC_WAKEUPCLOCK_CK_SPRE_16BITS, 0);  /* 设置RTC周期性唤醒中断 */
    my_mem_init(SRAMIN);                                /* 初始化AXI-SRAM1~4内存池 */
    my_mem_init(SRAMEX);                                /* 初始化XSPI2 HyperRAM内存池 */
    my_mem_init(SRAM12);                                /* 初始化AHB-SRAM1~2内存池 */
    my_mem_init(SRAMDTCM);                              /* 初始化DTCM内存池 */
    my_mem_init(SRAMITCM);                              /* 初始化ITCM内存池 */
    exfuns_init();                                      /* 为fatfs相关变量申请内存 */
    f_mount(fs[0], "0:", 1);                            /* 挂载SD卡 */
    f_mount(fs[1], "1:", 1);                            /* 挂载NOR Flash */
    f_mount(fs[2], "2:", 1);                            /* 挂载SD NAND */
    
    key = key_scan(0);
    
    if (key == KEY1_PRES)
    {
        goto UPD;                                                   /* 强制更新图库 */
    }
    
    while (images_init())                                           /* 检查图库 */
    {
        UPD:
        lcd_clear(WHITE);                                           /* 清屏 */
        lcd_show_string(30, 30, 200, 16, 16, "STM32", RED);
        
        while (sd_init())                                           /* 检测SD卡 */
        {
            lcd_show_string(30, 50, 200, 16, 16, "SD Card Failed!", RED);
            delay_ms(200);
            lcd_fill(30, 50, 200 + 30, 50 + 16, WHITE);
            delay_ms(200);
        }
        
        lcd_show_string(30, 50, 200, 16, 16, "SD Card OK", RED);
        lcd_show_string(30, 70, 200, 16, 16, "image Updating...", RED);
        res = images_update_image(20, 90, 16, (uint8_t *)"0:", RED); /* 更新图片库 */
        
        while (res)         /* 更新失败 */
        {
            lcd_show_string(30, 90, 200, 16, 16, "image Update Failed!", RED);
            delay_ms(200);
            lcd_fill(20, 90, 200 + 20, 90 + 16, WHITE);
            delay_ms(200);
        }
        
        lcd_show_string(30, 90, 200, 16, 16, "image Update Success!   ", RED);
        delay_ms(1500);
        lcd_clear(WHITE);   /* 清屏 */
    }
    
    btim_timx_int_init(100 - 1, 30000 - 1);                         /* 10ms中断一次,为LVGL提供时基 */
    lv_init();                                                      /* lvgl系统初始化 */
    lv_port_disp_init();                                            /* lvgl显示接口初始化,放在lv_init()的后面 */
    lv_port_indev_init();                                           /* lvgl输入接口初始化,放在lv_init()的后面 */
    
    lv_load_main_window();                                          /* 加载主页面 */
    
    while (1)
    {
        lv_timer_handler();                                         /* lvgl计时器 */
        delay_ms(5);
    }
}

完整工程见附件。
*附件:Demo5_LVGL_4.3inch_MCU_Screen.zip

效果

LVGL 桌面及应用图标显示

LVGL_Screen.jpg

计算器效果

Calculator.jpg

文件管理展示

DocumentManage.jpg

总结

本文介绍了正点原子 STM32H7R3 开发套件实现 LVGL 界面 GUI 的实现,通过调试和运行代码,测试了其终端应用功能,包括文件管理、计算器、设置等,为相应开发提供了参考。

LVGL

更多回帖

发帖
×
20
完善资料,
赚取积分