Если не ошибаюсь, то в стандарте Can нет такого понятия, как адрес устройства. Есть понятие - идентификатор посылки.
В системе, где несколько устройств, и каждое из устройств может отправить посылку любому другому, целесообразно, чтобы в идентификаторе содержалась след информация:
Идентификатор получателя, идентификатор отправителя, тип посылки.
Соответственно фильтры настраиваются на идентификаторы посылок.
Например так:
CODE
// -------------------------------------------- // Настройки модуля фильтрации
setmask(CAN1->FMR, CAN_FMR_FINIT); // To Initialization mode for the filter
// -------------------------------------------- // Настройки банка 0
clrmask(CAN1->FA1R, CAN_FA1R_FACT0); // Deactivation
clrmask(CAN1->FM1R, CAN_FM1R_FBM0); // Mask mode
clrmask(CAN1->FS1R, CAN_FS1R_FSC0); // 16-bit scale
clrmask(CAN1->FFA1R, CAN_FFA1R_FFA0); // Assign to FIFO 0
CAN1->sFilterRegister[0].FR1 = ((int32u)0x1FF8 << 16) + ((int32u)Dev2_to_Dev1 << 5);
CAN1->sFilterRegister[0].FR2 = ((int32u)0x1FF8 << 16) + ((int32u)Dev3_to_Dev1 << 5);
setmask(CAN1->FA1R, CAN_FA1R_FACT0); // Activation
clrmask(CAN1->FMR, CAN_FMR_FINIT); // From Initialization mode for the filter
Вроде бы работало, детали уже увы не помню, надо заглядывать в документацию.