cancel
Showing results for 
Search instead for 
Did you mean: 

MIPI DSI Display Stays Black on STM32H757 using LVGL UI framework

JonConesa
Associate III

Hi,

I am working with a custom board using the STM32H757BIT and a Riverdi RVT70HSMNWC00 connected through MIPI DSI.
I followed the “lv_port_riverdi_70-stm32h7” example for the CubeMX setup and for the DSI display initialization.
The system runs from a 25 MHz external HSE, and I have tested the DSI clock using both the HSE and PLL2Q.
HAL version: V1.12.1.
The UI framework is LVGL.

My issue is that the display stays completely black. When LVGL triggers the flush callback, nothing appears on the screen.

The backlight PWM is working correctly: it runs at 48 kHz and currently uses a duty cycle above 90%, so the panel should be fully illuminated.

The screen content I want to show is extremely simple, just for testing:

    /*Change the active screen's background color*/
    lv_obj_set_style_bg_color(lv_screen_active(), lv_color_hex(0x003a57), LV_PART_MAIN);

    /*Create a white label, set its text and align it to the center*/
    lv_obj_t * label = lv_label_create(lv_screen_active());
    lv_label_set_text(label, "Hello world");
    lv_obj_set_style_text_color(lv_screen_active(), lv_color_hex(0xffffff), LV_PART_MAIN);
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);

I have the system configured with double buffering using external RAM, with the LVGL buffer in Direct mode.
The flush function is called only once. I have verified that the buffer currently used is the correct one, and debugging shows that the external RAM buffer is filled correctly with the expected image.

Flush CB

if (lv_display_flush_is_last(disp)) {
		SCB_CleanInvalidateDCache();
		// wait for VSYNC to avoid tearing
		while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
		// swap framebuffers (NOTE: LVGL will swap the buffers in the background, so here we can set the LCD framebuffer to the current LVGL buffer, which has been just completed)
		HAL_StatusTypeDef ret = HAL_LTDC_SetAddress(&hltdc, (uint32_t)(lv_display_get_buf_active(disp)->data), 0);
    SEGGER_RTT_printf(0, "HAL_LTDC_SetAddress returned %d\n", ret);
	}
	lv_display_flush_ready(disp);

Display Initialization Sequence

I am initializing the DSI display using the following commands:

  ret = HAL_DSI_Start(&hdsi);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_DCS_SHORT_PKT_WRITE_P0, DSI_SOFT_RESET, 0x0);
  HAL_Delay(120);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x87, 0x5A);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0xB0, 0x80);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0xB2, 0x50);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x80, 0x4B);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x81, 0xFF);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x82, 0x1A);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x83, 0x88);
  
  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x84, 0x8F);
  
  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x85, 0x35);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_GEN_SHORT_PKT_WRITE_P2, 0x86, 0xB0);
  HAL_Delay(50);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_DCS_SHORT_PKT_WRITE_P0, DSI_EXIT_SLEEP_MODE, 0x0);
  HAL_Delay(120);

  ret = HAL_DSI_ShortWrite(&hdsi, 0, DSI_DCS_SHORT_PKT_WRITE_P0, DSI_SET_DISPLAY_ON, 0x0);
  HAL_Delay(120);

 

Everything seems to execute without errors, but the display remains black.

Frequency

DSI: 62 MHz

DSI txclkesc 15.5 MHz

LTDC: 52 MHz

CubeMX setup

I am attaching images of my CubeMX configuration for:

  • System Clock
 
Screenshot 2026-02-25 at 13.17.36.png

Screenshot 2026-02-25 at 13.17.52.png
  • DSI
 
Screenshot 2026-02-25 at 13.18.21.png

Screenshot 2026-02-25 at 13.18.31.png

Screenshot 2026-02-25 at 13.18.39.png

Screenshot 2026-02-25 at 13.18.47.png

Screenshot 2026-02-25 at 13.18.54.png

Screenshot 2026-02-25 at 13.19.04.png

Screenshot 2026-02-25 at 13.19.12.png

Screenshot 2026-02-25 at 13.19.19.png

Screenshot 2026-02-25 at 13.19.28.png

LTDC:

Screenshot 2026-02-25 at 13.20.30.png

Screenshot 2026-02-25 at 13.20.36.png
Has anyone faced similar issues or sees something clearly wrong with this setup?
Any help would be greatly appreciated.
 
2 REPLIES 2
mƎALLEm
ST Employee

Hello,

For LVGL library better to ask your question in LVGL forum: https://forum.lvgl.io/

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

Hi @mƎALLEm 

 

My issue is not related to LVGL. The LVGL functions are triggering exactly when they should. The problem is related to the LTDC and DSI, the STM32 side of things.