2015-11-11 08:50 AM
Hi every one, especially Mr.Clive, today i have problem with CAN FILTERS i want to allow all IDS from 100 to 1FF in other words block all messages after 0x0200
here is my code, Please help me, Thanks in advance
void CAN_FilterConfiguration(void) {
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN filter configuration */
// CAN_FilterInitStructure.CAN_FilterNumber = 0; // CAN 1
CAN_FilterInitStructure.CAN_FilterNumber = 14; // CAN 2
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; // FIFO = 0
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; // Filter mode = identifier mask based filtering
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0100 << 5;
CAN_FilterInitStructure.CAN_FilterIdLow = 0;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x01ff << 5;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
//Interrrupts
CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);
CAN_FilterInit(&CAN_FilterInitStructure);
}
#!stm32f4-disco #can-filter
2017-03-22 08:28 AM
Lot of thanks, Clive!
2018-11-28 06:44 AM
hi Clive
am working on STM32F417 with CAN extended ID .
i would like to reject the ID for example 0x0500xxxx.
I need to receive all messages which is > 0x0500xxxx.The only bit i need to check is 0x0500
I checked with ID masking mode , it was not possible to reject single ID .
I am not sure that ID list will serve this purpose .
How to reject signle ID using IDmasking or list mode ?
Appreciated to get some input
Thank YOU,
2018-11-28 06:47 AM
You filter the stuff you WANT to receive, it ignores the rest
2018-11-28 08:36 AM
Clive,
i supposed to receive 50 CAN devices with specific ID's.
Instead of filtering those ID's , i would like to reject one single ID from that group and received rest of them without any issue.
I just want to filter CAN ID with 0x05000xxx...rest of ID's like 0x0501XXXX ,0x0502XXXX rest of all ID's i would like to receive.
i tried in ID MASK mode
filter _id 0x05001000
mask id 0x05FFF000
here i can only receive 0x05001XXX ID's which is logical.This is working fine.
But i want to reject only 0x05000xxx ID , which i coulnd't do it with masking .
Do you see any possibility here ?
Appreciated for the help
2018-11-29 12:35 AM
Clive,
Did you see the any logic to reject the ID 0x0500xxx?
Thanks in advance for your help
2019-09-09 03:03 PM
Hi Clive,
i am facing a problem, i want to accept all messages to CAN except with the ID 0x17F00010 that uses a EXT ID. all my other messages are StdID. i am able to create filter that wastes the messages with IDs 0x10 but that also filters messages with ID like 0x710. need your help. Thanks in advance.
2019-09-09 03:29 PM
The filter only really allows for acceptance, you would need to have multiple filters to cherry pick things to reject by accepting everything around the specific thing you don't want. A narrow-band notch filter may be hard to achieve.
The mask should permit you to filter on STD/EXT ID. Bit 2 of the filter will be 1 for Extended Identifier Messages
What is the 29-bit ID you want to exclude? What other messages are you expecting? Create a list
2019-09-09 04:20 PM
i want to exclude the message with ExtId 0x17F00010 mean while i want to accept the messages with StidID 0x710.
2019-09-09 04:31 PM
if you can help me to make filter that passes the messages from 0x11 ...0x7FF, that will be great
2020-09-08 01:56 AM
hi @Community member ,
I tried to understand with this examples but it's not obvious for me...
For exemple we want to accept address between 0x008 and 0x04F
So Filter_id_high = 0x008<<5
but i don't know how to calculate the mask....
EDIT1: so we've (MASK & ID) = 0x008
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN filter configuration */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x008 << 5; //11-bit ID in top bits
CAN_FilterInitStructure.CAN_FilterIdLow = 0;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x??? << 5;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0;
Thx in advance,
Uvess