Skip to main content
Visitor II
February 13, 2024
Solved

FDCAN g431 doesn't filter

  • February 13, 2024
  • 2 replies
  • 1511 views

Hello, i'm testing FDCAN in my stm32g431 and it doesn't work well. Messeges goes throught it, even if ID doesn't match (TxHeader.Identifier = 0x102 shouldn't pass, but it does!)

 

static void MX_FDCAN1_Init(void)

{

hfdcan1.Instance = FDCAN1;

hfdcan1.Init.ClockDivider = FDCAN_CLOCK_DIV1;

hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;

hfdcan1.Init.Mode = FDCAN_MODE_EXTERNAL_LOOPBACK;

hfdcan1.Init.AutoRetransmission = DISABLE;

hfdcan1.Init.TransmitPause = DISABLE;

hfdcan1.Init.ProtocolException = DISABLE;

hfdcan1.Init.NominalPrescaler = 3;

hfdcan1.Init.NominalSyncJumpWidth = 1;

hfdcan1.Init.NominalTimeSeg1 = 2;

hfdcan1.Init.NominalTimeSeg2 = 2;

hfdcan1.Init.DataPrescaler = 1;

hfdcan1.Init.DataSyncJumpWidth = 1;

hfdcan1.Init.DataTimeSeg1 = 1;

hfdcan1.Init.DataTimeSeg2 = 1;

hfdcan1.Init.StdFiltersNbr = 1;

hfdcan1.Init.ExtFiltersNbr = 1;

hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;

 

if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)

{

Error_Handler();

}

 

FDCAN_FilterTypeDef sFilterConfig;

sFilterConfig.IdType = FDCAN_STANDARD_ID;

sFilterConfig.FilterIndex = 0; // Use the first filter bank

sFilterConfig.FilterType = FDCAN_FILTER_MASK; // Specify the filter type

sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; // Store matching messages in RX FIFO 0

sFilterConfig.FilterID1 = 0x103; // filter

sFilterConfig.FilterID2 = 0x103; // mask

 

if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK) {

// Handle error

}

}

 

 

    This topic has been closed for replies.
    Best answer by mƎALLEm

    Hello,

    You need to configure the global filter. For example:

     HAL_FDCAN_ConfigGlobalFilter(&hfdcan1,
    			 FDCAN_REJECT,
    			 FDCAN_REJECT,
    			 FDCAN_REJECT_REMOTE,
    			 FDCAN_REJECT_REMOTE);

     

    2 replies

    TomuelloAuthor
    Visitor II
    February 13, 2024

    configurating global filter was a solution C:

    mƎALLEmAnswer
    Technical Moderator
    February 21, 2024

    Hello,

    You need to configure the global filter. For example:

     HAL_FDCAN_ConfigGlobalFilter(&hfdcan1,
    			 FDCAN_REJECT,
    			 FDCAN_REJECT,
    			 FDCAN_REJECT_REMOTE,
    			 FDCAN_REJECT_REMOTE);