硬汉嵌入式论坛

 找回密码
 立即注册
查看: 920|回复: 19
收起左侧

[LVGL] LVGL按键水平滚动有很大的撕裂感,但是垂直滚动就没有,这是为啥

[复制链接]

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2023-12-21 12:27:54 | 显示全部楼层 |阅读模式
LVGL按键水平滚动有很大的撕裂感,但是垂直滚动就没有,这是为啥

水平滚动

水平滚动
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-21 12:28:58 | 显示全部楼层
垂直滚动是正常的。刷新模式采用的是单缓冲模式,刷新的buf给到整个屏幕
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2023-12-22 08:54:36 | 显示全部楼层
这个是什么驱动方式。RGB屏还是外置控制器的。
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 09:33:48 | 显示全部楼层
eric2013 发表于 2023-12-22 08:54
这个是什么驱动方式。RGB屏还是外置控制器的。

SPI驱动的RGB屏幕
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 09:34:35 | 显示全部楼层
SPI驱动的RGB屏幕
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 09:44:59 | 显示全部楼层
LVGL在一个240*320的SPI驱动的串口屏中,假如是刷屏模式一,刷屏缓冲只有屏幕的1/10,这样情况下,连普通的几个按键水平滚动都会卡吗?
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 09:49:48 | 显示全部楼层
这是SPI的频率
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 09:51:25 | 显示全部楼层
这是SPI频率
mmexport1703209249529.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2023-12-22 10:21:30 | 显示全部楼层

你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 10:28:18 | 显示全部楼层
eric2013 发表于 2023-12-22 10:21
你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。

他这个屏幕控制器是ILI9342的也是这样吗?那一般用什么串口屏幕哇?
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2023-12-22 11:59:22 | 显示全部楼层
屏幕写时钟才10M啊,240*320分辨率这个时钟速度太慢了,算下来整屏的极限刷屏速度才8FPS
感觉应该是刷屏速度太慢导致的撕裂,换个写时钟更快的屏可能要好些
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-22 16:18:25 | 显示全部楼层
DX3906 发表于 2023-12-22 11:59
屏幕写时钟才10M啊,240*320分辨率这个时钟速度太慢了,算下来整屏的极限刷屏速度才8FPS
感觉应该是刷屏速 ...

我想问一下,屏幕写时钟是10MHZ,但是我MCU配置SPI输出频率达到40MHZ,为啥通讯不会出错呢?
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2023-12-23 15:42:04 | 显示全部楼层
eric2013 发表于 2023-12-22 10:21
你这个是类似9488,7789之类的系列SPI屏吗,这个解决不了,这种显示屏就是这样的。无法避开撕裂问题。

找了几天有个比较好的方案:MCU等待屏幕的TE引脚来避免这种撕裂,不知道这个方案怎么样?
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2023-12-26 09:01:54 | 显示全部楼层
ligl 发表于 2023-12-22 16:18
我想问一下,屏幕写时钟是10MHZ,但是我MCU配置SPI输出频率达到40MHZ,为啥通讯不会出错呢?

那就不太清楚了,可能手册留了余量之类的吧
40M对应的极限帧率大概是32FPS,我记得9341的默认刷新率是70Hz,9342应该也差不多,可以找下手册有没有调整刷新率的寄存器,把刷新率调到接近32的两倍可能会有些改善
mcu这边也可以优化下,用spi dma发送,lvgl试试用非全屏的双缓冲
回复

使用道具 举报

10

主题

40

回帖

70

积分

初级会员

积分
70
发表于 2023-12-26 13:26:41 | 显示全部楼层
ligl 发表于 2023-12-23 15:42
找了几天有个比较好的方案:MCU等待屏幕的TE引脚来避免这种撕裂,不知道这个方案怎么样?

这个方案相当可行,ST官方在G071RBT6上运行TouchGFX上就是这么干的,那个模组的屏也是240x320的SPI屏,利用TE产生的外部中断信号为TouchGFX提供时钟,具体的效果你可以上网搜搜,ST官网是有这个演示视频的,LVGL的话因为底层刷屏机制和TouchGFX不太一样,可能还需要楼主额外研究一下
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2024-1-8 11:11:28 | 显示全部楼层
kmxm 发表于 2023-12-26 13:26
这个方案相当可行,ST官方在G071RBT6上运行TouchGFX上就是这么干的,那个模组的屏也是240x320的SPI屏,利 ...

他这个TE引脚,怎么来判断显示屏那边已经读完了?
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2024-1-11 18:21:22 | 显示全部楼层
#### 撕裂造成原因:
   
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,撕裂问题拜拜。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2024-1-11 18:43:38 | 显示全部楼层
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

回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2024-1-16 09:32:03 | 显示全部楼层
ligl 发表于 2024-1-11 18:21
#### 撕裂造成原因:
   
LCD控制器,读写速度不同,LCD控制器还未读取完数据到显示屏上显示,MCU就发下 ...

不行,换个屏幕就又有撕裂了,
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2024-1-16 09:33:48 | 显示全部楼层
eric2013 发表于 2024-1-11 18:43
谢谢分享,实际上这个TE只能缓解,不能完全解决撕裂。

这个非常考验刷新速度和TE信号的同步配合。

利用TE局部缓冲的方式,怎么利用到LVGL哇?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 20:02 , Processed in 0.243919 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表