LCD not fullscreen

My lcd have a gap in the bottom of the screen like in the picture.
My code is :

void tft_init(void)
{
static lv_color_t disp_buf1[TFT_HOR_RES * 30];
static lv_disp_buf_t buf;
lv_disp_buf_init(&buf, disp_buf1, NULL, TFT_HOR_RES * 30);

lv_disp_drv_init(&disp_drv);

#if TFT_EXT_FB != 0
SDRAM_Init();
#endif
LCD_Config();
DMA_Config();

disp_drv.buffer = &buf;
disp_drv.flush_cb = tft_flush;

#if TFT_USE_GPU != 0
DMA2D_Config();
disp_drv.gpu_blend_cb = gpu_mem_blend;
disp_drv.gpu_fill_cb = gpu_mem_fill;
#endif
lv_disp_drv_register(&disp_drv);
}

static void tft_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_p)
{
/Return if the area is out the screen/
if(area->x2 < 0) return;
if(area->y2 < 0) return;
if(area->x1 > TFT_HOR_RES - 1) return;
if(area->y1 > TFT_VER_RES - 1) return;

/*Truncate the area to the screen*/
int32_t act_x1 = area->x1 < 0 ? 0 : area->x1;
int32_t act_y1 = area->y1 < 0 ? 0 : area->y1;
int32_t act_x2 = area->x2 > TFT_HOR_RES - 1 ? TFT_HOR_RES - 1 : area->x2;
int32_t act_y2 = area->y2 > TFT_VER_RES - 1 ? TFT_VER_RES - 1 : area->y2;

x1_flush = act_x1;
y1_flush = act_y1;
x2_flush = act_x2;
y2_fill = act_y2;
y_fill_act = act_y1;
buf_to_flush = color_p;


  /*##-7- Start the DMA transfer using the interrupt mode #*/
  /* Configure the source, destination and buffer size DMA fields and Start DMA Stream transfer */
  /* Enable All the DMA interrupts */
HAL_StatusTypeDef err;
err = HAL_DMA_Start_IT(&DmaHandle,(uint32_t)buf_to_flush, (uint32_t)&my_fb[y_fill_act * TFT_HOR_RES + x1_flush],
		  (x2_flush - x1_flush + 1));
if(err != HAL_OK)
{
	while(1);	/*Halt on error*/
}

}

is there anything wrong? or any advise please, help me. thank you

image
i have this warning too, i guess my vertical is not flushed(?). idk pls help

Your guess seems to be right: You are just transmitting one single line to the frame buffer.

It’s seems to be curious that your screen looks like your screenshot,
when you just transmit only one line.
And one more, I miss the call of lv_disp_flush_ready () at the end of your tft_flush function.

And please, next time you put source code into your post, put it into block quote (That’s the " at the top menu)

Thank you for you response.

i’m sorry i am new to lvgl, so i need to add lv_disp_flush_ready() in the end tft_flush? and how i send to the frame buffer repeatly? is there anything i need to add??

and thank you for your advise, i definitely do in the next post :smiley:

In your case it’s lv_disp_flush_ready (drv);

tft_flush is called automatically if lvgl is updating something on the display.

I did lv_disp_flush_ready(drv); but still not working, it feels like my screen is not updating. is there anything should i add? i get confused with this porting system