阿里兄 发表于 2019-12-20 15:07:49

LTDC—驱动RGB TFT屏显示

LTDC—驱动RGB TFT屏显示一些注意事项,后面直接看代码
1、STM32F750Z8在使用了SDRAM后,最多只能驱动RGB666。
2、LCD有闪烁,可适当提高LTDC时钟频率,如果LTDC时钟过高,则LCD可能花屏。
3、LTDC比较好配置,直接从手删除拿来参数填上即可。
4、LTDC显示需要用到SDRAM,SDRAM需在LTDC前初始化好。


LTDC初始化
void MX_LTDC_Init(void)
{
LTDC_LayerCfgTypeDef pLayerCfg = {0};

hltdc.Instance = LTDC;
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc.Init.HorizontalSync = 19;
hltdc.Init.VerticalSync = 9;
hltdc.Init.AccumulatedHBP = 65;
hltdc.Init.AccumulatedVBP = 32;
hltdc.Init.AccumulatedActiveW = 865;
hltdc.Init.AccumulatedActiveH = 512;
hltdc.Init.TotalWidth = 881;
hltdc.Init.TotalHeigh = 519;
hltdc.Init.Backcolor.Blue = 0;
hltdc.Init.Backcolor.Green = 0;
hltdc.Init.Backcolor.Red = 0;
if (HAL_LTDC_Init(&hltdc) != HAL_OK)
{
    Error_Handler();
}
pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = 800;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 480;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress = 0xC0000000;
pLayerCfg.ImageWidth = 800;
pLayerCfg.ImageHeight = 480;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
    Error_Handler();
}

}

LTDC刷屏测试
uint32_t tft_vram __attribute__((at(0xC0000000)));

void LTDC_Clear(uint32_t color)
{
    for ( int y = 0 ; y < 480 ; y++ )
    {
      for ( int x = 0 ; x < 800 ; x++ )
      {
            tft_vram = color;
      }
    }
}
void LTDC_Test(void)
{
        uint32_t color;
    while ( 1 )
    {
      HAL_Delay(2000);
                color = rand();
                //printf("color:%x\r\n",color);
                LTDC_Clear(color);
    }
}

CUBEMX配置



工程代码:
页: [1]
查看完整版本: LTDC—驱动RGB TFT屏显示