ligl 发表于 2023-12-21 12:27:54

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

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

ligl 发表于 2023-12-21 12:28:58

垂直滚动是正常的。刷新模式采用的是单缓冲模式,刷新的buf给到整个屏幕

eric2013 发表于 2023-12-22 08:54:36

这个是什么驱动方式。RGB屏还是外置控制器的。

ligl 发表于 2023-12-22 09:33:48

eric2013 发表于 2023-12-22 08:54
这个是什么驱动方式。RGB屏还是外置控制器的。

SPI驱动的RGB屏幕

ligl 发表于 2023-12-22 09:34:35

SPI驱动的RGB屏幕

ligl 发表于 2023-12-22 09:44:59

LVGL在一个240*320的SPI驱动的串口屏中,假如是刷屏模式一,刷屏缓冲只有屏幕的1/10,这样情况下,连普通的几个按键水平滚动都会卡吗?

ligl 发表于 2023-12-22 09:49:48

这是SPI的频率

ligl 发表于 2023-12-22 09:51:25

这是SPI频率

eric2013 发表于 2023-12-22 10:21:30

ligl 发表于 2023-12-22 09:51
这是SPI频率

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

ligl 发表于 2023-12-22 10:28:18

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

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

DX3906 发表于 2023-12-22 11:59:22

屏幕写时钟才10M啊,240*320分辨率这个时钟速度太慢了,算下来整屏的极限刷屏速度才8FPS
感觉应该是刷屏速度太慢导致的撕裂,换个写时钟更快的屏可能要好些

ligl 发表于 2023-12-22 16:18:25

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

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

ligl 发表于 2023-12-23 15:42:04

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

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

DX3906 发表于 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试试用非全屏的双缓冲

kmxm 发表于 2023-12-26 13:26:41

ligl 发表于 2023-12-23 15:42
找了几天有个比较好的方案:MCU等待屏幕的TE引脚来避免这种撕裂,不知道这个方案怎么样?

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

ligl 发表于 2024-1-8 11:11:28

kmxm 发表于 2023-12-26 13:26
这个方案相当可行,ST官方在G071RBT6上运行TouchGFX上就是这么干的,那个模组的屏也是240x320的SPI屏,利 ...

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

ligl 发表于 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,撕裂问题拜拜。

eric2013 发表于 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

ligl 发表于 2024-1-16 09:32:03

ligl 发表于 2024-1-11 18:21
#### 撕裂造成原因:
   
LCD控制器,读写速度不同,LCD控制器还未读取完数据到显示屏上显示,MCU就发下 ...

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

ligl 发表于 2024-1-16 09:33:48

eric2013 发表于 2024-1-11 18:43
谢谢分享,实际上这个TE只能缓解,不能完全解决撕裂。

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


利用TE局部缓冲的方式,怎么利用到LVGL哇?:handshake
页: [1]
查看完整版本: LVGL按键水平滚动有很大的撕裂感,但是垂直滚动就没有,这是为啥