CAN_InitStructure.CAN_TTCM=DISABLE;//禁止時間觸發通信模式
CAN_InitStructure.CAN_ABOM=DISABLE;
CAN_InitStructure.CAN_AWUM=DISABLE;
CAN_InitStructure.CAN_NART=DISABLE;//CAN報文只被發送1次,不管發送的結果如何(成功、出錯或仲裁丟失)
CAN_InitStructure.CAN_RFLM=DISABLE;
CAN_InitStructure.CAN_TXFP=DISABLE;
CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
//CAN_Mode_LoopBack
//CAN_Mode_Normal
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;//1--16
CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;//1--8
CAN_InitStructure.CAN_Prescaler=2;
CAN_Init(&CAN_InitStructure);
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber=0;//選擇過濾器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定過濾器被設置為標識符屏蔽模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//給出過濾器位寬為32位
下面根據設置的參數不同來決定can總線can總線的配置情況:
1、對擴展數據幀進行過濾:(只接收擴展數據幀)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
(注:標準幀數據幀、標準遠程幀和擴展遠程幀均被過濾)
2、對擴展遠程幀過濾:(只接收擴展遠程幀)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
3、對標準遠程幀過濾:(只接收標準遠程幀)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
4、對標準數據幀過濾:(只接收標準數據幀)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
5、對擴展幀進行過濾:(擴展幀不會被過濾掉)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC;
6、對標準幀進行過濾:(標準幀不會被過濾掉)
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC;
注:slave_id為要過濾的id號。
評論
查看更多