初始化LTDC

发布时间 2023-10-05 23:23:04作者: Yannnnnnn

1,初始化GPIO

2.LTDC初始化

void BSP_LTDC_Init(void)
{
    /*LTDC 像素时钟域 通过PLLSAI进行配置*/
    RCC_PLLSAIConfig(200, 20, 2);
    RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);
    RCC_PLLSAICmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET);
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE);
    
    LTDC_InitTypeDef LTDC_InitStruct;
    /*同步信号极性*/
    LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;//行同步信号 HSYNC 极性
    LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;//列同步极性
    LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;//数据使能极性
    LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;//时钟采样边沿
    /*LTDC同步时序*/
    LTDC_InitStruct.LTDC_HorizontalSync = HSW-1;//行同步信号宽度
    LTDC_InitStruct.LTDC_VerticalSync =   VSW-1;//垂直同步信号宽度
    LTDC_InitStruct.LTDC_AccumulatedHBP = HSW + HBP - 1;
    LTDC_InitStruct.LTDC_AccumulatedVBP = VSW + VBP - 1;
    LTDC_InitStruct.LTDC_AccumulatedActiveW = HSW+HBP+LCD_PIXEL_WIDTH -1;
    LTDC_InitStruct.LTDC_AccumulatedActiveH = VSW+VBP+LCD_PIXEL_HEIGHT -1;
    LTDC_InitStruct.LTDC_TotalWidth = HSW+ HBP+LCD_PIXEL_WIDTH  + HFP -1;
    LTDC_InitStruct.LTDC_TotalHeigh = VSW+ VBP+LCD_PIXEL_HEIGHT  + VFP -1;
    /*背景色*/
    LTDC_InitStruct.LTDC_BackgroundRedValue = 0x00;
    LTDC_InitStruct.LTDC_BackgroundGreenValue = 0x00;
    LTDC_InitStruct.LTDC_BackgroundBlueValue = 0xFF;
    LTDC_Init(&LTDC_InitStruct);

    LTDC_Cmd(ENABLE);
}
void BSP_LCD_Layer_Init(void)
{
    LTDC_Layer_InitTypeDef LTDC_Layer_InitStruct;
    /*Layer 1配置*/
    LTDC_Layer_InitStruct.LTDC_HorizontalStart = HBP + HSW;
    LTDC_Layer_InitStruct.LTDC_HorizontalStop = HSW+HBP+LCD_PIXEL_WIDTH -1;
    LTDC_Layer_InitStruct.LTDC_VerticalStart = VSW+ VBP;
    LTDC_Layer_InitStruct.LTDC_VerticalStop = VSW+ VBP+LCD_PIXEL_HEIGHT -1;
    LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
    LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 0xFF;
    LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
    LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;
    LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;
    LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_LAYER1_Buffer_Adderess;
    LTDC_Layer_InitStruct.LTDC_CFBLineLength = LCD_PIXEL_WIDTH * 2 + 3;//行 字节数
    LTDC_Layer_InitStruct.LTDC_CFBPitch = LCD_PIXEL_WIDTH * 2;
    LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PIXEL_HEIGHT;
    LTDC_LayerInit(LTDC_Layer1,&LTDC_Layer_InitStruct);
    /*Layer2*/
    LTDC_Layer_InitStruct.LTDC_HorizontalStart = HBP + HSW;
    LTDC_Layer_InitStruct.LTDC_HorizontalStop = HSW+HBP+LCD_PIXEL_WIDTH -1;
    LTDC_Layer_InitStruct.LTDC_VerticalStart = VSW+ VBP;
    LTDC_Layer_InitStruct.LTDC_VerticalStop = VSW+ VBP+LCD_PIXEL_HEIGHT  + VFP -1;
    LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB8888;
    LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 0xFF;
    LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;
    LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
    LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;
    LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
    LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_LAYER2_Buffer_Adderess;
    LTDC_Layer_InitStruct.LTDC_CFBLineLength = LCD_PIXEL_WIDTH * 4 + 3;//行 字节数
    LTDC_Layer_InitStruct.LTDC_CFBPitch = LCD_PIXEL_WIDTH * 4;
    LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PIXEL_HEIGHT;
    LTDC_LayerInit(LTDC_Layer2,&LTDC_Layer_InitStruct);
    
    LTDC_LayerCmd(LTDC_Layer1,ENABLE);
    LTDC_LayerCmd(LTDC_Layer2,ENABLE);

    LTDC_DitherCmd(ENABLE);
    LTDC_ReloadConfig(LTDC_IMReload);
}