STM32F429ZI 100引脚 驱动RGB666 LTDC
本帖最后由 xiaolingoei 于 2019-3-22 10:16 编辑之前用STM32F429IGT6(176pin)成功驱动过RGB565,和RGB888的显示屏,现在要用STM32F429ZI(100pin)驱动RGB666,我的思路是直接用RGB565的驱动,改一下对应的引脚,以及根据屏幕datasheet配置一下参数。没想到,没有成功驱动显示屏,完全不亮。(驱动程序是按照秉火书上改的)
目前下载程序后,屏幕没有任何反应,不知道是思路上有问题,还是程序配置上有问题,麻烦各位大佬看看了!
用的是TIANMA的显示屏,具体型号是TM057QDH01,SYNC mode下的参数如下图所示:
1、根据上图,配置LTDC的参数如下:
CLK 25M
HSW 1
VSW 1
HBP 144
VBP 35
HFP 16
VFP 10
<p>//2.使用LTDC初始化结构体,配置液晶屏的控制参数
static void LCD_Mode_Config(void)
{
LTDC_InitTypeDef LTDC_InitTypeStruct;
RCC_PLLSAIConfig(200,20,2);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);
RCC_PLLSAICmd(ENABLE);
//等待RCC时钟使能完成
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC,ENABLE);
//引脚极性
LTDC_InitTypeStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL; //HSYNC低电平有效
LTDC_InitTypeStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL; //VSYNC低电平有效
LTDC_InitTypeStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL; //DE低电平有效
LTDC_InitTypeStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;//上升沿采集数据
//时间参数
LTDC_InitTypeStruct.LTDC_HorizontalSync = HSW - 1;
LTDC_InitTypeStruct.LTDC_VerticalSync = VSW - 1;
LTDC_InitTypeStruct.LTDC_AccumulatedHBP = HSW + HBP - 1;
LTDC_InitTypeStruct.LTDC_AccumulatedVBP = VSW + VBP - 1;
LTDC_InitTypeStruct.LTDC_AccumulatedActiveW = HSW + HBP + LCD_WIDTH - 1;
LTDC_InitTypeStruct.LTDC_AccumulatedActiveH = VSW + VBP + LCD_HEIGHT - 1;
LTDC_InitTypeStruct.LTDC_TotalWidth =HSW + HBP + LCD_WIDTH + HFP - 1;
LTDC_InitTypeStruct.LTDC_TotalHeigh =VSW + VBP + LCD_HEIGHT +VFP - 1;
//配置底层颜色,全0为黑,全255为白
LTDC_InitTypeStruct.LTDC_BackgroundRedValue = 0;
LTDC_InitTypeStruct.LTDC_BackgroundGreenValue = 0;
LTDC_InitTypeStruct.LTDC_BackgroundBlueValue = 0;
LTDC_Init(<DC_InitTypeStruct);
}
//3.使用LTDC的层级初始化结构体,配置各层的控制参数
static void LCD_Layer_Init(void)
{
LTDC_Layer_InitTypeDefLTDC_Layer_InitTypeStruct;
//配置层级输出窗口
LTDC_Layer_InitTypeStruct.LTDC_HorizontalStart = HBP + HSW;
LTDC_Layer_InitTypeStruct.LTDC_HorizontalStop = HSW + HBP + LCD_WIDTH - 1;
LTDC_Layer_InitTypeStruct.LTDC_VerticalStart = VBP + VSW;
LTDC_Layer_InitTypeStruct.LTDC_VerticalStop =VSW + VBP + LCD_HEIGHT - 1;
LTDC_Layer_InitTypeStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
//0为透明,0xFF为不透明
LTDC_Layer_InitTypeStruct.LTDC_ConstantAlpha = 0xFF;
LTDC_Layer_InitTypeStruct.LTDC_DefaultColorRed = 0;
LTDC_Layer_InitTypeStruct.LTDC_DefaultColorGreen = 0;
LTDC_Layer_InitTypeStruct.LTDC_DefaultColorBlue = 0;
LTDC_Layer_InitTypeStruct.LTDC_DefaultColorAlpha = 0;
//混合因子
LTDC_Layer_InitTypeStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;
LTDC_Layer_InitTypeStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;
//配置显存相关的参数
LTDC_Layer_InitTypeStruct.LTDC_CFBStartAdress = LCD_LAYER1_START_ADDR;
LTDC_Layer_InitTypeStruct.LTDC_CFBLineLength = LCD_WIDTH * 2 + 3;
LTDC_Layer_InitTypeStruct.LTDC_CFBLineNumber = LCD_HEIGHT;
LTDC_Layer_InitTypeStruct.LTDC_CFBPitch = LCD_WIDTH * 2;
LTDC_LayerInit(LTDC_Layer1,<DC_Layer_InitTypeStruct);
//配置第二层
LTDC_Layer_InitTypeStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB8888;
//混合因子
LTDC_Layer_InitTypeStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;
LTDC_Layer_InitTypeStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
//配置显存相关的参数
LTDC_Layer_InitTypeStruct.LTDC_CFBStartAdress = LCD_LAYER2_START_ADDR;
LTDC_Layer_InitTypeStruct.LTDC_CFBLineLength = LCD_WIDTH * 4 + 3;
LTDC_Layer_InitTypeStruct.LTDC_CFBLineNumber = LCD_HEIGHT;
LTDC_Layer_InitTypeStruct.LTDC_CFBPitch = LCD_WIDTH * 4;
LTDC_LayerInit(LTDC_Layer2,<DC_Layer_InitTypeStruct);
//使能两层数据源
LTDC_LayerCmd(LTDC_Layer1,ENABLE);
LTDC_LayerCmd(LTDC_Layer2,ENABLE);
//更新配置参数
LTDC_ReloadConfig(LTDC_IMReload);
//使能抖动单元
LTDC_DitherCmd(ENABLE);
//使能LTDC
LTDC_Cmd(ENABLE);
}</p>
驱动LTDC需要外扩SDRAM缓存的。 wenyangzeng 发表于 2019-3-22 10:31
驱动LTDC需要外扩SDRAM缓存的。
SDRAM没有任何问题,已经读写字节驱动成功了。不好意思,刚刚没有说显存没有问题:L 本帖最后由 toofree 于 2019-3-22 12:41 编辑
背光有吧?电源、信号线接的都没错吧?
DE应该是高有效这种屏有HS/VS模式和DE模式,一般会有个管脚选择的。
如果没有管脚选择的话,接HS、VS时,不要接DE;接DE的话,不要接HS、VS。
toofree 发表于 2019-3-22 12:37
背光有吧?电源、信号线接的都没错吧?
DE应该是高有效这种屏有HS/VS模式和DE模式,一般会有个管脚选择的。 ...
背光部分直接拉低了(全黑),选择的是SYNC模式,没有选择DE模式。不好意思哈......经验不够,没有说清楚,我现在在拿示波器看HS和VS波形。 本帖最后由 xiaolingoei 于 2019-3-22 16:25 编辑
根据测量发现了一个BUG。通过分频得到的CLK应该是25M,实际上示波器测出来的却是16.667M,这块屏的驱动CLK 24.8-34.2M。
target中的设置如下:
并且使用了自带的库函数的设置函数:
HSE_SetSysClock(25,360,2,8);
将频率基准定为了25M;
根据计算,我的LTCD时钟分频后得到的CLK也应该是25M。不知道这个BUG是怎么来的?
页:
[1]