当前位置: 首页 > news >正文

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

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

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

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

效果展示

在这里插入图片描述

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

在这里插入图片描述

http://www.lryc.cn/news/229891.html

相关文章:

  • rust_for_linux驱动完整版记录
  • Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图,Kotlin(6)
  • 计算机网络课后作业2023秋
  • 阿里云国际站:全球加速GA
  • M2LC-Net
  • Jenkins 质量扫描
  • 【LeetCode刷题笔记】滑动窗口
  • 笔试题之指针和数组的精讲
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • junit写搜索树测试
  • 顺丰接口对接-订单创建与取消(java单元测试)
  • C++:OJ练习(每日练习!)
  • GPTs Hunter 是什么?
  • 【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时
  • HDU 1027:Ignatius and the Princess II ← next_permutation()
  • 主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)
  • hugeGraph修改PropertyKey属性类型
  • vscode 访问本地或者远程docker环境
  • 人工智能与充电技术:携手共创智能充电新时代
  • 『自定义B站视频播放速度』
  • Java入门篇 之 继承
  • 如何计算掩膜图中多个封闭图形的面积
  • 【Nginx】CentOS 安装Nignx
  • idea 代码快捷键Mac版
  • 【NI-DAQmx入门】多通道数据采集
  • 回顾 — SFA:简化快速 AlexNet(模糊分类)
  • 基于51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)
  • 分发饼干(贪心算法+图解)
  • vue项目路由使用history模式,nginx配置,刷新页面显示404
  • redis的redis.service配置