• 移植LVGL到单片机的一个demo简单介绍


    简介

    背景
    本文使用的是主控IC为stm32f103zet6, 显示IC为ST7735s,它是128*160的像素,色深为RGB565颜色。

    官方虽然说LVGL移植平台只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。但我移植到stm32f103c8t6,不管怎么修改配置,一直显示内存不够。

    LVGL 可以驱动单色OLED、TFT 显示器、监视器或任何其他显示器。c 代码使其可在任何平台上使用,例如 NXP LPC 或 iMX、STM32、PIC、Arduino、ESP32、Raspberry 等。

    准备

    下载lvgl 8.2.0版本源码下载地址:https://github.com/lvgl/lvgl
    在这里插入图片描述

    使用stm32cube编写驱动

    在这里插入图片描述
    在这里插入图片描述

    移植LVGL和屏幕驱动

    1. 在lvgl_stm32f103ze_demo项目中新建Middlewares/LVGL文件夹
    2. LVGL文件夹下创建GUI/lvgl和GUI_APP文件夹
    3. 拷贝lvgl下的examples文件夹和src文件夹以及lv_conf_template.h和lvgl.h到Middlewares/LVGL/GUI/lvgl目录下注意:拷贝之后将lv_conf_tempalate.h修改为lv_conf.h
    4. 把lv_conf.h的条件编译指令#if 0修改成#if 1
      在这里插入图片描述

    LVGL主要配置

    驱动IC的色深和当前硬件支持的内存资源大小。
    在这里插入图片描述

    · 显示缓冲区初始化有三种方式,这里使用的是方式1,方式1消耗的硬件资源最小,但运行效果也是最差的,三种方式如下 ·
    第一种只创建一个缓存区,长度是横轴像素长度的 10 倍 · 第二种创建两个缓存区,长度都是横轴的 10 倍,可以结合 DMA
    加快写入速度 · 第三种则是创建两个,大小是横轴乘以纵轴,相当于整个屏幕大小

    本人选择第一种,大家看情况

    在这里插入图片描述

    划重点

    这里必须重写打点函数,用自己的屏画点或划区域的函数替代一下。
    在这里插入图片描述
    屏幕宽高也需改成自己真实屏幕大小。
    在这里插入图片描述

    main.c主函数实现
    在这里插入图片描述

    static void event_handler(lv_event_t * e)
    {
        lv_event_code_t code = lv_event_get_code(e);
    	if(code == LV_EVENT_CLICKED) 
    	{
    //	    printf("Clicked\n");
    	}
    	else if(code == LV_EVENT_VALUE_CHANGED) 
    	{
    //	    printf("Toggled\n");
    	}
    }
    
    void test_button()
    {
    	lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    	lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);
    	lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40); //设置为中心位置的下面40个像素
    	
    	//设置按钮名称为test button(如果不设置,按钮上则没有名字显示)
    	lv_obj_t *label = lv_label_create(btn1);
    	lv_label_set_text(label, "test button");
     	lv_obj_center(label);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    自定义显示Demo
    在这里插入图片描述
    在这里插入图片描述
    在main()函数的循环内调用lv_tick_inc(1);函数来提供心跳。并且调用lv_timer_handler()来使得LVGL正常运行(建议在定时器内调用更加方便)。

    如果在编译代码,报错是#include“lvgl.h”这个出问题了,将#inclde"./././lvgl.h"这种改成#include“lvgl.h”就行了.

    编译运行
    在这里插入图片描述

    效果展示

    在这里插入图片描述

    使用模拟器生成后移植效果
    这里就不具体展示模拟器生成代码的移植过程了。
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    软件测试入门一(认识软件测试)
    OpenSIPS2.4 修改from和to
    主定理(master定理)
    安卓主动发数据到uniapp界面
    如何在3GPP网站找到自己需要的技术标准/报告
    SpringBoot项目如何进行打包部署
    行业案例 | 睿眼攻击溯源组合拳让黑客攻击事件无所遁形
    天翎知识文档系统+群晖NAS,助力企业实现移动化学习
    Vue3组件库项目基础搭建
    【python】(十八)python常用第三方库——pymysql
  • 原文地址:https://blog.csdn.net/qq_32348883/article/details/134352349