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_FilterInitStructure.CAN_FilterNumber=0;
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh=(0x0635<<5);
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_FilterInitStructure.CAN_FilterNumber=1;
CAN_FilterInitStructure.CAN_FilterIdHigh=(0x06DB<<5);
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO1;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN_IT_FMP0,ENABLE);
CAN_ITConfig(CAN_IT_FMP1,ENABLE);
STM32-CAN总线滤波器的运用
stm32的屏蔽滤波功能对ID是有要求的,在STM32这里ID必须进行移位处理对照下表:我们这里全部设置成1,也就是只接受CAN_Filter中设置的节
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/258405.html