cancel
Showing results for 
Search instead for 
Did you mean: 

FDCAN1 and FDCAN2 in STM32G0B1RCI6N

lastsamurai
Associate III

Hi,

I configured FDCAN1 in classic format and was able to send CAN messages to a recipient. However, if I want to try the same with FDCAN2 it does not work and the TX FIFO gets full and goes to the error handler.

However, If I change FDCAN_Config to use hfdcan2 instead of hfdcan1 as below

/**
  * @brief  Configures the FDCAN.
  * @param  None
  * @retval None
  */
static void FDCAN_Config(void)
{
  FDCAN_FilterTypeDef sFilterConfig;
 
  /* Configure Rx filter */
  sFilterConfig.IdType = FDCAN_STANDARD_ID;
  sFilterConfig.FilterIndex = 0;
  sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig.FilterID1 = 0x321;
  sFilterConfig.FilterID2 = 0x7FF;
  if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* Configure global filter:
     Filter all remote frames with STD and EXT ID
     Reject non matching frames with STD ID and EXT ID */
  if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan2, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* Start the FDCAN module */
  if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
  {
    Error_Handler();
  }
 
  if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* Prepare Tx Header */
  TxHeader.Identifier = 0x18FEC131;
  TxHeader.IdType = FDCAN_EXTENDED_ID;
  TxHeader.TxFrameType = FDCAN_DATA_FRAME;
  TxHeader.DataLength = FDCAN_DLC_BYTES_8;
  TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
  TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
  TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
  TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
  TxHeader.MessageMarker = 0;
}

and try post to FIFO as follows, it goes to error state. Verified hardware and connections and found no issues (unless there is an issue under BGA which is unlikely)

/* Start the Transmission process */
        if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TxHeader, TxData) != HAL_OK)
        {
          /* Transmission request Error */
          Error_Handler();
        }

BIt puzzled here. Thanks in advance.

1 ACCEPTED SOLUTION

Accepted Solutions
lastsamurai
Associate III

Turned out to be a hardware issue. Code has always been working.

View solution in original post

1 REPLY 1
lastsamurai
Associate III

Turned out to be a hardware issue. Code has always been working.