F429驱动TFT裸屏时LTDC时序配置说明(以V6的7寸驱动为例)
说明:
1. 经常有兄弟问到这个问题,所有这里就写一个帖子。
2. 基础知识学习:
TFT LCD的DE模式和HV模式的区别:http://bbs.armfly.com/read.php?tid=18525
3. 7寸RGB屏规格书
7寸屏高亮(800x480)GL070009T0-40 3.5H.pdf (564 K)
7寸RGB屏使用的source driver ic OTA7001手册 DATA_SHEET_OTA7001A_V06.pdf (914 K)
(下载地址:http://bbs.armfly.com/read.php?tid=18528)
(下载地址:http://bbs.armfly.com/read.php?tid=18528)
(下载地址:http://bbs.armfly.com/read.php?tid=18528)
======================================================
LTDC时序配置主要分三步就可以完成
1. 行同步,场同步,DE的极性配置
2 CLK时钟配置
3. 时序参数配置。
下面分别简单的说明下
======================================================
1. 行同步,场同步,DE的极性配置
这个的配置要看OTA7001手册上面的时序图,对于DE模式,行同步和场同步的极性配置为高或者为低均可。 我们这里使用的就是DE模式。所以主要配置DE的极性,这里要特别注意一个小问题,看时序图是DE高电平时数据有效,但是配置的时候要设置为低电平才可以。
下面的是V6开发板配套的7寸裸屏使用的source driver ic OTA7001
实际配置F429的工程时,将DE配置为低有效才是上面截图的效果,这个问题的确是有些奇葩了。
大家使用的时候也特别注意。
/* 配置信号极性 */
LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL; /* HSYNC 低电平有效 */
LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL; /* VSYNC 低电平有效 */
LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL; /* DE 低电平有效 */
LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;
================================================
上面黄色的波形是DE信号,下面的是行同步信号HSync
下面是将信号水平放缩了下
===========================================================
2. 时钟的配置
关于LTDC可以输出多大的时钟,在OTA7001手册上面有说明,通过函数
RCC_PLLSAIConfig(420, 2, 7);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div2); 配置即可,配置的大小是多少呢,简单举个例子
--------------------------------
上面的配置中PLLSAI_N = 420, PLLSAI_R = 7 , RCC_PLLSAIDivR = 2:
首先,输入时钟 PLLSAI_VCO Input = HSE_VALUE / PLL_M = 8M / 8 = 1MHz
输出时钟 PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 1 * 400 = 420MHz
PLLLCDCLK = PLLSAI_VCO Output / PLLSAI_R = 420 / 7 = 60MHz
最后,LTDC 时钟 = PLLLCDCLK / RCC_PLLSAIDivR = 60/ 2 = 30MHz
===========================================================
3. 时序参数配置
时序参数的配置也比较容易,其实就是先看F429参考手册上面的公式说明,说是公式,其实就是简单的加减法。然后将OTA7001的参数带到这个公式就OK了。又因为手册一般都是给出了参数的最小值,典型值和最大值,大家可以根据实际情况做简单的调整即可。需要用到的参数
uint16_t Width, Height, HSYNC_W, VSYNC_W, HBP, HFP, VBP, VFP;
* Horizontal Synchronization (Hsync) 对应后面的变量HSYNC_W
* Horizontal Back Porch (HBP) 对应后面的变量HBP
* Active Width 对应后面的变量Width
* Horizontal Front Porch (HFP) 对应后面的变量HFP
*
* Vertical Synchronization (Vsync) 对应后面的变量VSYNC_W
* Vertical Back Porch (VBP) 对应后面的变量VBP
* Active Heigh 对应后面的变量Heigh
* Vertical Front Porch (VFP) 对应后面的变量VFP
----------------------------------------------
3.1 F429参考手册上面的公式
---------------------------------------------------
3.2 从OTA7001上面获取这些参数
---------------------------------------------------
3.3 配置如下参数
通过这些参数,直接给变量赋值,我们这里直接取典型值,如果大家实际测试的时候效果不是很好,怎么知道效果不好呢,最简单的方式就是可以在显示屏的边界显示一个方框,看看是否有错位。
---------------------------------------------------
3.4 参数设置好了,直接带公式并跟行同步,场同步和DE一起初始化
/* 配置LTDC的同步时序 */
LTDC_InitStruct.LTDC_HorizontalSync = HSYNC_W;
LTDC_InitStruct.LTDC_VerticalSync = VSYNC_W;
LTDC_InitStruct.LTDC_AccumulatedHBP = LTDC_InitStruct.LTDC_HorizontalSync + HBP;
LTDC_InitStruct.LTDC_AccumulatedVBP = LTDC_InitStruct.LTDC_VerticalSync + VBP;
LTDC_InitStruct.LTDC_AccumulatedActiveW = Width + LTDC_InitStruct.LTDC_AccumulatedHBP;
LTDC_InitStruct.LTDC_AccumulatedActiveH = Height + LTDC_InitStruct.LTDC_AccumulatedVBP;
LTDC_InitStruct.LTDC_TotalWidth = LTDC_InitStruct.LTDC_AccumulatedActiveW + HFP;
LTDC_InitStruct.LTDC_TotalHeigh = LTDC_InitStruct.LTDC_AccumulatedActiveH + VFP;
LTDC_Init(<DC_InitStruct);