cancel
Showing results for 
Search instead for 
Did you mean: 

CAN Filter

I set on a slave

    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0064;    
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x00FF;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

master sends

TxMessage.ExtId = (opcode << 8) | 0х64;

but the slave dosen't get the message. without mask and filter the slave gets the message.

how should I set the mask and filter?

10 REPLIES 10

Thank you. That was my mistake. I have an extended ID.

So if I have an extended ID it should be this way?

 CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; 
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0064 << 3;        CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; 
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x00FF << 3; 
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);