2021-10-13 07:46 AM
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.