硬汉嵌入式论坛

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

[LTDC] 避免STM32H7的LTDC刷新撕裂感的解决办法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2019-4-2 01:34:07 | 显示全部楼层 |阅读模式
优先看此贴了解垂直消隐和水平消隐:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93133


如果用户快速刷新颜色差异比较大两种界面效果,容易遇到这种撕裂问题。

出现这个问题的原因:
用户更新显存数据期间,LTDC(H7带的LCD控制器)也在不断的读取显存的数据到显示屏上,如果用户才更新了部分界面数据,后面部分还没有更新,LTDC刷新到显示屏的界面效果出现撕裂感,即下面这种现象:

QQ截图20190402012908.jpg


解决这个问题的办法:
LTDC刷新还在垂直消隐期间就将整个界面刷新完成,而我们如何只知道LTDC在垂直消隐期,通过函数HAL_LTDC_ProgramLineEvent设置刷新到指定行时进入中断即可,一般设置为第0行进入中断,然后设置个标志即可。

一旦检测到这个标志,就通过DMA2D快速将界面刷新好,这样就有效的避免了撕裂感。





回复

使用道具 举报

32

主题

187

回帖

283

积分

高级会员

积分
283
发表于 2019-4-2 10:06:38 | 显示全部楼层
F429也有吧,但实际的效果还是有撕裂感,比如创建两个内存设备,快速切换还是会有轻微撕裂
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
 楼主| 发表于 2019-4-2 10:49:08 | 显示全部楼层
loliko 发表于 2019-4-2 10:06
F429也有吧,但实际的效果还是有撕裂感,比如创建两个内存设备,快速切换还是会有轻微撕裂

裸机下比较好控制。

emWin下略麻烦,要保证每个消隐期都可以及时切换到新的缓冲,如果做不到就会有撕裂。
回复

使用道具 举报

32

主题

187

回帖

283

积分

高级会员

积分
283
发表于 2019-4-2 10:55:24 | 显示全部楼层
eric2013 发表于 2019-4-2 10:49
裸机下比较好控制。

emWin下略麻烦,要保证每个消隐期都可以及时切换到新的缓冲,如果做不到就会有撕 ...

应该怎么“保证每个消隐期都可以及时切换到新的缓冲”呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
 楼主| 发表于 2019-4-2 10:58:07 | 显示全部楼层
loliko 发表于 2019-4-2 10:55
应该怎么“保证每个消隐期都可以及时切换到新的缓冲”呢?

暂时无解。
使用32bit SDRAM配合emWin的三缓冲会好很多。

另外就是两个存储设备的快速切换尽量少用,emWin应该没有对这种情况进行处理。
回复

使用道具 举报

32

主题

187

回帖

283

积分

高级会员

积分
283
发表于 2019-4-2 11:15:58 | 显示全部楼层
eric2013 发表于 2019-4-2 10:58
暂时无解。
使用32bit SDRAM配合emWin的三缓冲会好很多。

回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2021-10-28 13:55:39 | 显示全部楼层
硬汉兄,这里有个疑问:
为了能够在垂直消隐期间将整个界面刷新好,不是应该设置为最后一行 进入中断吗?
因为垂直消隐期是在最后一行结束到第一行开始之间;
为什么一般设置为第0行进入中断?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
 楼主| 发表于 2021-10-28 13:59:22 | 显示全部楼层
hot_springs 发表于 2021-10-28 13:55
硬汉兄,这里有个疑问:
为了能够在垂直消隐期间将整个界面刷新好,不是应该设置为最后一行 进入中断吗?
...

可以的,最后一行也非常合适。
回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2021-10-30 15:57:45 | 显示全部楼层
自己写的UI,用的双缓冲每次刷完一整屏然后修改CFBAR后设置为 垂直消隐重载。完全没有撕裂感。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 12:50 , Processed in 0.249544 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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