/** * @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 1 : * - indirect color (L8) as pixel format * - The frame buffer is located at FLASH memory * - The Layer size configuration : 320x240 * 4) Configure the LTDC Layer 2 : * - The frame buffer is located at FLASH memory * - The Layer size configuration : 320x240 * 5) Load 256 colors in CLUT address for Layer 1 * @retval * None */ static void LCD_Config(void) { LTDC_LayerCfgTypeDef pLayerCfg; LTDC_LayerCfgTypeDef pLayerCfg1; /* LTDC Initialization -------------------------------------------------------*/ /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration */ if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) { /* The AMPIRE LCD 480x272 is selected */ /* Timing Configuration */ LtdcHandle.Init.HorizontalSync = (AMPIRE480272_HSYNC - 1); LtdcHandle.Init.VerticalSync = (AMPIRE480272_VSYNC - 1); LtdcHandle.Init.AccumulatedHBP = (AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); LtdcHandle.Init.AccumulatedVBP = (AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); LtdcHandle.Init.AccumulatedActiveH = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); LtdcHandle.Init.AccumulatedActiveW = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); LtdcHandle.Init.TotalHeigh = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP + AMPIRE480272_VFP - 1); LtdcHandle.Init.TotalWidth = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP + AMPIRE480272_HFP - 1); } else { /* The LCD AMPIRE 640x480 is selected */ /* Timing configuration */ LtdcHandle.Init.HorizontalSync = (AMPIRE640480_HSYNC - 1); LtdcHandle.Init.VerticalSync = (AMPIRE640480_VSYNC - 1); LtdcHandle.Init.AccumulatedHBP = (AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); LtdcHandle.Init.AccumulatedVBP = (AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); LtdcHandle.Init.AccumulatedActiveH = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); LtdcHandle.Init.AccumulatedActiveW = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); LtdcHandle.Init.TotalHeigh = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP + AMPIRE640480_VFP - 1); LtdcHandle.Init.TotalWidth = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP + AMPIRE640480_HFP - 1); } /* Configure R,G,B component values for LCD background color */ LtdcHandle.Init.Backcolor.Blue = 0; LtdcHandle.Init.Backcolor.Green = 0; LtdcHandle.Init.Backcolor.Red = 0; LtdcHandle.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 320; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 240; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_L8; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&L8_320x240; /* 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_PAxCA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; /* Configure the number of lines and number of pixels per line */ pLayerCfg.ImageWidth = 320; pLayerCfg.ImageHeight = 240; /* Layer2 Configuration ------------------------------------------------------*/ /* Windowing configuration */ pLayerCfg1.WindowX0 = 160; pLayerCfg1.WindowX1 = 480; pLayerCfg1.WindowY0 = 32; pLayerCfg1.WindowY1 = 272; /* Pixel Format configuration*/ pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg1.FBStartAdress = (uint32_t)&RGB565_320x240; /* Alpha constant (255 totally opaque) */ pLayerCfg1.Alpha = 200; /* Default Color configuration (configure A,R,G,B component values) */ pLayerCfg1.Alpha0 = 0; pLayerCfg1.Backcolor.Blue = 0; pLayerCfg1.Backcolor.Green = 0; pLayerCfg1.Backcolor.Red = 0; /* Configure blending factors */ pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; /* Configure the number of lines and number of pixels per line */ pLayerCfg1.ImageWidth = 320; pLayerCfg1.ImageHeight = 240; /* Configure the LTDC */ if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Background Layer*/ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg, 0) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Foreground Layer*/ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg1, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
/** * @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 : * - RGB565 as pixel format * - The frame buffer is located at internal RAM : The output of DMA2D transfer * - The Layer size configuration : 240x130 * @retval * None */ static void LCD_Config(void) { static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; static LTDC_HandleTypeDef hltdc_F; LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /* 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.6 MHz */ 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 = 120; pLayerCfg.WindowX1 = 360; pLayerCfg.WindowY0 = 70; pLayerCfg.WindowY1 = 200; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&aBlendedImage; /* 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 = 240; pLayerCfg.ImageHeight = 130; /* Configure the LTDC */ if(HAL_LTDC_Init(&hltdc_F) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Layer */ if(HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
static void LCD_Config(void) { LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration */ /* Horizontal synchronization width = Hsync - 1 */ LtdcHandle.Init.HorizontalSync = 40; /* Vertical synchronization height = Vsync - 1 */ LtdcHandle.Init.VerticalSync = 9; /* Accumulated horizontal back porch = Hsync + HBP - 1 */ LtdcHandle.Init.AccumulatedHBP = 42; /* Accumulated vertical back porch = Vsync + VBP - 1 */ LtdcHandle.Init.AccumulatedVBP = 11; /* Accumulated active width = Hsync + HBP + Active Width - 1 */ LtdcHandle.Init.AccumulatedActiveH = 283; /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ LtdcHandle.Init.AccumulatedActiveW = 522; /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ LtdcHandle.Init.TotalHeigh = 285; /* Total width = Hsync + HBP + Active Width + HFP - 1 */ LtdcHandle.Init.TotalWidth = 524; /* Configure R,G,B component values for LCD background color */ LtdcHandle.Init.Backcolor.Blue = 0; LtdcHandle.Init.Backcolor.Green = 0; LtdcHandle.Init.Backcolor.Red = 0; LtdcHandle.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ /* In this case all the active display area is used to display a picture then : Horizontal start = horizontal synchronization + Horizontal back porch = 43 Vertical start = vertical synchronization + vertical back porch = 12 Horizontal stop = Horizontal start + window width -1 = 43 + 480 -1 Vertical stop = Vertical start + window height -1 = 12 + 272 -1 */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 480; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 272; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&RGB565_480x272; /* 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 = 480; pLayerCfg.ImageHeight = 272; /* Configure the LTDC */ if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Layer */ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
/** * @brief LCD configuration. * @note This function Configure the LTDC peripheral : * 1) Configure the Pixel Clock for the LCD * 2) Configure the LTDC Timing and Polarity * 3) Configure the LTDC Layer 2 : * - RGB565 as pixel format * - The frame buffer is located at internal RAM : The output of DMA2D transfer * - The Layer size configuration : 240x160 * @retval None */ static void LCD_Config(void) { RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; LTDC_LayerCfgTypeDef pLayerCfg; static LTDC_HandleTypeDef LtdcHandle; /* Initialization of ILI9341 component */ ili9341_Init(); /* LTDC Initialization -------------------------------------------------------*/ /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration (Typical configuration from ILI9341 datasheet) HSYNC=10 (9+1) HBP=20 (29-10+1) ActiveW=240 (269-20-10+1) HFP=10 (279-240-20-10+1) VSYNC=2 (1+1) VBP=2 (3-2+1) ActiveH=320 (323-2-2+1) VFP=4 (327-320-2-2+1) */ /* Timing configuration */ /* Horizontal synchronization width = Hsync - 1 */ LtdcHandle.Init.HorizontalSync = 9; /* Vertical synchronization height = Vsync - 1 */ LtdcHandle.Init.VerticalSync = 1; /* Accumulated horizontal back porch = Hsync + HBP - 1 */ LtdcHandle.Init.AccumulatedHBP = 29; /* Accumulated vertical back porch = Vsync + VBP - 1 */ LtdcHandle.Init.AccumulatedVBP = 3; /* Accumulated active width = Hsync + HBP + Active Width - 1 */ LtdcHandle.Init.AccumulatedActiveH = 323; /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ LtdcHandle.Init.AccumulatedActiveW = 269; /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ LtdcHandle.Init.TotalHeigh = 327; /* Total width = Hsync + HBP + Active Width + HFP - 1 */ LtdcHandle.Init.TotalWidth = 279; /* 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/4 = 48 MHz */ /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDIVR_8 = 48/8 = 6 MHz */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); /* Configure R,G,B component values for LCD background color */ LtdcHandle.Init.Backcolor.Blue = 0; LtdcHandle.Init.Backcolor.Green = 0; LtdcHandle.Init.Backcolor.Red = 0; LtdcHandle.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ /* WindowX0 = Horizontal start WindowX1 = Horizontal stop WindowY0 = Vertical start WindowY1 = Vertical stop */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 240; pLayerCfg.WindowY0 = 80; pLayerCfg.WindowY1 = 240; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&aBlendedImage; /* 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 = 240; pLayerCfg.ImageHeight = 160; /* Configure the LTDC */ if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Layer*/ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
/** * @brief LCD configuration. * @note This function Configure the LTDC peripheral to display output of DMA2D operation on glass. * That is an image of size 240x130 in format RGB565 from buffer in internal SRAM aBlendedImage[]. * 1) Configure the Pixel Clock for the LCD * 2) Configure the LTDC Timing and Polarity * 3) Configure the LTDC Layer 2 : * - RGB565 as pixel format * - The frame buffer is located at internal SRAM : The output of DMA2D transfer * which is aBlendedImage[]. * - The Layer size configuration : 240x130 * @retval * None */ static void LCD_Config(void) { static LTDC_HandleTypeDef hltdc_F; static LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /* 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; if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) { /* The AMPIRE LCD 480x272 is selected */ /* Timing Configuration */ hltdc_F.Init.HorizontalSync = (AMPIRE480272_HSYNC - 1); hltdc_F.Init.VerticalSync = (AMPIRE480272_VSYNC - 1); hltdc_F.Init.AccumulatedHBP = (AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); hltdc_F.Init.AccumulatedVBP = (AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); hltdc_F.Init.AccumulatedActiveH = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); hltdc_F.Init.TotalHeigh = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP + AMPIRE480272_VFP - 1); hltdc_F.Init.TotalWidth = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP + AMPIRE480272_HFP - 1); } else { /* The LCD AMPIRE 640x480 is selected */ /* Timing configuration */ hltdc_F.Init.HorizontalSync = (AMPIRE640480_HSYNC - 1); hltdc_F.Init.VerticalSync = (AMPIRE640480_VSYNC - 1); hltdc_F.Init.AccumulatedHBP = (AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); hltdc_F.Init.AccumulatedVBP = (AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); hltdc_F.Init.AccumulatedActiveH = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); hltdc_F.Init.TotalHeigh = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP + AMPIRE640480_VFP - 1); hltdc_F.Init.TotalWidth = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP + AMPIRE640480_HFP - 1); } /* 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 Display image 240x130 at start position on display (120, 70). */ pLayerCfg.WindowX0 = 120; pLayerCfg.WindowX1 = 360; pLayerCfg.WindowY0 = 70; pLayerCfg.WindowY1 = 200; /* Pixel Format configuration */ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located in SRAM memory */ /* Output of DMA2D operation */ pLayerCfg.FBStartAdress = (uint32_t)&aBlendedImage; /* Alpha constant (255 = totally opaque) */ pLayerCfg.Alpha = 255; /* Default Color configuration (configure A,R,G,B component values) */ pLayerCfg.Alpha0 = 0; /* fully transparent */ 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 : 240x130 */ pLayerCfg.ImageWidth = LAYER_SIZE_X; pLayerCfg.ImageHeight = LAYER_SIZE_Y; /* Configure the LTDC */ if(HAL_LTDC_Init(&hltdc_F) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the single Layer 1 */ if(HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
/** * @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 1 : * - direct color (RGB565) as pixel format * - The frame buffer is located at FLASH memory * - The Layer size configuration : 240x160 * 4) Configure the LTDC Layer 2 : * - direct color (RGB565) as pixel format * - The frame buffer is located at FLASH memory * - The Layer size configuration : 240x160 * @retval * None */ static void LCD_Config(void) { LTDC_LayerCfgTypeDef pLayerCfg; LTDC_LayerCfgTypeDef pLayerCfg1; /* Initializaton of ILI9341 component*/ ili9341_Init(); /* LTDC Initialization -------------------------------------------------------*/ /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration (Typical configuration from ILI9341 datasheet) HSYNC=10 (9+1) HBP=20 (29-10+1) ActiveW=240 (269-20-10+1) HFP=10 (279-240-20-10+1) VSYNC=2 (1+1) VBP=2 (3-2+1) ActiveH=320 (323-2-2+1) VFP=4 (327-320-2-2+1) */ /* Timing configuration */ /* Horizontal synchronization width = Hsync - 1 */ LtdcHandle.Init.HorizontalSync = 9; /* Vertical synchronization height = Vsync - 1 */ LtdcHandle.Init.VerticalSync = 1; /* Accumulated horizontal back porch = Hsync + HBP - 1 */ LtdcHandle.Init.AccumulatedHBP = 29; /* Accumulated vertical back porch = Vsync + VBP - 1 */ LtdcHandle.Init.AccumulatedVBP = 3; /* Accumulated active width = Hsync + HBP + Active Width - 1 */ LtdcHandle.Init.AccumulatedActiveH = 323; /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ LtdcHandle.Init.AccumulatedActiveW = 269; /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ LtdcHandle.Init.TotalHeigh = 327; /* Total width = Hsync + HBP + Active Width + HFP - 1 */ LtdcHandle.Init.TotalWidth = 279; /* Configure R,G,B component values for LCD background color */ LtdcHandle.Init.Backcolor.Blue = 0; LtdcHandle.Init.Backcolor.Green = 0; LtdcHandle.Init.Backcolor.Red = 0; LtdcHandle.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 240; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 160; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&ST_LOGO_1; /* 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_PAxCA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; /* Configure the number of lines and number of pixels per line */ pLayerCfg.ImageWidth = 240; pLayerCfg.ImageHeight = 160; /* Layer2 Configuration ------------------------------------------------------*/ /* Windowing configuration */ pLayerCfg1.WindowX0 = 0; pLayerCfg1.WindowX1 = 240; pLayerCfg1.WindowY0 = 160; pLayerCfg1.WindowY1 = 320; /* Pixel Format configuration*/ pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg1.FBStartAdress = (uint32_t)&ST_LOGO_2; /* Alpha constant (255 totally opaque) */ pLayerCfg1.Alpha = 200; /* Default Color configuration (configure A,R,G,B component values) */ pLayerCfg1.Alpha0 = 0; pLayerCfg1.Backcolor.Blue = 0; pLayerCfg1.Backcolor.Green = 0; pLayerCfg1.Backcolor.Red = 0; /* Configure blending factors */ pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; /* Configure the number of lines and number of pixels per line */ pLayerCfg1.ImageWidth = 240; pLayerCfg1.ImageHeight = 160; /* Configure the LTDC */ if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Background Layer*/ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg, 0) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Foreground Layer*/ if(HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg1, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }
/** * @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 1 : * - The frame buffer is located at FLASH memory * - The Layer size configuration : 480x272 */ static void LCD_Config(void) { static LTDC_HandleTypeDef hltdc_F; LTDC_LayerCfgTypeDef pLayerCfg; // LTDC Initialization --------------------------------------------- // 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; // The RK043FN48H LCD 480x272 is selected // Timing Configuration hltdc_F.Init.HorizontalSync = (RK043FN48H_HSYNC - 1); hltdc_F.Init.VerticalSync = (RK043FN48H_VSYNC - 1); hltdc_F.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1); hltdc_F.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1); hltdc_F.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1); hltdc_F.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1); hltdc_F.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1); // Configure R,G,B component values for LCD background color : all // black background 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 /* In this case all the active display area is used to display a * picture then : * Horizontal start = * horizontal synchronization + Horizontal back porch = 43 * Vertical start = * vertical synchronization + vertical back porch = 12 * Horizontal stop = Horizontal start + window width -1 = 43 + 480 -1 * Vertical stop = Vertical start + window height -1 = 12 + 272 -1 */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 480; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 272; // Pixel Format configuration pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; // Start Address configuration : frame buffer is located at FLASH memory pLayerCfg.FBStartAdress = (uint32_t)&RGB565_480x272; // Alpha constant (255 == totally opaque) pLayerCfg.Alpha = 255; // Default Color configuration (configure A,R,G,B component values) : // no background color pLayerCfg.Alpha0 = 0; // fully transparent pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.ImageWidth = 480; pLayerCfg.ImageHeight = 272; if(HAL_LTDC_Init(&hltdc_F) != HAL_OK) { Error_Handler(); } if(HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1) != HAL_OK) { Error_Handler(); } }
/* LTDC init function */ void MX_LTDC_Init(void) { LTDC_LayerCfgTypeDef pLayerCfg; LTDC_LayerCfgTypeDef pLayerCfg1; /* Timing configuration (Typical configuration from ILI9341 datasheet) HSYNC=10 (9+1) HBP=20 (29-10+1) ActiveW=240 (269-20-10+1) HFP=10 (279-240-20-10+1) VSYNC=2 (1+1) VBP=2 (3-2+1) ActiveH=320 (323-2-2+1) VFP=4 (327-320-2-2+1) */ 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; /* Configure horizontal synchronization width */ hltdc.Init.HorizontalSync = ILI9341_HSYNC; /* Configure vertical synchronization height */ hltdc.Init.VerticalSync = ILI9341_VSYNC; /* Configure accumulated horizontal back porch */ hltdc.Init.AccumulatedHBP = ILI9341_HBP; /* Configure accumulated vertical back porch */ hltdc.Init.AccumulatedVBP = ILI9341_VBP; /* Configure accumulated active width */ hltdc.Init.AccumulatedActiveW = 269; /* Configure accumulated active height */ hltdc.Init.AccumulatedActiveH = 323; /* Configure total width */ hltdc.Init.TotalWidth = 279; /* Configure total height */ hltdc.Init.TotalHeigh = 327; /* LCD clock configuration */ //elsewhere. Choose 6MHz. /* Configure R,G,B component values for LCD background color */ hltdc.Init.Backcolor.Blue = 0x0; hltdc.Init.Backcolor.Green = 0xFF; hltdc.Init.Backcolor.Red = 0x0; HAL_LTDC_Init(&hltdc); pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 0; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 0; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; pLayerCfg.Alpha = 0; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = 0; pLayerCfg.ImageWidth = 0; pLayerCfg.ImageHeight = 0; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0); pLayerCfg1.WindowX0 = 0; pLayerCfg1.WindowX1 = 0; pLayerCfg1.WindowY0 = 0; pLayerCfg1.WindowY1 = 0; pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; pLayerCfg1.Alpha = 0; pLayerCfg1.Alpha0 = 0; pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg1.FBStartAdress = 0; pLayerCfg1.ImageWidth = 0; pLayerCfg1.ImageHeight = 0; pLayerCfg1.Backcolor.Blue = 0; pLayerCfg1.Backcolor.Green = 0; pLayerCfg1.Backcolor.Red = 0; HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1); }
/** * @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 1 : * - The frame buffer is located at FLASH memory * - The Layer size configuration : 480x272 * @retval * None */ static void LCD_Config(void) { static LTDC_HandleTypeDef hltdc_F; LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /* 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 */ if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) { /* The AMPIRE LCD 480x272 is selected */ /* Timing Configuration */ hltdc_F.Init.HorizontalSync = (AMPIRE480272_HSYNC - 1); hltdc_F.Init.VerticalSync = (AMPIRE480272_VSYNC - 1); hltdc_F.Init.AccumulatedHBP = (AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); hltdc_F.Init.AccumulatedVBP = (AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); hltdc_F.Init.AccumulatedActiveH = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); hltdc_F.Init.TotalHeigh = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP + AMPIRE480272_VFP - 1); hltdc_F.Init.TotalWidth = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP + AMPIRE480272_HFP - 1); } else { /* The LCD AMPIRE 640x480 is selected */ /* Timing configuration */ hltdc_F.Init.HorizontalSync = (AMPIRE640480_HSYNC - 1); hltdc_F.Init.VerticalSync = (AMPIRE640480_VSYNC - 1); hltdc_F.Init.AccumulatedHBP = (AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); hltdc_F.Init.AccumulatedVBP = (AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); hltdc_F.Init.AccumulatedActiveH = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); hltdc_F.Init.TotalHeigh = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP + AMPIRE640480_VFP - 1); hltdc_F.Init.TotalWidth = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP + AMPIRE640480_HFP - 1); } /* Configure R,G,B component values for LCD background color : all black background */ 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 */ /* In this case all the active display area is used to display a picture then : Horizontal start = horizontal synchronization + Horizontal back porch = 43 Vertical start = vertical synchronization + vertical back porch = 12 Horizontal stop = Horizontal start + window width -1 = 43 + 480 -1 Vertical stop = Vertical start + window height -1 = 12 + 272 -1 */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 480; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 272; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&RGB565_480x272; /* Alpha constant (255 == totally opaque) */ pLayerCfg.Alpha = 255; /* Default Color configuration (configure A,R,G,B component values) : no background color */ pLayerCfg.Alpha0 = 0; /* fully transparent */ 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 = 480; pLayerCfg.ImageHeight = 272; /* Configure the LTDC */ if(HAL_LTDC_Init(&hltdc_F) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Layer*/ if(HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } }