Solved
About CAN filter
Hi
Many CAN messages are flowing on the CAN bus.
I would like to receive only ID 0x5C0 among these.
Please let me know the suitable settings to receive only 0x5C0 as a hardware filter without any software intervention, without any load on the MCU.
I wrote the code below. Naturally, I think ID mask mode is better.
I don't understand the settings for sFilterConfig.FilterMaskIdHigh and sFilterConfig.FilterMaskIdLow.
Is this correct?
void CanFilterConfig ( uint8_t filterNum, uint8_t fifoNum, uint32_t canId )
{
CAN_FilterTypeDef sFilterConfig;
sFilterConfig.FilterBank = filterNum;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = canId << 5;
sFilterConfig.FilterIdLow = 0x00000000U;
sFilterConfig.FilterMaskIdHigh = 0x0000FFFFU;
sFilterConfig.FilterMaskIdLow = 0x0000FFFFU;
sFilterConfig.FilterFIFOAssignment = fifoNum;
sFilterConfig.FilterActivation = ENABLE;
sFilterConfig.SlaveStartFilterBank = 14;
(void)HAL_CAN_ConfigFilter( &hcan, &sFilterConfig );
}
