Screen shifting issue on fist start

Description

When my device is turned on for the first time after being turned off for a long time, the screen shifts horizontally.

What MCU/Processor/Board and compiler are you using?

Waveshare ESP32-S3-Touch-LCD-2.1 480x480.
ESP IDF v5.2.1 on VS Code.
LVGL 9.3.

The LCD has an ST7701 driver. I used the ST7701 initialize commands shared by the Waveshare company.

LCD: ESP32-S3-Touch-LCD-2.1 | WaveShare Documentation Platform

As seen in the photo, when turned on for the first time after a long break, the screen shifts horizontally each time.

When I turn the power off and on again, it fixes itself as shown in the photo.

void lvgl_flush_cb(lv_display_t * display, const lv_area_t * area, uint8_t * px_map)
{
    esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t) lv_display_get_user_data(display);
    int offsetx1 = area->x1;
    int offsetx2 = area->x2;
    int offsety1 = area->y1;
    int offsety2 = area->y2;

    // pass the draw buffer to the driver
    esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, px_map);
    lv_disp_flush_ready(display);
}
void LVGL_Init(void)
{
    ESP_LOGI(LVGL_TAG, "Initialize LVGL library");
    ESP_LOGI(LVGL_TAG, "LVGL Version: %d.%d.%d", LVGL_VERSION_MAJOR, LVGL_VERSION_MINOR, LVGL_VERSION_PATCH);
    lv_init();
    disp = lv_display_create(EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES);

    ESP_LOGI(LVGL_TAG, "Use frame buffers as LVGL draw buffers");
    ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2));
    // initialize LVGL draw buffers
    lv_display_set_buffers(disp, buf1, buf2, (EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES) * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_DIRECT);

    lv_display_set_flush_cb(disp, example_lvgl_flush_cb);
    lv_display_set_user_data(disp, panel_handle);

    ESP_LOGI(LVGL_TAG, "Install LVGL tick timer");
    const esp_timer_create_args_t lvgl_tick_timer_args = {
        .callback = &example_increase_lvgl_tick,
        .name = "lvgl_tick"
    };

    ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer));
    ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_tick_timer, EXAMPLE_LVGL_TICK_PERIOD_MS * 1000));
}
void app_main(void)
{       
    setenv("TZ", "<+03>-3", 1);
	tzset();

    Wireless_Init();
    MQTT_init();
    Driver_Init();

    LCD_Init();
    Touch_Init();
    LVGL_Init();

    ui_init();

    while (1)
    {
        // raise the task priority of LVGL and/or reduce the handler period can improve the performance
        vTaskDelay(pdMS_TO_TICKS(10));
        // The task running lv_timer_handler should have lower priority than that running `lv_tick_inc`
        lv_timer_handler();
    }
}
void LCD_Init(void)
{
    /********************* LCD *********************/
    ST7701S_reset();
    ST7701S_CS_EN();
    vTaskDelay(pdMS_TO_TICKS(100));
    ST7701S_handle st7701s = ST7701S_newObject(LCD_MOSI, LCD_SCLK, LCD_CS, SPI2_HOST, SPI_METHOD);
    ST7701S_screen_init(st7701s, 1);

    /********************* RGB LCD panel driver *********************/
    ESP_LOGI(LCD_TAG, "Install RGB LCD panel driver");
    esp_lcd_rgb_panel_config_t panel_config = {
        .data_width = 16, // RGB565 in parallel mode, thus 16bit in width
        .psram_trans_align = 64,
        .num_fbs = EXAMPLE_LCD_NUM_FB,
        .clk_src = LCD_CLK_SRC_DEFAULT,
        .disp_gpio_num = EXAMPLE_PIN_NUM_DISP_EN,
        .pclk_gpio_num = EXAMPLE_PIN_NUM_PCLK,
        .vsync_gpio_num = EXAMPLE_PIN_NUM_VSYNC,
        .hsync_gpio_num = EXAMPLE_PIN_NUM_HSYNC,
        .de_gpio_num = EXAMPLE_PIN_NUM_DE,
        .data_gpio_nums = {
            EXAMPLE_PIN_NUM_DATA0,
            EXAMPLE_PIN_NUM_DATA1,
            EXAMPLE_PIN_NUM_DATA2,
            EXAMPLE_PIN_NUM_DATA3,
            EXAMPLE_PIN_NUM_DATA4,
            EXAMPLE_PIN_NUM_DATA5,
            EXAMPLE_PIN_NUM_DATA6,
            EXAMPLE_PIN_NUM_DATA7,
            EXAMPLE_PIN_NUM_DATA8,
            EXAMPLE_PIN_NUM_DATA9,
            EXAMPLE_PIN_NUM_DATA10,
            EXAMPLE_PIN_NUM_DATA11,
            EXAMPLE_PIN_NUM_DATA12,
            EXAMPLE_PIN_NUM_DATA13,
            EXAMPLE_PIN_NUM_DATA14,
            EXAMPLE_PIN_NUM_DATA15,
        },
        .timings = {
            .pclk_hz = EXAMPLE_LCD_PIXEL_CLOCK_HZ,
            .h_res = EXAMPLE_LCD_H_RES,
            .v_res = EXAMPLE_LCD_V_RES, 
            .hsync_back_porch =  10,
            .hsync_front_porch =  50,
            .hsync_pulse_width =  8,
            .vsync_back_porch = 8,
            .vsync_front_porch = 8,
            .vsync_pulse_width = 3, 
            .flags.pclk_active_neg = false,
        },
        .flags.fb_in_psram = true, // allocate frame buffer in PSRAM
    };
    ESP_ERROR_CHECK(esp_lcd_new_rgb_panel(&panel_config, &panel_handle));

    ESP_LOGI(LCD_TAG, "Register event callbacks");
    esp_lcd_rgb_panel_event_callbacks_t cbs = {
        .on_vsync = example_on_vsync_event,
    };
    ESP_ERROR_CHECK(esp_lcd_rgb_panel_register_event_callbacks(panel_handle, &cbs, &disp));

    ESP_LOGI(LCD_TAG, "Initialize RGB LCD panel");
    ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));
    ST7701S_CS_Dis();
    Backlight_Init();
}
void ST7701S_screen_init(ST7701S_handle St7701S_handle, unsigned char type)
{
    if (type == 1){
    // 2.1inch
    SPI_WriteComm(0xFF);
    SPI_WriteData(0x77);
    SPI_WriteData(0x01);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x10);

    SPI_WriteComm(0xC0);
    SPI_WriteData(0x3B);//Scan line	
    SPI_WriteData(0x00);

    SPI_WriteComm(0xC1);
    SPI_WriteData(0x0B);	//VBP
    SPI_WriteData(0x02);

    SPI_WriteComm(0xC2);
    SPI_WriteData(0x07);
    SPI_WriteData(0x02);

    SPI_WriteComm(0xCC);
    SPI_WriteData(0x10);

    SPI_WriteComm(0xCD);//RGB format
    SPI_WriteData(0x08);

    SPI_WriteComm(0xB0); // IPS   
    SPI_WriteData(0x00); // 255 
    SPI_WriteData(0x11); // 251    
    SPI_WriteData(0x16); // 247  down
    SPI_WriteData(0x0e); // 239    
    SPI_WriteData(0x11); // 231    
    SPI_WriteData(0x06); // 203    
    SPI_WriteData(0x05); // 175 
    SPI_WriteData(0x09); // 147    
    SPI_WriteData(0x08); // 108    
    SPI_WriteData(0x21); // 80  
    SPI_WriteData(0x06); // 52   
    SPI_WriteData(0x13); // 24    
    SPI_WriteData(0x10); // 16    
    SPI_WriteData(0x29); // 8    down
    SPI_WriteData(0x31); // 4    
    SPI_WriteData(0x18); // 0   

    SPI_WriteComm(0xB1);//  IPS	   
    SPI_WriteData(0x00);//  255 
    SPI_WriteData(0x11);//  251
    SPI_WriteData(0x16);//  247   down
    SPI_WriteData(0x0e);//  239
    SPI_WriteData(0x11);//  231
    SPI_WriteData(0x07);//  203    
    SPI_WriteData(0x05);//  175
    SPI_WriteData(0x09);//  147  
    SPI_WriteData(0x09);//  108  
    SPI_WriteData(0x21);//  80 
    SPI_WriteData(0x05);//  52   
    SPI_WriteData(0x13);//  24 
    SPI_WriteData(0x11);//  16 
    SPI_WriteData(0x2a);//  8  down 
    SPI_WriteData(0x31);//  4  
    SPI_WriteData(0x18);//  0  

    SPI_WriteComm(0xFF);
    SPI_WriteData(0x77);
    SPI_WriteData(0x01);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x11);

    SPI_WriteComm(0xB0);  //VOP  3.5375+ *x 0.0125
    SPI_WriteData(0x6d);  //5D
    
    SPI_WriteComm(0xB1); 	//VCOM amplitude setting  
    SPI_WriteData(0x37);  //
    
    SPI_WriteComm(0xB2); 	//VGH Voltage setting  
    SPI_WriteData(0x81);	//12V

    SPI_WriteComm(0xB3);
    SPI_WriteData(0x80);

    SPI_WriteComm(0xB5); 	//VGL Voltage setting  
    SPI_WriteData(0x43);	//-8.3V

    SPI_WriteComm(0xB7);
    SPI_WriteData(0x85);

    SPI_WriteComm(0xB8);
    SPI_WriteData(0x20);

    SPI_WriteComm(0xC1);
    SPI_WriteData(0x78);

    SPI_WriteComm(0xC2);
    SPI_WriteData(0x78);

    SPI_WriteComm(0xD0);
    SPI_WriteData(0x88);

    SPI_WriteComm(0xE0);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x02);

    SPI_WriteComm(0xE1);
    SPI_WriteData(0x03);	
    SPI_WriteData(0xA0);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x04);	
    SPI_WriteData(0xA0);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x20);
    SPI_WriteData(0x20);

    SPI_WriteComm(0xE2);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	  
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE3);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x11);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE4);
    SPI_WriteData(0x22);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE5);		
    SPI_WriteData(0x05);	
    SPI_WriteData(0xEC);	
    SPI_WriteData(0xA0);
    SPI_WriteData(0xA0);
    SPI_WriteData(0x07);	
    SPI_WriteData(0xEE);	
    SPI_WriteData(0xA0);
    SPI_WriteData(0xA0);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE6);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x11);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE7);
    SPI_WriteData(0x22);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xE8);		
    SPI_WriteData(0x06);	
    SPI_WriteData(0xED);	
    SPI_WriteData(0xA0);
    SPI_WriteData(0xA0);
    SPI_WriteData(0x08);	
    SPI_WriteData(0xEF);	
    SPI_WriteData(0xA0); 
    SPI_WriteData(0xA0);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);	
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);

    SPI_WriteComm(0xEB);
    SPI_WriteData(0x00); 	
    SPI_WriteData(0x00);
    SPI_WriteData(0x40);
    SPI_WriteData(0x40);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);  

    SPI_WriteComm(0xED);  
    SPI_WriteData(0xFF); 
    SPI_WriteData(0xFF);  
    SPI_WriteData(0xFF); 	
    SPI_WriteData(0xBA); 		
    SPI_WriteData(0x0A); 	
    SPI_WriteData(0xBF); 	
    SPI_WriteData(0x45); 	
    SPI_WriteData(0xFF); 
    SPI_WriteData(0xFF);  
    SPI_WriteData(0x54); 	
    SPI_WriteData(0xFB); 	
    SPI_WriteData(0xA0); 	
    SPI_WriteData(0xAB); 	
    SPI_WriteData(0xFF); 
    SPI_WriteData(0xFF); 
    SPI_WriteData(0xFF); 

    SPI_WriteComm(0xEF);
    SPI_WriteData(0x10); 
    SPI_WriteData(0x0D); 
    SPI_WriteData(0x04); 
    SPI_WriteData(0x08); 
    SPI_WriteData(0x3F); 
    SPI_WriteData(0x1F);

    SPI_WriteComm(0xFF);
    SPI_WriteData(0x77);
    SPI_WriteData(0x01);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x13);

    SPI_WriteComm(0xEF);
    SPI_WriteData(0x08);

    SPI_WriteComm(0xFF);
    SPI_WriteData(0x77);
    SPI_WriteData(0x01);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);
    SPI_WriteData(0x00);


    SPI_WriteComm(0x36);
    SPI_WriteData(0x00);

    SPI_WriteComm(0x3A);
    SPI_WriteData(0x66);

    SPI_WriteComm(0x11);
    Delay(480); 

    SPI_WriteComm(0x20); //
    Delay (120);
    SPI_WriteComm(0x29); 
    }
}