STM32f107 CAN濾波器設定
F107有CAN1、CAN2兩路,其濾波設定類似
stm32f10x系列CAN濾波器:
兩種模式:清單模式、屏蔽位模式
有分組**,*CAN1:0->13組,CAN2:14->28組;
濾波器組時間是***同或***關系
以下隻讨論屏蔽位模式、擴充幀濾波器
u32 ID1=0x10203008;//此ID與實際傳輸ID存在右移3位的關系,即實際傳輸ID為0x02040601
u32 ID2=0x50607008;
/
//CAN1
/
CAN_FilterInitStructure.CAN_FilterNumber=0; //濾波器0組
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//濾波器32位
CAN_FilterInitStructure.CAN_FilterIdHigh= (ID1&0xFFFF0000)>>16; //取ID1高四位0x1020
CAN_FilterInitStructure.CAN_FilterIdLow= (ID1|CAN_ID_EXT)&0xFFFF; //取ID1低四位0x3008
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0x00FF; //高四位 ,FF為必須比對,即收到的幀ID必須為0x0020
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0; //低四位
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_FilterInitStructure.CAN_FilterNumber=1; //濾波器1組
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//濾波器32位
CAN_FilterInitStructure.CAN_FilterIdHigh= (ID2&0xFFFF0000)>>16; //取ID1高四位0x5060
CAN_FilterInitStructure.CAN_FilterIdLow= (ID2|CAN_ID_EXT)&0xFFFF; //取ID1低四位0x7008
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF; //高四位 ,FF為必須比對,即收到的幀ID必須為0x5060
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0; //低四位
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/
//CAN2
/
CAN_FilterInitStructure.CAN_FilterNumber=14; //濾波器14組
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//濾波器32位
CAN_FilterInitStructure.CAN_FilterIdHigh= (ID1&0xFFFF0000)>>16; //取ID1高四位0x1020
CAN_FilterInitStructure.CAN_FilterIdLow= (ID1|CAN_ID_EXT)&0xFFFF; //取ID1低四位0x3008
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0x00FF; //高四位 ,FF為必須比對,即收到的幀ID必須為0x0020
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0; //低四位
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_FilterInitStructure.CAN_FilterNumber=15; //濾波器15組
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//濾波器32位
CAN_FilterInitStructure.CAN_FilterIdHigh= (ID2&0xFFFF0000)>>16; //取ID1高四位0x5060
CAN_FilterInitStructure.CAN_FilterIdLow= (ID2|CAN_ID_EXT)&0xFFFF; //取ID1低四位0x7008
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF; //高四位 ,FF為必須比對,即收到的幀ID必須為0x5060
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0; //低四位
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
l