Skip to main content
lastsamurai
Associate
July 4, 2022
Solved

FDCAN1 and FDCAN2 in STM32G0B1RCI6N

  • July 4, 2022
  • 1 reply
  • 1117 views

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.

This topic has been closed for replies.
Best answer by lastsamurai

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

1 reply

lastsamurai
lastsamuraiAuthorBest answer
Associate
July 6, 2022

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