cancel
Showing results for 
Search instead for 
Did you mean: 

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

lamare
Associate II

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)
       {
 
1 ACCEPTED SOLUTION

Accepted Solutions

Hello @lamare ,

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

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.

View solution in original post

3 REPLIES 3
CMYL
ST Employee

Hi @lamare 

Do you configured the uart interrupt line and Nvic ?

lamare
Associate II

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....

 

 

Hello @lamare ,

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

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.