Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
DMA2D
LittlevGL_LVGL
Art_Pi学习笔记5.1:优化LVGL软件包提高刷屏的速度
发布于 2020-12-31 15:02:00 浏览:11119
订阅该版
使用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 ![image.png](/uploads/20201231/adf817d140a6a534de24dce2735769b7.png) 软件包配置,这里打开sample,就可以先用软件包的演示查看效果 ![image.png](/uploads/20201231/591a84eb2030cae5d34e222e6f8ce9c9.png) 正常情况下,这样配置后保存,编译通过,下载。就可以正常工作了。不过会发现图像切换速度非常慢,非常卡。 下面就来谈谈如何优化,RGB屏使用的是LTDC接口推屏的,这部分驱动其实rtt已经帮我们做好了,将LTDC接口封装为lcd设备,lvgl调用lcd设备接口对设备进行读写。该函数位于drv_lcd.c文件中,首先想要优化的是这个函数,不过暂时没想到要怎么优化。后面根据大佬的建议,lvlg不要通过这个接口来刷屏,而是直接刷屏,而且要开启DMA2D,用DMA2D来刷。 开启DMA2D,在stm32h7xx_hal_conf.h文件中,打开宏定义 ![image.png](/uploads/20201231/5bfe3ea142845239a4c351d7ac51e224.png) 在stm32h7xx_hal_msp.c文件中添加,硬件层初始化代码。 ![image.png](/uploads/20201231/a36f802a0eaed5d8c8cbd7703bd582f9.png) 然后在drv_lcd.c文件中添加DMA2D软件层面的初始化代码 ![image.png](/uploads/20201231/ce9bef960dd2f716fa1c600d19dcef08.png) 并且在drv_lcd_hw_init()函数中调用该初始化函数 ![image.png](/uploads/20201231/a37cd4c3a10c2326e760ea99babc82f2.png) 到这里,DMA2D的初始化就算是完成了,接下来要怎么用呢? 去软件包内修改littlevgl2rtt.c文件, 首先修改littlevgl2rtt_init()函数。 屏蔽掉原有的缓存buf,因为该buf取值较小,而art-pi上有使用SDRAM,拥有较大的内存空间,我们可以直接申请和屏幕像素相对应大小的缓存空间,而且申请两个,因为lvgl支持双刷buffer。 ![image.png](/uploads/20201231/4acb87a734ca5bf470407659acc01be3.png) 记得屏蔽掉原来buf申请内存空间的代码 ![image.png](/uploads/20201231/06db5a279dd95416374aa8ff0a041a2c.png) 接下来改单刷buffer为双刷buffer ![image.png](/uploads/20201231/c4fe960ce0108bc4cdebd3f00bbccd40.png) 然后改刷屏的函数,lcd_fb_flush(),将函数中的内容全部屏蔽掉,改成一下代码。 ![image.png](/uploads/20201231/b8fd0e67abd097da2ba0bfe47b56f9a1.png) 这里提供了两种DMA2D的方式,一种是中断方式,一种是轮询方式。如果使用中断方式,需要添加DMA2D中断处理函数。 ![image.png](/uploads/20201231/b546e713f40c3f68210fd6eca2c348cd.png) 两者的区别就是, 采用轮询方式的,则一直等待DMA2D传输结束,然后通过函数lv_disp_flush_ready()函数通过LVGL已经完成刷屏。 采用中断方式的,则是在中断处理函数中调用函数lv_disp_flush_ready()函数通过LVGL已经完成刷屏。 通过上述优化之后,刷屏速度大大提高。个人已经比较满意了,可以达到项目应用的要求了。当然还有更好的方法,比如自己移植LVGL而不是使用软件包,或者是直接用DMA2D寄存器操作来刷屏,这些操作都比较高级,作为初学者的我还没学会。哪天我学会了,再来分享。或者有大佬可以共享一下教程,众乐乐一下。 再次,感谢在问题解决过程中给我提供帮助的各位大佬们! 参考文档: LVGL 优化帧率技巧_无人等人的博客-CSDN博客 [https://blog.csdn.net/weixin_43862847/article/details/109318017] f429 discovery开发版 LVGL移植(带操作系统)_无人等人的博客-CSDN博客 [https://blog.csdn.net/weixin_43862847/article/details/109056321] stm32 DMA2D使用中断LVGL,提高LVGL帧率_紫枫洛天的博客-CSDN博客 [https://blog.csdn.net/a2267542848/article/details/111163633] LVGL在rt-thread上的移植 - hechunc的个人空间 - OSCHINA - 中文开源技术交流社区 https://my.oschina.net/hechunc/blog/4535663 **相关文章:** [Art-Pi学习笔记10:优化多媒体扩展板的音频驱动添加录音功能](https://club.rt-thread.org/ask/article/2872.html) [Art-Pi学习笔记9:如何使用art-pi的多媒体扩展板播放TF卡中的音乐文件](https://club.rt-thread.org/ask/article/2849.html) [Art-Pi学习笔记9:如何为Art-pi的内部flash设置读保护](https://club.rt-thread.org/ask/article/2568.html) [Art_Pi学习笔记8:使用AHT10温湿度模块](https://club.rt-thread.org/ask/article/2543.html) [Art_Pi学习笔记7:自己添加硬件定时器设备HWTIMER](https://club.rt-thread.org/ask/article/2492.html) [Art_Pi学习笔记6:驱动PWM输出](https://club.rt-thread.org/ask/article/2483.html) [Art-Pi学习笔记5_4:在littlevgl中显示二维码](https://club.rt-thread.org/ask/article/2698.html) [Art-Pi学习笔记5_3:在littlevgl软件包中显示中文字体](https://club.rt-thread.org/ask/article/2695.html) [Art_Pi学习笔记5.2:LVGL模拟器安装在VS2019上的避坑指南](https://club.rt-thread.org/ask/article/2470.html) [Art_Pi学习笔记5.1:优化LVGL软件包提高刷屏的速度](https://club.rt-thread.org/ask/article/2464.html) [Art_Pi学习笔记5:移植LittleVGL2RTT软件包驱动多媒体扩展屏](https://club.rt-thread.org/ask/article/2434.html) [Art_Pi学习笔记4:驱动多媒体扩展版的LCD和触摸功能](https://club.rt-thread.org/ask/article/2436.html) [Art_Pi学习笔记3:学习驱动wifi模块AP6212](https://club.rt-thread.org/ask/article/2429.html) [Art_Pi学习笔记2:驱动片外SPI_FLASH_W25Q128](https://club.rt-thread.org/ask/article/2423.html) [Art-Pi学习笔记1:驱动SDIO和USB设备做TF读卡器](https://club.rt-thread.org/ask/article/2417.html)
15
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
adaphoto
这家伙很懒,什么也没写!
文章
25
回答
44
被采纳
5
关注TA
发私信
相关文章
1
LittlevGL + DMA2D 显示图案扭曲
2
LittleVGL2RTT软件包还有在维护吗,测试遇到一些问题求解
3
使用littlevgl2rtt软件包实例运行不成功,emwin正常
4
关于littlevgl2rtt软件包刷频慢的解决方案?
5
移植了littlevGUI之后,用动态 线程去跑例程会卡死
6
lvgl的字体、图片文件如何升级?
7
qemu-vexpress-a9bsp下的littvgl工程可以实现触屏操作吗?
8
LVGL控件刷新死机问题
9
在lvgl上设置一个时间显示的label,一段时间后所有控件消失。
10
littlevgl2rtt和littlevgl的pc模拟器源码不兼容吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部