cancel
Showing results for 
Search instead for 
Did you mean: 

How to configure FDCAN1 with multiple RX filters?

DLin.3
Associate II

I am using STM32G4 which allows 28 standard ID filters and 8 extended ID filters. This is from the Classic Frame Networking example:

/* Configure Rx filter */
  FDCAN_FilterTypeDef sFilterConfig;
 
  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(&hfdcan1, &sFilterConfig) != HAL_OK)
  {
    Error_Handler();
  }

If I have

hfdcan1.Init.StdFiltersNbr = 4; //max will be 28

And I want to keep the msg that has standard ID of 0x321 and 0x123.

To add second filter to FDCAN1, is this the correct method:

/* Configure Rx filter 1 */
  FDCAN_FilterTypeDef sFilterConfig_1;
  sFilterConfig_1.IdType = FDCAN_STANDARD_ID;
  sFilterConfig_1.FilterIndex = 0;
  sFilterConfig_1.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig_1.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig_1.FilterID1 = 0x321;
  sFilterConfig_1.FilterID2 = 0x7FF;
  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig_1) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* Configure Rx filter 2 */
  FDCAN_FilterTypeDef sFilterConfig_2;
  sFilterConfig_2.IdType = FDCAN_STANDARD_ID;
  sFilterConfig_2.FilterIndex = 1; // increments the filter ID parameter
  sFilterConfig_2.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig_2.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig_2.FilterID1 = 0x123; //filter 2 has differnt filter ID1
  sFilterConfig_2.FilterID2 = 0x7FF;
  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig_2) != HAL_OK) // configure with second filter 
  {
    Error_Handler();
  }

Please advise.

0 REPLIES 0