(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(4)使用LVGL

经过前几章的搭建,底层显示已经没有问题了,现在需要添加上层的库,我选择了比较火的开源GUI库--LVGL。而RT-Thread Studio支持直接添加LVGL代码库的。

在RT-Thread Settings中选择添加软件包:

直接搜索LVGL,然后添加:

然后保存  RT-Thread Settings 即可。

添加完成后我们需要把官方给的几个接口文件的模版添加到我们的应用代码里面,这些模版文件路径为:

packages\LVGL-latest\examples\porting

其中它们分别是:

最后还需要一个LVGL库的配置模版lv_conf_template.h,它在packages目录下。 把这几个文件名字中的模版后缀(template)去掉,添加到application文件夹下:

这时候编译会报一些错误:

主要是lvgl_thread_entry函数中找不到相关函数的定义:

看名字也该知道这几个就是我们刚才添加的模版文件相关的。我们仔细看一下这lv_rt_thread_port.c 这个文件,发现里面包含一个自动初始化的 lvgl_thread_init 函数,然后这个函数创建了一个 "LVGL" 的线程,现在是线程入口函数找不到相关定义。可以看出来,RT-Thread Studio已经帮我们生成好一部分代码了,我们现在只需修改接口模版文件适配我们的板子即可。

这里我暂时不使用lvgl的文件管理和输入设备,只保留显示:

打开几个模版文件可以看到,其实文件都被宏定义#if 0给注释掉了,所以现在使用哪个开哪个模块,但是lv_conf.h是必须打开的。然后修改模版文件中的头文件,也把后缀去掉:

然后在工程编译命令中添加宏定义 LV_LVGL_H_INCLUDE_SIMPLE

应用后保存。然后在 lv_port_disp.c 中修改屏幕大小,根据实际硬件设置:

然后LVGL给了三种初始化的方法,可以参考:

https://www.xyhtml5.com/22577.html

这里我选用第三种,把另外两种注释掉即可:

然后这个函数下面对buf的引用修改一下,修改为刚才使用方式3创建的:

然后我们只需要完善两个接口函数disp_initdisp_flush即可:

注意这里坐标系是朝下的: 

在mlcd.c中添加函数,这里使用区域绘制函数(如果使用一个点一个点的描点函数,则会非常卡):

其实就是套个壳,然后直接在disp_flush中调用: 

注意这里调用的mlcd_fill_rectangle其实最底层调用的是ST7735_FillRGBRect,这个函数的参数是宽、高,而不是坐标!我们想刷新整个屏幕时,刷新的区域是坐标(0,0)到(159,79)的矩形范围,但是转化为宽高则是起点为(0,0),宽为160,高为80的范围。我一开始没有+1,导致lvgl绘制出来的画面都是斜的,调试了很久都没有发现原因,太坑了。

最后再开启两个宏定义:

我们还需要给告诉LVGL时间,可以把lv_tick_inc加到SysTick_Handler函数里,参数单位是毫秒:

或者使用LVGL的宏定义,修改如下,注意头文件要换成你自己对应芯片的头文件:

以上两个方法只能选其一。 

再修改一下LVGL分配的内存,原始直接分配了128K,太大了,现在修改为10K:

可以修改lv_hal_disp.h中的 LV_DEF_REFR_PERIOD去修改FPS的上限,否则最高30!

如果发现显示的颜色有异常,可能是因为颜色是uint16类型的,但是SPI传输是uint8类型的,所以要注意大小端,可以在ST7735_FillRGBRect函数中修改:

写一个简单的文本显示测试一下:

int main(void)
{
    key_init();
    lv_obj_t* label = lv_label_create(lv_scr_act());
    lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);//过长会滚动
    lv_obj_set_pos(label, 0, 0);
    lv_obj_set_size(label, 100, 16);
    lv_label_set_text(label, "Something project V1.0!");
    while (1)
    {
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

 很丝滑~

推荐:

LVGL显示优化—基本优化

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread作品秀】基于 lvgl 的漏电保护装置校验仪 UI 界面设计作者:赵加文 概述低压漏电引起的各种安全事故已经严重影响到生产生活,威胁到生命财产安全。而解决这一现象的设备就是漏电保护开关,漏电保护开关的漏报率、误报率是很关键的参数,因此有必要对漏电保护开关的性能进行测试。因此,漏电保护装置校验仪是很有必要的。 开发环境硬件:ART-Pi 开发板,正点原子 480*272 4.3寸 RGB 屏幕 RT-Thread版本:4.0.3 开发工具及版本: RT-Thread Studio 2.0.0 :编写 编译 调试 下载代码 STM32CubeMX 6.1.0: codeBlocks 20.03:用于在 PC 机上进行 lvgl 模拟 MCU_Font V2.0: 用于转换中文,然后使得中文能够在 lvgl 中显示 RT-Thread使用情况概述在 UI 设计的整个过程中,使用RT-Thread 的部分主要有以下几个方面: 内核部分:动态线程,信号量 组件部分:PIN 设备、I2C 设备、TOUCH 设备框架、LCD 设备框架、finsh 组件 软件包部分:littlevgl2rtt、gt9147 硬件框架软件框架说明系统整体流程图: 软件模块说明整个UI 系统设计所遵循的是 lvgl 图形库的一个回调函数的机制,将各个事件与对应的操作所绑定起来,当滑动滑条时对应的滑条的回调函数就会被触发,那么就会执行滑条回调函数的内容,当滑动点击文本框时,文本框对应的回调函数就会被触发,进而创建键盘的控件,通过键盘输入所需要的数据。 演示效果图片展示: 演示视频: 比赛感悟这次参赛,之前还没有使用RT-Thread studio 这个集成开发环境,这次在使用 ART-Pi 的时候全程是使用 RT-Thread studio 这个开发环境,在使用的过程中也碰到了很多问题,有时候明明配置了相关组件,但是保存之后,并没有代码添加到工程里。现在也没有弄明白问题出在哪里,虽然存在着这里问题,但是在使用的过程中,还是非常的方便,整个开发过程就如同搭积木一样方便,与 RTT操作系统贴合的非常的紧密。 除此之外,便是在使用 lvgl 的过程中碰到了很多的问题,现在网上的教程基本是 lvgl v6 版本的教程,关于 lvgl v7 版本的教程很少,而且 v6版本与 V7 版本的 API 相差很大,不能按照 V6 版本来使用 V7 ,在这个过程中摸索了好多,同时也感受到了 lvgl 的魅力,使用嵌入式系统上是非常不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值