/** * @brief Initialize the LTDC * @param None * @retval None */ void LTDC_Init(void) { /* DeInit */ HAL_LTDC_DeInit(&hltdc_eval); /* LTDC Config */ /* Timing and polarity */ hltdc_eval.Init.HorizontalSync = HSYNC; hltdc_eval.Init.VerticalSync = VSYNC; hltdc_eval.Init.AccumulatedHBP = HSYNC+HBP; hltdc_eval.Init.AccumulatedVBP = VSYNC+VBP; hltdc_eval.Init.AccumulatedActiveH = VSYNC+VBP+VACT; hltdc_eval.Init.AccumulatedActiveW = HSYNC+HBP+HACT; hltdc_eval.Init.TotalHeigh = VSYNC+VBP+VACT+VFP; hltdc_eval.Init.TotalWidth = HSYNC+HBP+HACT+HFP; /* background value */ hltdc_eval.Init.Backcolor.Blue = 0; hltdc_eval.Init.Backcolor.Green = 0; hltdc_eval.Init.Backcolor.Red = 0; /* Polarity */ hltdc_eval.Init.HSPolarity = LTDC_HSPOLARITY_AL; hltdc_eval.Init.VSPolarity = LTDC_VSPOLARITY_AL; hltdc_eval.Init.DEPolarity = LTDC_DEPOLARITY_AL; hltdc_eval.Init.PCPolarity = LTDC_PCPOLARITY_IPC; hltdc_eval.Instance = LTDC; HAL_LTDC_Init(&hltdc_eval); }
/** * @brief DeInitializes the LCD. * @retval LCD state */ uint8_t BSP_LCD_DeInit(void) { /* Initialize the hLtdcHandler Instance parameter */ hLtdcHandler.Instance = LTDC; /* Disable LTDC block */ __HAL_LTDC_DISABLE(&hLtdcHandler); /* DeInit the LTDC */ HAL_LTDC_DeInit(&hLtdcHandler); /* DeInit the LTDC MSP : this __weak function can be rewritten by the application */ BSP_LCD_MspDeInit(&hLtdcHandler, NULL); return LCD_OK; }
/** * @brief LCD configuration. * @note This function Configure tha LTDC peripheral : * 1) Configure the Pixel Clock for the LCD * 2) Configure the LTDC Timing and Polarity * 3) Configure the LTDC Layer 2 : * - ARGB4444 as pixel format * - The frame buffer is located at internal RAM : The output of DMA2D transfer * - The Layer size configuration : 100x100 * @retval * None */ static void LCD_Config(void) { static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; static LTDC_HandleTypeDef hltdc_F; LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /* DeInit */ HAL_LTDC_DeInit(&hltdc_F); /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ hltdc_F.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ hltdc_F.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ hltdc_F.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ hltdc_F.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration */ /* Horizontal synchronization width = Hsync - 1 */ hltdc_F.Init.HorizontalSync = 40; /* Vertical synchronization height = Vsync - 1 */ hltdc_F.Init.VerticalSync = 9; /* Accumulated horizontal back porch = Hsync + HBP - 1 */ hltdc_F.Init.AccumulatedHBP = 42; /* Accumulated vertical back porch = Vsync + VBP - 1 */ hltdc_F.Init.AccumulatedVBP = 11; /* Accumulated active width = Hsync + HBP + Active Width - 1 */ hltdc_F.Init.AccumulatedActiveH = 283; /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ hltdc_F.Init.AccumulatedActiveW = 522; /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ hltdc_F.Init.TotalHeigh = 285; /* Total width = Hsync + HBP + Active Width + HFP - 1 */ hltdc_F.Init.TotalWidth = 524; /* LCD clock configuration */ /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 MHz */ /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 MHz */ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 MHz */ /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6MHz */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; PeriphClkInitStruct.PLLSAI.PLLSAIR = 5; PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); /* Configure R,G,B component values for LCD background color */ hltdc_F.Init.Backcolor.Blue = 0; hltdc_F.Init.Backcolor.Green = 0; hltdc_F.Init.Backcolor.Red = 0; hltdc_F.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ /* WindowX0 = Horizontal start WindowX1 = Horizontal stop WindowY0 = Vertical start WindowY1 = Vertical stop */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 100; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 100; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB4444; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&aBufferResult; /* Alpha constant (255 totally opaque) */ pLayerCfg.Alpha = 255; /* Default Color configuration (configure A,R,G,B component values) */ pLayerCfg.Alpha0 = 0; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; /* Configure blending factors */ pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; /* Configure the number of lines and number of pixels per line */ pLayerCfg.ImageWidth = 100; pLayerCfg.ImageHeight = 100; /* Configure the LTDC */ HAL_LTDC_Init(&hltdc_F); /* Configure the Layer */ HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1); }