關於STM32 CAN的過濾器 濾波器

2021-09-21 06:58:27 字數 2443 閱讀 1823

1.在設定cantxmsg.stdid時注意需要將其右移一位,比如如下濾波器配置:

can_filterinitstructure.can_filternumber=0;

can_filterinitstructure.can_filtermode=can_filtermode_idmask;

can_filterinitstructure.can_filterscale=can_filterscale_32bit;

can_filterinitstructure.can_filteridhigh=0x7f20;

can_filterinitstructure.can_filteridlow=0x0000;

can_filterinitstructure.can_filtermaskidhigh=0xf0f0;

can_filterinitstructure.can_filtermaskidlow=0x0000;

can_filterinitstructure.can_filterfifoassignment=can_filter_fifo0;

can_filterinitstructure.can_filteractivation=enable;

can_filterinit(&can_filterinitstructure);

使用的是識別符號掩碼模式,接收到的訊息想要通過濾波器則stdid必須是0x7x2,這時我們可以設定 txmessage.stdid=0x7a2>>1,注意這裡必須要右移一位,因為標準識別符號的長度是11位,它占用的是can_tixr的高11位,所以在最後組合到can_tixr中時是會被左移21位的,如下:

if (txmessage->ide == can_id_standard)

乙個數如果被左移4的整數倍那麼其還可以保持數字不變,只是值擴大了,如0x7f在左移4位之後是0x7f0,7和f都不變只是最後增加了乙個0,左移8位則增加兩個0,但是如果是左移3位則變成0x3f8了,數字全變;因此我們這邊被左移 21位是會導致數字全變的,所以我們採取的措施就是在賦值的時候主動右移一位,這樣它左移21位就相當於原來是只左移20位了。

2.識別符號列表模式允許匹配多個id,你配置了幾個濾波器組就可以匹配幾個id,如下:

can_filterinitstructure.can_filternumber=0;

can_filterinitstructure.can_filtermode=can_filtermode_idlist;

can_filterinitstructure.can_filterscale=can_filterscale_32bit;

can_filterinitstructure.can_filteridhigh=0x7f20;

can_filterinitstructure.can_filteridlow=0x0000;

can_filterinitstructure.can_filtermaskidhigh=0x7f20;

can_filterinitstructure.can_filtermaskidlow=0x0000;

can_filterinitstructure.can_filterfifoassignment=can_filter_fifo0;

can_filterinitstructure.can_filteractivation=enable;

can_filterinit(&can_filterinitstructure);

can_filterinitstructure.can_filternumber=1;

can_filterinitstructure.can_filtermode=can_filtermode_idlist;

can_filterinitstructure.can_filterscale=can_filterscale_32bit;

can_filterinitstructure.can_filteridhigh=0x7c20;

can_filterinitstructure.can_filteridlow=0x0000;

can_filterinitstructure.can_filtermaskidhigh=0x7c20;

can_filterinitstructure.can_filtermaskidlow=0x0000;

can_filterinitstructure.can_filterfifoassignment=can_filter_fifo0;

can_filterinitstructure.can_filteractivation=enable;

can_filterinit(&can_filterinitstructure);

表示id為7f20和7c20的都可以通過。

3.在配置為識別符號列表模式時 can_filterid 和 can_filtermaskid 必須一樣才起效。

stm32 CAN過濾器組

在互聯型產品中,can1和can2分享28個過濾器組 其它stm32f103xx系列產品中有14個過濾器組 位寬設定 四種配置方式 1個32位的遮蔽位模式 2個32位的識別符號列表模式,可以過濾2個識別符號id 2個16位的遮蔽位模式 4個16位的識別符號列表模式,可以過濾4個標準識別符號id 擴充...

STM32,CAN匯流排過濾器的設定詳細講解

遮蔽位模式 在遮蔽位模式下,識別符號暫存器和遮蔽暫存器一起,指定報文識別符號的任何一位,應該按照 必須匹配 和 不用關心 處理。識別符號列表模式 在識別符號列表模式下,遮蔽暫存器也被當做識別符號暫存器用。因此,不是採用乙個識別符號加乙個遮蔽位的方式,而是採用兩個識別符號暫存器。接收報文的每一位都必須...

關於STM32的CAN的過濾器

關於stm32的can的過濾器 stm32普通型晶元的can有14組過濾器組,互聯型有28組過濾器組.一般我們用的都是普通型的,所以在本文中可以說stm32有14組過濾器組.根據配置,每1組過濾器組可以有1個,2個或4個過濾器.這些過濾器相當於關卡,每當收到一條報文時,can要先將收到的報文 從這些...