cancel
Showing results for 
Search instead for 
Did you mean: 

STM32f469xx bxCAN not switching from Normal to Initialization while connected to bus with controllers communicating at baud rate of 500K

BRaj.2
Associate

We have an STM32F469IG controller communicating with a similar one over CAN at 500K baud rate. The requirement is to change the baud rate while they are exchanging packets. We clear the SLEEP bit in CAN_MSR and set the INRQ bit. The hardware did not set the INAK bit. What could be the issue here?

Is it because at this baud rate, it is missing the 11 consecutive recessive bit sequence for the bus idle state?

3 REPLIES 3
DavideSail
Associate

I have the same problem on STM32 F103C8T6. I've tried with two different MCUs of the same kind and in both the fact that the hardware doesn't set the INAK bit causes the HAL_CAN_Init function to return the timeout error in the lines 

 /* Wait initialisation acknowledge */
  while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U)
  {
    if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
    {
      /* Update error code */
      hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;

      /* Change CAN state */
      hcan->State = HAL_CAN_STATE_ERROR;

      return HAL_ERROR;
    }
  }

if you solved please let me know

SofLit
ST Employee

Hello,

Yes it could be a missing 11 consecutive recessive bit sequence for the bus idle state.

If you disable the transmission of other nodes what happens?

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.

Thanks for the response. We have confirmed that 11 bits are missing and it works if we disable the transmission of remote node. However, it is not recommended as per our system.
Do we have a better solution ?