应用 littlevgl2rtt 软件包胜利点亮 Art-Pi 多媒体扩展版之后,始终心心念 RGB 屏幕接口。于是灰溜溜的下单了一块晚点原子的 4.3 寸 RGB 触摸屏来用。收到屏幕之后,一路驾轻就熟,配置,编译,下载,一看傻了,怎么刷屏的速度比多媒体扩展板的 SPI 屏还慢。有多慢,是眼见一行一行的刷新的慢!
于是,论坛翻贴,QQ 群求教大佬,通过三天三夜的摸索,总算优化到一个本人比较满意的后果了。再此,要感激各位大佬自私的提供技术支持,帮忙解决问题。当初我把过程记录下来,不便起初的小伙伴遇到雷同问题的时候有解决的思路。当然,也心愿有更好的办法的小伙伴们提出更好的优化计划。
开发工具:
RT-Thread Studio
OS 版本:
4.0.3
开发板:
Art-Pi + 晚点原子 4.3 寸 RGB 屏
软件包:
Littlevgl2rtt(latest)
舒适提醒:
上面的优化计划是基于该软件包的优化,如果是本人始终 lvgl 的不再此探讨范畴。
首先是软件包配置
硬件上要关上 LCD 和 SDRAM
图片.png
软件包配置,这里关上 sample,就能够先用软件包的演示查看成果
图片.png
失常状况下,这样配置后保留,编译通过,下载。就能够失常工作了。不过会发现图像切换速度十分慢,十分卡。
上面就来谈谈如何优化,RGB 屏应用的是 LTDC 接口推屏的,这部分驱动其实 rtt 曾经帮咱们做好了,将 LTDC 接口封装为 lcd 设施,lvgl 调用 lcd 设施接口对设施进行读写。该函数位于 drv_lcd.c 文件中,首先想要优化的是这个函数,不过临时没想到要怎么优化。前面依据大佬的倡议,lvlg 不要通过这个接口来刷屏,而是间接刷屏,而且要开启 DMA2D,用 DMA2D 来刷。
开启 DMA2D,在 stm32h7xx_hal_conf.h 文件中,关上宏定义
图片.png
在 stm32h7xx_hal_msp.c 文件中增加,硬件层初始化代码。
图片.png
而后在 drv_lcd.c 文件中增加 DMA2D 软件层面的初始化代码
图片.png
并且在 drv_lcd_hw_init()函数中调用该初始化函数
图片.png
到这里,DMA2D 的初始化就算是实现了,接下来要怎么用呢?
去软件包内批改 littlevgl2rtt.c 文件,
首先批改 littlevgl2rtt_init()函数。
屏蔽掉原有的缓存 buf,因为该 buf 取值较小,而 art-pi 上有应用 SDRAM,领有较大的内存空间,咱们能够间接申请和屏幕像素绝对应大小的缓存空间,而且申请两个,因为 lvgl 反对双刷 buffer。
图片.png
记得屏蔽掉原来 buf 申请内存空间的代码
图片.png
接下来改单刷 buffer 为双刷 buffer
图片.png
而后改刷屏的函数,lcd_fb_flush(),将函数中的内容全副屏蔽掉,改成一下代码。
图片.png
这里提供了两种 DMA2D 的形式,一种是中断形式,一种是轮询形式。如果应用中断形式,须要增加 DMA2D 中断处理函数。
图片.png
两者的区别就是,
采纳轮询形式的,则始终期待 DMA2D 传输完结,而后通过函数 lv_disp_flush_ready()函数通过 LVGL 曾经实现刷屏。
采纳中断形式的,则是在中断处理函数中调用函数 lv_disp_flush_ready()函数通过 LVGL 曾经实现刷屏。
通过上述优化之后,刷屏速度大大提高。集体曾经比较满意了,能够达到我的项目利用的要求了。当然还有更好的办法,比方本人移植 LVGL 而不是应用软件包,或者是间接用 DMA2D 寄存器操作来刷屏,这些操作都比拟高级,作为初学者的我还没学会。哪天我学会了,再来分享。或者有大佬能够共享一下教程,众乐乐一下。
再次,感激在问题解决过程中给我提供帮忙的各位大佬们!
参考文档:
LVGL 优化帧率技巧_无人等人的博客 -CSDN 博客
[https://blog.csdn.net/weixin_…
f429 discovery 开发版 LVGL 移植(带操作系统)_无人等人的博客 -CSDN 博客
[https://blog.csdn.net/weixin_…
stm32 DMA2D 应用中断 LVGL, 进步 LVGL 帧率_紫枫洛天的博客 -CSDN 博客
[https://blog.csdn.net/a226754…
LVGL 在 rt-thread 上的移植 – hechunc 的个人空间 – OSCHINA – 中文开源技术交换社区
https://my.oschina.net/hechun…
原文链接:https://club.rt-thread.org/as…