From f074b830a466c3ca848f17f155f8cdc20fe6a993 Mon Sep 17 00:00:00 2001 From: Mike Tolkachev Date: Wed, 25 Mar 2026 16:11:05 -0300 Subject: [PATCH] stm32f469disco: add safety delays after writing LCD registers to avoid races --- platforms/stm32f469disco/bootloader/gui.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platforms/stm32f469disco/bootloader/gui.c b/platforms/stm32f469disco/bootloader/gui.c index e9470b1..b12ee28 100644 --- a/platforms/stm32f469disco/bootloader/gui.c +++ b/platforms/stm32f469disco/bootloader/gui.c @@ -70,6 +70,9 @@ /// Alert text y offset from the last line of alert text #define ALERT_ACTION_Y_OFF 50U +// Latency of LCD register write in milliseconds +#define LCD_REGISTER_LATENCY_MS 2U + /// GUI page identifier typedef enum gui_page_t { gui_page_progress = 0, ///< Progress page @@ -129,6 +132,7 @@ static void lcd_layer_init(uint16_t LayerIndex, uint32_t FB_Address) { BSP_LCD_SetBackColor(COLOR_BG); BSP_LCD_Clear(COLOR_BG); BSP_LCD_SetLayerVisible(LayerIndex, ENABLE); + HAL_Delay(LCD_REGISTER_LATENCY_MS); } /** @@ -149,10 +153,11 @@ static void lcd_init_if_needed(void) { BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER_BACKGROUND); // Turn the display on - HAL_Delay(100); + HAL_Delay(100U); BSP_LCD_DisplayOn(); ctx.displayed_page = gui_page_none; ctx.lcd_initialized = true; + HAL_Delay(LCD_REGISTER_LATENCY_MS); } } @@ -414,6 +419,7 @@ bool gui_update_progress(const char* caption, const char* operation, BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER_BACKGROUND); BSP_LCD_SetBackColor(COLOR_BG); BSP_LCD_Clear(COLOR_BG); + HAL_Delay(LCD_REGISTER_LATENCY_MS); ok = ok && draw_text(0, PAGE_CAPTION_Y, CENTER_MODE, PAGE_CAPTION_FONT, COLOR_TEXT, "Firmware Upgrade", text_render_uppercase, NULL);