移植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主函数实现

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);
}

自定义显示Demo

在main()函数的循环内调用lv_tick_inc(1);函数来提供心跳。并且调用lv_timer_handler()来使得LVGL正常运行(建议在定时器内调用更加方便)。

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

编译运行

效果展示

使用模拟器生成后移植效果

这里就不具体展示模拟器生成代码的移植过程了。

相关推荐
天天爱吃肉82181 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
hsjiasb11 小时前
FreeRTOS学习(二十三)——消息缓冲区(Message Buffer)
stm32·单片机·嵌入式硬件·学习·freertos
我是海飞13 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
沸速存储14 小时前
CPU 和 GPU 核心差别在哪?为什么 AI 训练离不开 GPU
服务器·人工智能·科技·嵌入式硬件·电脑
wuyk55514 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
我不会JAVA!15 小时前
【无标题】
嵌入式硬件·h.264
芯岭技术郦15 小时前
OM6625A芯片 Timer 定时器计数模式使用说明
stm32·单片机·嵌入式硬件
Dr.kangder17 小时前
嵌入式面试总结(八)——大小端
嵌入式硬件·面试·职场和发展·架构·嵌入式
zlinear数据采集卡19 小时前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
zcmodeltech19 小时前
双碳沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的碳捕集-零碳园区-综合能源全场景联动方案
stm32·嵌入式硬件·能源·嵌入式实时数据库·多分类