STM32F429及F7,H7内部集成了LTDC寄存器,直接驱动RGB LCD。但在使用中发现屏幕整体右移的现象。
# F. v7 l% H+ ]/ e查找了一番,发现是LTDC的一些相关参数没有配置好的问题。. L% H3 o- [# y/ f6 R3 S
在LTDC初始化中,如下:
6 Q+ t4 u' g/ z, B* y- //DIY的 320X240 RGB屏幕 ' X% P6 e, N/ K2 R2 k
- lcdltdc.pwidth=320; //面板宽度,单位:像素
, a" w, {3 c% a# B Y0 F - lcdltdc.pheight=240; //面板高度,单位:像素
, A) W' @6 _) p# R" H; J - // lcdltdc.hsw=32; //水平同步宽度
( r! H/ B! g$ b# S. \ - // lcdltdc.vsw=1; //垂直同步宽度
2 D, X- O( b: @" j- t& u% _ - // lcdltdc.hbp=68; //水平后廊
# M+ j5 I2 {& r2 n" F, X - // lcdltdc.vbp=18; //垂直后廊) T( Y$ Q* G! R
- // lcdltdc.hfp=20; //水平前廊
?% p' w' h% L h - // lcdltdc.vfp=3; //垂直前廊9 Z8 o ], w( Q) B% L; K
-
2 X/ p! r0 F5 O$ h. n, d - lcdltdc.hsw=2; //水平同步宽度" g* m. {6 i2 t# m: u
- lcdltdc.vsw=1; //垂直同步宽度1 J* t3 ?9 I" N' W
- lcdltdc.hbp=68; //水平后廊& p! i' h1 x2 \" A+ o" f
- lcdltdc.vbp=17; //垂直后廊- ]. e4 H6 V7 |$ E7 W
- lcdltdc.hfp=20; //水平前廊
/ Y; r8 z' |2 X5 P4 Y6 C - lcdltdc.vfp=0; //垂直前廊
! m. { M( f4 Y( a# b -
9 `. D: o- J0 e2 c$ J! P - LTDC_Clk_Set(288,4,RCC_PLLSAIDIVR_8); //设置像素时钟 9Mhz
复制代码 2 O( m/ `: O( K$ V: ]
2 \2 P* m7 g K t
注释掉的是之前的配置,后经反复修正查看,更新为新的配置。2 O. f" Z* J2 U1 X1 o8 O7 o- d
具体原理,来着网上一个网友的思路:& @ J! z& M, U6 G" `7 t, Q& M' F
正常的TFT一行的显示周期是 前消隐+实际点输出+后消隐
, o+ g" Q, ^) N! wHBP、HFP 代表前后消隐所需要的周期
" [6 m; T- L9 L如果前消隐设置小了,后消隐设置大了,LCD控制器的实际输出就会被当做消隐而不会实际显示出来,看到的效果就是图像左移,反之图像右移 8 R2 g4 L+ G0 A& d' P6 S: ?; ^8 H
如果前后消隐都设置小了,理论上第二行的图像可能会被当做第一行的图像显示,照成屏幕歪斜不同步,但是有些TFT中内部的时序电路会自动补上缺少的时钟,所以也不一定会看到不同步的画面% P% V, I" V# e2 ]# V
场的消隐同理. j6 B$ i. ~# O5 N2 F( M) |
至于为什么要消隐是为了兼容CRT显示器的显示原理,CRT显示器每一个扫描行完成后,电子枪需要回扫,这段时间不能显示,所以这段时间的视频信号需要暂停一下,就是消隐. | 其中发现有时候即便调整的没有白边,但是图像闪烁明细,后增加前后整体时间,闪烁消失。遂好!
( Y W, b& B: {0 {2 P S* y非常感谢这位兄弟!
2 o! Z- t. i4 w+ N
n$ t$ h: }, B1 V5 |- a4 u6 n |