LVGL按键水平滚动有很大的撕裂感,但是垂直滚动就没有,这是为啥
LVGL按键水平滚动有很大的撕裂感,但是垂直滚动就没有,这是为啥垂直滚动是正常的。刷新模式采用的是单缓冲模式,刷新的buf给到整个屏幕 这个是什么驱动方式。RGB屏还是外置控制器的。 eric2013 发表于 2023-12-22 08:54
这个是什么驱动方式。RGB屏还是外置控制器的。
SPI驱动的RGB屏幕 SPI驱动的RGB屏幕
LVGL在一个240*320的SPI驱动的串口屏中,假如是刷屏模式一,刷屏缓冲只有屏幕的1/10,这样情况下,连普通的几个按键水平滚动都会卡吗?
这是SPI的频率 这是SPI频率 ligl 发表于 2023-12-22 09:51
这是SPI频率
你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。 eric2013 发表于 2023-12-22 10:21
你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。
他这个屏幕控制器是ILI9342的也是这样吗?那一般用什么串口屏幕哇? 屏幕写时钟才10M啊,240*320分辨率这个时钟速度太慢了,算下来整屏的极限刷屏速度才8FPS
感觉应该是刷屏速度太慢导致的撕裂,换个写时钟更快的屏可能要好些 DX3906 发表于 2023-12-22 11:59
屏幕写时钟才10M啊,240*320分辨率这个时钟速度太慢了,算下来整屏的极限刷屏速度才8FPS
感觉应该是刷屏速 ...
我想问一下,屏幕写时钟是10MHZ,但是我MCU配置SPI输出频率达到40MHZ,为啥通讯不会出错呢? eric2013 发表于 2023-12-22 10:21
你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。
找了几天有个比较好的方案:MCU等待屏幕的TE引脚来避免这种撕裂,不知道这个方案怎么样? ligl 发表于 2023-12-22 16:18
我想问一下,屏幕写时钟是10MHZ,但是我MCU配置SPI输出频率达到40MHZ,为啥通讯不会出错呢?
那就不太清楚了,可能手册留了余量之类的吧
40M对应的极限帧率大概是32FPS,我记得9341的默认刷新率是70Hz,9342应该也差不多,可以找下手册有没有调整刷新率的寄存器,把刷新率调到接近32的两倍可能会有些改善
mcu这边也可以优化下,用spi dma发送,lvgl试试用非全屏的双缓冲 ligl 发表于 2023-12-23 15:42
找了几天有个比较好的方案:MCU等待屏幕的TE引脚来避免这种撕裂,不知道这个方案怎么样?
这个方案相当可行,ST官方在G071RBT6上运行TouchGFX上就是这么干的,那个模组的屏也是240x320的SPI屏,利用TE产生的外部中断信号为TouchGFX提供时钟,具体的效果你可以上网搜搜,ST官网是有这个演示视频的,LVGL的话因为底层刷屏机制和TouchGFX不太一样,可能还需要楼主额外研究一下 kmxm 发表于 2023-12-26 13:26
这个方案相当可行,ST官方在G071RBT6上运行TouchGFX上就是这么干的,那个模组的屏也是240x320的SPI屏,利 ...
他这个TE引脚,怎么来判断显示屏那边已经读完了? #### 撕裂造成原因:
LCD控制器,读写速度不同,LCD控制器还未读取完数据到显示屏上显示,MCU就发下一帧数据;
数据会产生错位,造成撕裂。读的太快也会。
#### 解决方法(如果你屏幕没有TE引脚,就不要想了)
- 1、起初去LVGL官网论坛找对应撕裂问题,没有一个完全答案,不过浏览了一些相关知识点,为后面解决问题提供了思路。
- 2、在网上看相关论坛,寻找解决方案,未果。在硬汉论坛上,发表自己的问题,论坛老大说解决不了。
- 3、后面实在解决不了,找厂商询问,厂商说屏幕想要竖屏横用,不产生撕裂效果的话,可以将屏幕的TE引脚引处理。
- 4、TE引脚的作用:屏幕刷完一帧之后,会在这个引脚上产生一个方波信号,供MCU读取。
- 5、知道TE引脚的作用之后,将MCU对应连TE的引脚配置成双沿触发中断。
- 6、修改屏幕的驱动:a、打开屏幕的TE功能(35H),无需写数据参数。b、添加扫描多少行后产生一个TE方波(44H),数据参数为行数(如果图形库采用的是LVGL,这个值要跟LVGL刷新buf的大小要一致,LVGL刷新buf多少行,这里44就是多少行),注意分高低位;具体看规格书说明。
- 6、屏幕发送完数据之后,等待TE方波到来,之后再发送下一帧数据。具体操作在中断回调函数里面配置;可用标志位,在LVGL回调函数flush_cb中,要等待这个这个标志之后,在进行发送数据,可以使用DMA,效果更号。
最后:撕裂问题是解决了,但是如果你的刷新帧行数太小的话,会让人感觉动画效果很慢。所以LVGL刷新buf可以给大一点。看情况定。
OK,撕裂问题拜拜。 ligl 发表于 2024-1-11 18:21
#### 撕裂造成原因:
LCD控制器,读写速度不同,LCD控制器还未读取完数据到显示屏上显示,MCU就发下 ...
谢谢分享,实际上这个TE只能缓解,不能完全解决撕裂。
这个非常考验刷新速度和TE信号的同步配合。
这个帖子的TouchGFX视频展示就是前面坛友说的G0利用TE的局部缓冲方式。
Embedded Wizard和TouchGFX在STM32G0上的刷新效果对比
https://www.armbbs.cn/forum.php?mod=viewthread&tid=107882
ligl 发表于 2024-1-11 18:21
#### 撕裂造成原因:
LCD控制器,读写速度不同,LCD控制器还未读取完数据到显示屏上显示,MCU就发下 ...
不行,换个屏幕就又有撕裂了, eric2013 发表于 2024-1-11 18:43
谢谢分享,实际上这个TE只能缓解,不能完全解决撕裂。
这个非常考验刷新速度和TE信号的同步配合。
利用TE局部缓冲的方式,怎么利用到LVGL哇?:handshake
页:
[1]