Tentative d’affichage à cristaux liquides STM32CubeF7 BSP

J’essaie d’afficher une chaîne sur la LED de stm32f769i-disco avec les bibliothèques BSP de STM32CubeF7. Cependant, rien ne se passe. Voici le code:

#include "stm32f7xx_hal.h" #include "stm32f769i_discovery.h" #include "stm32f769i_discovery_lcd.h" #include "stm32f7xx.h" #include  char str[] = "Hello from BSP LCD demo!"; void LCDInit() { // Initialize the LCD using the BSP_LCD_Init() function. BSP_LCD_Init(); // Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. //BSP_LCD_SelectLayer(0); BSP_LCD_LayerDefaultInit(LTDC_DEFAULT_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_DEFAULT_ACTIVE_LAYER); // Enable the LCD display using the BSP_LCD_DisplayOn() function. BSP_LCD_DisplayOn(); // Clear the whole LCD using BSP_LCD_Clear() function or only one specified ssortingng line using the BSP_LCD_ClearSsortingngLine() function. BSP_LCD_Clear(LCD_COLOR_LIGHTGRAY); HAL_Delay(1000); BSP_LCD_SetBackColor(LCD_COLOR_LIGHTGRAY); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); // Display a character on the specified line and column using the BSP_LCD_DisplayChar() function or a complete ssortingng line using the BSP_LCD_DisplaySsortingngAtLine() function. BSP_LCD_DisplaySsortingngAt(100, 100, str, CENTER_MODE); } int main(void) { LCDInit(); BSP_LED_Init(LED_GREEN); while(1) { for (int i=0;i<1000000;i++); BSP_LED_Toggle(LED_GREEN); } return 0; } 

Si je supprime l’appel à LCDInit, ma diode bascule, si j’appelle LCDInit, rien ne se passe (la diode ne bascule pas) et l’écran LCD rest noir. Des idées?

J’ai essentiellement essayé de suivre les instructions de stm32f769i_discovery_lcd.c, sans succès:

 2. Driver description: --------------------- + Initialization steps: o Initialize the LCD using the BSP_LCD_Init() function. o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. o Enable the LCD display using the BSP_LCD_DisplayOn() function. + Options o Configure and enable the color keying functionality using the BSP_LCD_SetColorKeying() function. o Modify in the fly the transparency and/or the frame buffer address using the following functions: - BSP_LCD_SetTransparency() - BSP_LCD_SetLayerAddress() + Display on LCD o Clear the whole LCD using BSP_LCD_Clear() function or only one specified ssortingng line using the BSP_LCD_ClearSsortingngLine() function. o Display a character on the specified line and column using the BSP_LCD_DisplayChar() function or a complete ssortingng line using the BSP_LCD_DisplaySsortingngAtLine() function. o Display a ssortingng line on the specified position (x,y in pixel) and align mode using the BSP_LCD_DisplaySsortingngAtLine() function. o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) on LCD using the available set of functions. 

EDIT: lors du débogage avec OpenOCD, gdb se bloque si je définis le point d’arrêt sur la ligne BSP_LCD_Init (). Si je lance à nouveau le débogueur, je peux voir que le programme est bloqué à la WWDG_IRQHandler ().

Au cas où cela aiderait jamais quelqu’un, je vais poster ce qui s’est avéré être mon problème (avec la bibliothèque HAL):

Je n’ai pas particulièrement ajouté de code traitant de la redondance des gestionnaires d’interruptions. Même l’appel HAL_init () a été bloqué, car je n’avais pas ajouté ce qui suit:

 void SysTick_Handler(void) { HAL_IncTick(); } 

Pour cette raison, mon HAL_Delay attendrait pour toujours. Il est probablement préférable d’utiliser les modèles fournis dans le dossier des modèles STM32CubeF7 lors du démarrage, afin de ne pas commettre les mêmes erreurs que moi.