RT-Thread学习笔记系列之littlevgl GUI(3)

RT-Thread 专栏收录该内容
5 篇文章 3 订阅

前言

随着物联网、智能家居、智能控制等行业的极速发展,小而美的且反应迅速且成本低的,模块化,定制化的嵌入式系统的需求越来越大,其中降低使用要求,提高用户体验,人机交互是一个非常好的方法,所以本文记录的是调试rtthread+lcd+littlevgl GUI的记录及流程

一、资源介绍

硬件是自行画的PCB板,资源如下

  • MCU:STM32F407ZGT6
  • LCD:3.2寸320*240分辨率,驱动芯片:ILI9341。 引脚除了RESET和背光控制引脚,其他引脚连接均和正点原子的STM32F407探索者开发板兼容
  • 使用FSMC接口驱动

软件是使用rtthread studio1.1.5版本

二、配置过程

添加littlevgl2rtt软件包

在这里插入图片描述
配置如下
其中DPI计算方法:
用勾股定理,比如5寸屏(屏幕的寸数就是对角线的长度),1080*1920分辨率,dpi就是sqrt(1080^2 + 1920^2) / 5=440。
所以我的计算得到是125
在这里插入图片描述
LCD屏幕配置及驱动注册请参考上一篇
RT-Thread学习笔记系列之LCD驱动及emwin示例(2)

保存编译无误下载屏幕却没有任何显示,LCD屏幕是验证过的,这个软件包也有很多人使用过(头大,没办法只能一步步分析了)

分析过程

  • 方法:

    • 先参考别人使用这个软件包的例子和过程
    • 对比两者之间的区别
    • 参考官方的demo和文档介绍
  • 查找过程:

    • 这个软件包作者是在RT1050 fire的板子,lcd为800*480进行测试
    • 官方有使用ART-PI开发板进行直播使用过
    • 论坛也有很多小伙伴也是直接使用ART-PI开发板直接使用BSP驱动成功过
    • 我手上有ART-PI开发板但是屏幕接口不兼容无法直接验证,既然别人一步成功,那却别肯定是驱动或者接口方面的问题,自己直接创建一个art-pi模板的BSP工程,使能LCD驱动,对比两者的区别,再对比接口的区别。任何屏幕显示底层无非都是打点,刷新,显示打开这几个步骤。所以最终找到了区别如下:
  • 区别

    • ART-PI的LCD驱动的结构体有使用到官方对图像定义的rt_device_graphic_info结构体并分配了内存给指针framebuffer,所以该指针不为空,而我的LCD驱动是没有使用
    • littlevgl2rtt软件包中得接口驱动文件littlevgl2rtt.c中初始化函数littlevgl2rtt_init对刷新回调函数是有做区分的
      在这里插入图片描述
    • 官方的示例文件中的介绍
      在这里插入图片描述
      -刷新函数lcd_fb_flushlcd_flush的区别
static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
    int x1, x2, y1, y2;
	.
	.//中间代码省略
	.
    rt_device_control(device, RTGRAPHIC_CTRL_RECT_UPDATE, &rect_info);

    lv_disp_flush_ready(disp_drv);
}

static void lcd_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
    int x1, x2, y1, y2;    
	.
	.//中间代码省略
	.
    //TODO color convert
    for (y = act_y1; y <= act_y2; y++)
    {
        rt_graphix_ops(device)->blit_line((const char *)color_p, act_x1, y, act_x2 - act_x1 + 1);
        color_p += (x2 - x1 + 1);
    }
}

发现我的驱动使用的刷新函数没有lv_disp_flush_ready(disp_drv);没有通知图形库,在lcd_flush函数的最后面加上这句就好了,然后编译下载
在这里插入图片描述
显示正常了,说明驱动已经成功,但是每个窗口太大了(按照计算方法确实是125,可能长宽比原因littlevgl认为这样是最佳的显示把),调节一下DPI为80(本人不断的调节认为比较好的一个数值),显示比较合理

在这里插入图片描述

总结

  • 遇到问题不要灰心,不要放弃,白嫖党是没有竞争力的,成为有竞争力的人是你能去解决问题
  • 如果有现成的例子,对比法是简单有消的方法
  • 先要清楚原理,就像LCD屏幕底层就是打点,打开显示等几个步骤,可以通过断点或log判断是否有执行
  • 多看官方的文档和demo,官方的一般都是比较严格可靠的,细心点查找避免忽略重要的信息
  • 5
    点赞
  • 9
    评论
  • 21
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值