久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > STM32-CAN總線濾波器的使用

STM32-CAN總線濾波器的使用

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

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 標準幀因此左移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);


關鍵詞: STM32CAN總線濾波

評論


技術專區

關閉