2025-09-23 3:18 AM
I have a custom board with a 1024x600 display. It works fine.
Some demo examples only work in lower resolution. I want to get those to work on my display.
I was able to trick TouchGFX Designer to think lower resolutions are supported by changing AvailableResolutions in ApplicationTemplate.touchgfx.part. This sort of works, but you see some objects out of the window. It's wasted rendering time too.
By changing pLayerCfg.ImageHeight of the LTDC I was able to get lower vertical resolution work. For instance 1024x300. This way the bottom half is black. Which is good.
However, when I change pLayerCfg.ImageWidth to 800 I get garbage. I I set it to 1022 the image is skewed. I also played with pLayerCfg.WindowX0 and pLayerCfg.WindowX1, but it doesn't seem to do anything.
#include "ltdc.h"
/* USER CODE BEGIN 0 */
#include <gui_generated/common/SimConstants.hpp>
/* USER CODE END 0 */
LTDC_HandleTypeDef hltdc;
/* LTDC init function */
void MX_LTDC_Init(void)
{
/* USER CODE BEGIN LTDC_Init 0 */
/* USER CODE END LTDC_Init 0 */
LTDC_LayerCfgTypeDef pLayerCfg = {0};
/* USER CODE BEGIN LTDC_Init 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;
hltdc.Init.HorizontalSync = 0;
hltdc.Init.VerticalSync = 0;
hltdc.Init.AccumulatedHBP = 45;
hltdc.Init.AccumulatedVBP = 1;
hltdc.Init.AccumulatedActiveW = 1069;
hltdc.Init.AccumulatedActiveH = 601;
hltdc.Init.TotalWidth = 1114;
hltdc.Init.TotalHeigh = 689;
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 = 1024;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 600;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress = 0x70000000;
pLayerCfg.ImageWidth = SIM_WIDTH;
pLayerCfg.ImageHeight = SIM_HEIGHT;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
Error_Handler();
}
return;
/* USER CODE END LTDC_Init 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;
hltdc.Init.HorizontalSync = 0;
hltdc.Init.VerticalSync = 0;
hltdc.Init.AccumulatedHBP = 45;
hltdc.Init.AccumulatedVBP = 1;
hltdc.Init.AccumulatedActiveW = 1069;
hltdc.Init.AccumulatedActiveH = 601;
hltdc.Init.TotalWidth = 1114;
hltdc.Init.TotalHeigh = 689;
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 = 1024;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 600;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress = 0x70000000;
pLayerCfg.ImageWidth = 1024;
pLayerCfg.ImageHeight = 600;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN LTDC_Init 2 */
/* USER CODE END LTDC_Init 2 */
}
Solved! Go to Solution.
2025-09-23 6:02 AM
It looks like it's working this way:
pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = SIM_WIDTH; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = SIM_HEIGHT; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; pLayerCfg.Alpha = 255; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = 0x70000000; pLayerCfg.ImageWidth = 1024; pLayerCfg.ImageHeight = SIM_HEIGHT; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0;
2025-09-23 6:02 AM
It looks like it's working this way:
pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = SIM_WIDTH; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = SIM_HEIGHT; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; pLayerCfg.Alpha = 255; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = 0x70000000; pLayerCfg.ImageWidth = 1024; pLayerCfg.ImageHeight = SIM_HEIGHT; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0;