Skip to main content
Graduate
April 23, 2025
Solved

Bug report: Incorrect validation in com port initalization of nucleo (G4) BSP

  • April 23, 2025
  • 2 replies
  • 412 views

When using the register callbacks feature ( USE_HAL_UART_REGISTER_CALLBACKS = 1) , the BSP does not register the default callback, causing the serial port not to work. 

Fix:

 

 
diff --git a/Drivers/BSP/STM32G4xx_Nucleo/stm32g4xx_nucleo.c b/Drivers/BSP/STM32G4xx_Nucleo/stm32g4xx_nucleo.c
index 89b0837..bd2dd97 100644
--- a/Drivers/BSP/STM32G4xx_Nucleo/stm32g4xx_nucleo.c
+++ b/Drivers/BSP/STM32G4xx_Nucleo/stm32g4xx_nucleo.c
@@ -384,7 +384,7 @@ int32_t BSP_COM_Init(COM_TypeDef COM, COM_InitTypeDef *COM_Init)
 /* Init the UART Msp */
 COM1_MspInit(&hcom_uart[COM]);
 #else
- if(IsComMspCbValid == 0U)
+ if(IsComMspCbValid[COM] == 0U)
 {
 if(BSP_COM_RegisterDefaultMspCallbacks(COM) != BSP_ERROR_NONE)
 {
 
    This topic has been closed for replies.
    Best answer by mƎALLEm

    Hello @lamare ,

    Issue reported. Internal Ticket 208444 (not accessible by community users).

    2 replies

    Technical Moderator
    April 23, 2025

    Hi @lamare 

    Do you configured the uart interrupt line and Nvic ?

    lamareAuthor
    Graduate
    April 24, 2025

    There's an obvious bug in the  stm32g4xx_nucleo.c file. At line 96 there's the declaration of the IsComMspCbValid array:

     

     
    static uint32_t IsComMspCbValid[COMn] = {0};
     
    At line 387 (BSP_COM_Init), it is supposed to check if the passed COM is valid, before attempting to register the callbacks, but the check is wrong:
    #if (USE_HAL_UART_REGISTER_CALLBACKS == 0)
     /* Init the UART Msp */
     COM1_MspInit(&hcom_uart[COM]);
    #else
     if(IsComMspCbValid == 0U)
     {
     if(BSP_COM_RegisterDefaultMspCallbacks(COM) != BSP_ERROR_NONE)
     {
     return BSP_ERROR_MSP_FAILURE;
     }
     }
    #endif

    Since IsComMspCbValid is a static array that has an address, this if statement:

    if(IsComMspCbValid == 0U)

    is *always* false, so BSP_COM_RegisterDefaultMspCallbacks is never called.

    So, the if statement should be:

     if(IsComMspCbValid[COM] == 0U)

     

    This way, it checks the value at offset COM in the array....

     

     

    mƎALLEmAnswer
    Technical Moderator
    April 24, 2025

    Hello @lamare ,

    Issue reported. Internal Ticket 208444 (not accessible by community users).