Hello,
I use the LVGL 9.2.2 for my STM32H743 Project, my application uses FreeRTOS, DMA2D and LTDC for my 1024x600 Riverdi 7" TFT TouchDisplay.
my project is working fine with TouchGFX, now i try to run LVGL and my result is:
(LV_USE_OS=LV_OS_FREERTOS)
static lv_display_t *display;
static void disp_flush_complete(DMA2D_HandleTypeDef *hdma2d)
{
lv_display_flush_ready(display);
}
static void display_flush(lv_display_t *disp, const lv_area_t *area, uint8_t *color_p)
{
lv_coord_t width = lv_area_get_width(area);
lv_coord_t height = lv_area_get_height(area);
DMA2D->CR = 0x01U << DMA2D_CR_MODE_Pos;
DMA2D->FGPFCCR = DMA2D_INPUT_RGB888;
DMA2D->FGMAR = (uint32_t)color_p;
DMA2D->FGOR = 0;
DMA2D->OPFCCR = DMA2D_OUTPUT_RGB888;
DMA2D->OMAR = hltdc.LayerCfg[0].FBStartAdress + 4 * \
(area->y1 * 600 + area->x1);
DMA2D->OOR = 600 - width;
DMA2D->NLR = (width << DMA2D_NLR_PL_Pos) | (height << DMA2D_NLR_NL_Pos);
DMA2D->IFCR = 0x3FU;
DMA2D->CR |= DMA2D_CR_TCIE;
DMA2D->CR |= DMA2D_CR_START;
}
void main()
{
.....
osKernelInitialize();
/* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */
lv_init();
/* creation of LVGLtimer */
LVGLtimerHandle = osThreadNew(LVGL_timer, NULL, &LVGLtimer_attributes);
osKernelStart();
......
void LVGL_timer(void *argument)
{
/* USER CODE BEGIN LVGL_timer */
/* Infinite loop */
for(;;)
{
lv_timer_handler();
lv_tick_inc(1);
osDelay(1);
}
/* USER CODE END LVGL_timer */
}
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
.....
display = lv_display_create(1024, 600);
lv_display_set_buffers(display, (void*) disp_buf, (void*) disp_buf2, sizeof(disp_buf), LV_DISPLAY_RENDER_MODE_PARTIAL);
lv_display_set_flush_cb(display, display_flush);
hdma2d.XferCpltCallback = disp_flush_complete;
lv_demo_widgets();
.....
}
static void MX_DMA2D_Init(void)
{
/* USER CODE BEGIN DMA2D_Init 0 */
/* USER CODE END DMA2D_Init 0 */
/* USER CODE BEGIN DMA2D_Init 1 */
/* USER CODE END DMA2D_Init 1 */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB888;
hdma2d.Init.OutputOffset = 0;
hdma2d.LayerCfg[1].InputOffset = 0;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB888;
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0;
hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.LayerCfg[1].ChromaSubSampling = DMA2D_NO_CSS;
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler();
}
if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN DMA2D_Init 2 */
/* USER CODE END DMA2D_Init 2 */
}
static 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 */
/* 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 = 160;
hltdc.Init.AccumulatedVBP = 23;
hltdc.Init.AccumulatedActiveW = 1184;
hltdc.Init.AccumulatedActiveH = 623;
hltdc.Init.TotalWidth = 1344;
hltdc.Init.TotalHeigh = 635;
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_RGB888;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress = 0xC0000000;
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 */
}
LV_LOG is enabled, but i get no errors…