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

前言

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

1、资源介绍

硬件是自行画的PCB板,资源以下函数

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

软件是使用rtthread studio1.1.5版本学习

2、配置过程

添加littlevgl2rtt软件包

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






测试

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

分析过程

  • 方法:spa

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

    • 这个软件包做者是在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,官方的通常都是比较严格可靠的,细心点查找避免忽略重要的信息
相关文章
相关标签/搜索