(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(4)使用LVGL
创始人
2024-02-10 17:53:08
0

上一篇:

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

经过前几章的搭建,底层显示已经没有问题了,现在需要添加上层的库,我选择了比较火的开源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显示优化—基本优化

相关内容

热门资讯

海南封关首日见闻:政策红利“有... 中新网海口12月18日电 (黄方舟)“特种邮票不只是一张小纸片,它承载的更是时代的印记。”18日,北...
“低头族”看手机在餐厅外台阶摔... 消费者在餐厅用餐结束后,一边低头看手机一边步行离开,在餐厅外台阶区域摔成骨折,后起诉餐厅索赔6万元。...
5600万专利诉讼开庭在即:丰... 12月23日,就在冲刺IPO之际,两起针对丰沃股份、总索赔5600万元的专利侵权案将开庭审理。 这家...
丝芭传媒再发文:鞠婧祎涉嫌严重... 近日,知名演员、歌手,鞠婧祎与经纪公司丝芭传媒的合约纠纷愈演愈烈,引发关注。双方你来我往,各执一词。...
“15岁女生被同学杀害案”近期... 12月18日,红星新闻记者从曲靖15岁女生遇害案被害人方某涵父亲处获悉,该案刑事部分将于近期在曲靖市...
封关“封”什么?免税政策怎么惠... 新京报贝壳财经记者 潘亦纯 胡萌 编辑 王进雨 校对 赵琳 ▲12月18日,海南自由贸易港启动全岛封...
敦化市胜利街道文苑社区网格治理... 敦化市胜利街道文苑社区党委积极发展和践行新时代“枫桥经验”,依托网格化治理,通过面上“排”、线上“找...
央行:新一年或推动利率改革,加... 【12月18日推出“落实会议部署问答中国”系列述评】鉴于央行逐步淡化量化目标,更重价格型调控工具作用...
大学生起诉生父索要一半学费,法... 三湘都市报12月18日讯(文/视频 全媒体记者 虢灿 通讯员 李阳)父母离异时曾约定共同承担女儿大学...