深入理解LVGL与STM32(基于正点原子资料)

1、概况

        LVGL能让你在嵌入式平台(stm32)相对容易的搞出比较绚丽的UI交互效果。也就是在LVGL制定的游戏规则下去开发UI界面,活好事少。为此硬件设备需要做一些适配,以达到:LVGL能够使用STM32的硬件资源;同时,在STM32编程后,效果又能落地到LVGL。(以下截图来是正点原子:LVGL开发指南_V1.5.pdf)

LVGL用起来需要四个资源:

1、心跳时钟,stm32提供给LVGL;

2、stm32驱动好的显示屏;

3、stm32驱动好的输入设备(触摸屏);

4、stm32的内存资源;

上面四个资源都需要与LVGL对接上(按照LVGL源码提供的规则接口对接),LVGL才能在stm32平台上正常使用。

2、LVGL的裁剪

        LVGL源码目录:

与 LVGL移植相关的有 examples文件夹(examples里面的porting文件是输出和输入设备驱动)、src文件夹、lv_conf_template.hlvgl.h,其他的部分均与移植无关,用户可以忽略

以下是stm32工程的文件目录,GUI_APP也可以忽略(细节参考正点原子例程):这里主要是再次加强一下印象,主要就是把examples文件(里面只有porting有用)和src文件放入STM32的工程,lv_conf_template.h(改名为lv_conf.h)lvgl.h也一起放在。

综上就是从LVGL的源码里面,拿出:examples、src、lv_conf.h、lvgl.h,放到Middlewares/LVGL/GUI/lvgl目录下

3、LVGL启动流程

lv_task_handler就是lv_timer_handler

3、LVGL与MCU资源

 (1)时钟:就是在STM32每定时1ms的间隔里面调用一下函数lv_tick_inc:

(2)显示屏:LVGL如何识别到屏,以及如何使用屏

1、初始化:处理屏的硬件的驱动

lcddev是自己定义的类型,与LVGL没有关系;

disp_init()是LVGL接口,里面的lcd_init()与lcd_display_dir是自己实现的代码;主要完成的工作是:调通LCD硬件驱动,并且填充好了lcddev,lcddev结构体方便自己使用;

2、屏的缓存区设置:

lv_disp_draw_buf_t、lv_color_t、函数lv_disp_draw_buf_init,它们都是LVGL的接口

这一步把draw_buf_dsc_1缓存搞好了(下一步会把它个设备绑定一起)

3、在LVGL中注册显示设备: LVGL只认注册设备disp_drv

以上主要填充disp_drv的内容(disp_drv属于LVGL的类型lv_disp_drv_t)

包含属性有:分辨率、缓存区、显示刷新操作等

 注册完后,LVGL只认disp_drv,disp_drv也就是屏幕

最关键的显示刷新disp_flush函数:LVGL把数据显示到屏是通过disp_flush。

LVGL会间隔的调用disp_flush以刷新屏幕。disp_flush、lcd_draw_fast_rgb_color、lv_disp_flush_ready这三个函数都是LVGL的函数,

我们要在lcd_draw_fast_rgb_color里面实现对屏的具体操作(也就是在这里实现自己的代码)。lcd_set_window、lcd_write_ram_prepare、lcd_wr_data这三个函数是本例程LCD屏的控制函数(也就是自己写的函数)。

综上

屏幕的大小:disp_drv.hor_res = lcddev.width; disp_drv.ver_res = lcddev.height;

屏幕的缓存也有了:disp_drv.draw_buf = &draw_buf_dsc_1;、

也知道如何使用屏幕:disp_drv.flush_cb = disp_flush;

LCD屏能够正常被LVGL使用。

(3)触摸屏

1、touchpad_init()这是LVGL的接口,里面实现了(根据具体情况自己完成)触摸屏的驱动

2、touchpad_read是LVGL的接口,它需要获取是否按下,按下的坐标多少;

        touchpad_read调用了touchpad_is_pressed、touchpad_get_xy它们都是LVGL的接口,按照它们的需求,把内容给它们即可。

5、配置文件lv_conf.h

这个文件主要就是开启某些功能,结合具体硬件配置一些宏。详细看正点原子的相关资料或者视频。

物联沃分享整理
物联沃-IOTWORD物联网 » 深入理解LVGL与STM32(基于正点原子资料)

发表评论