新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32-CAN總線濾波器的使用

STM32-CAN總線濾波器的使用

作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
stm32的屏蔽濾波功能對ID是有要求的,在STM32 這里ID必須進(jìn)行移位處理.
對照下表:
我們這里全部設(shè)置成1,也就是只接受CAN_Filter中設(shè)置的節(jié)點(diǎn)的數(shù)據(jù)
STM32共有14組過濾器,用以對接收到的幀進(jìn)行過濾。每組過濾器包括了2個可配置的32位寄存器:CAN_FxR0和CAN_FxR1。對于過濾器組,可以將其配置成屏蔽位模式,這樣CAN_FxR0中保存的就是標(biāo)識符匹配值,CAN_FxR1中保存的是屏蔽碼,即CAN_FxR1中如果某一位為1,則CAN_FxR0中相應(yīng)的位必須與收到的幀的標(biāo)志符中的相應(yīng)位吻合才能通過過濾器;CAN_FxR1中為0的位表示CAN_FxR0中的相應(yīng)位可不必與收到的幀進(jìn)行匹配。過濾器組還可以被配置成標(biāo)識符列表模式,此時CAN_FxR0和CAN_FxR1中的都是要匹配的標(biāo)識符,收到的幀的標(biāo)識符必須與其中的一個吻合才能通過過濾。
注意:CAN_FilterIdHigh是指高16位CAN_FilterIdLow是低16位應(yīng)該將需要得到的幀的和過濾器的設(shè)置值坐對齊起。
例如:

CAN_FilterInitStructure.CAN_FilterNumber=0;//第一組過濾器
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//32位
CAN_FilterInitStructure.CAN_FilterIdHigh=(0x0635<<5);//接收ID為635的消息 11位幀ID 標(biāo)準(zhǔn)幀因此左移5
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;//
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;//第一組過濾器指向FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_FilterInitStructure.CAN_FilterNumber=1;//第二組過濾器
CAN_FilterInitStructure.CAN_FilterIdHigh=(0x06DB<<5);//接收ID位6db的消息
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO1;//第二組過濾器指向FIFO1
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN_IT_FMP0,ENABLE);
CAN_ITConfig(CAN_IT_FMP1,ENABLE);


關(guān)鍵詞: STM32CAN總線濾波

評論


技術(shù)專區(qū)

關(guān)閉