STM32的CAN總線的標(biāo)識(shí)符過濾器組使用注意事項(xiàng)
1. 標(biāo)識(shí)符過濾器是用于接收的,發(fā)送的時(shí)候無需設(shè)置過濾器,這點(diǎn)一定要整明白。
根據(jù)發(fā)送端發(fā)送來的幀數(shù)據(jù),通過標(biāo)識(shí)符過濾器就可以設(shè)置僅接收需要接收的幀數(shù)據(jù)有效降低CPU多余的處理時(shí)間。
2 什么是標(biāo)識(shí)符?
標(biāo)識(shí)符主要包括如下,也可以簡單的理解僅包含ID號(hào),但是在這里下面這些都是要包含的。
比如:數(shù)據(jù)幀和遙控幀,標(biāo)識(shí)符就包含在其中,所以發(fā)送端發(fā)幀數(shù)據(jù)給接收端后,接收端就可以通過硬件標(biāo)識(shí)符過濾器進(jìn)行篩選,節(jié)省了CPU時(shí)間:
3. 下面就是最重要的,STM32的CAN總線標(biāo)識(shí)符濾波器組包含兩種實(shí)現(xiàn)方法:
屏蔽位模式和標(biāo)識(shí)符列表模式,這兩種方式怎么理解呢,重點(diǎn)看下面的截圖:
書面上解釋屏蔽位模式和標(biāo)識(shí)符列表模式的區(qū)別
屏蔽位模式
在屏蔽位模式下,標(biāo)識(shí)符寄存器和屏蔽寄存器一起,指定報(bào)文標(biāo)識(shí)符的任何一位,應(yīng)該按照“必須匹配”或“不用關(guān)心”處理。
標(biāo)識(shí)符列表模式
在標(biāo)識(shí)符列表模式下,屏蔽寄存器也被當(dāng)作標(biāo)識(shí)符寄存器用。因此,不是采用一個(gè)標(biāo)識(shí)符加一個(gè)屏蔽位的方式,而是使用2個(gè)標(biāo)識(shí)符寄存器。接收?qǐng)?bào)文標(biāo)識(shí)符的每一位都必須跟過濾器標(biāo)識(shí)符相同。
===================================
標(biāo)識(shí)符的列表模式比較好理解,就是指的所有的過濾器寄存器位全部用于過濾,簡單的說就是發(fā)送端發(fā)送的標(biāo)識(shí)符所有的位必須跟接收端的濾波器寄存器定義一樣。有一個(gè)位定義不一樣,拒收此消息。
比STM32F103有14個(gè)過濾器組,如果采用兩個(gè)16位的過濾器形式,那么就可以固定識(shí)別出14 * 4 = 56個(gè)不同的標(biāo)識(shí)符,實(shí)際使用中也夠用了。為什么是乘以4,注意看上面的截圖,4個(gè)16位過濾器--標(biāo)識(shí)符列表
===================================
屏蔽位模式要稍麻煩一些,我們以2個(gè)16位過濾器---標(biāo)識(shí)符屏蔽為例進(jìn)行說明:
將過濾器寄存器分成兩個(gè)部分,標(biāo)識(shí)符寄存器和屏蔽位寄存器。
上面截圖中ID部分就是標(biāo)識(shí)符寄存器,屏蔽部分就是屏蔽位寄存器。
比如
ID : 0xFED0;
屏蔽:0xFFE0;
那就是表示,接收端接受幀數(shù)據(jù)時(shí),前11位的數(shù)值必須跟ID中定義的前11位一致,后面的5位數(shù)據(jù)忽略。
不管是什么值都可以。也即是說屏蔽位中的數(shù)值:
0: 不關(guān)心,該位不用于比較;
1: 必須匹配,到來的標(biāo)識(shí)符位必須與濾波器對(duì)應(yīng)的標(biāo)識(shí)符寄存器位相一致。
基于此原因:
為了過濾出一組標(biāo)識(shí)符,應(yīng)該設(shè)置過濾器組工作在屏蔽位模式。
為了過濾出一個(gè)標(biāo)識(shí)符,應(yīng)該設(shè)置過濾器組工作在標(biāo)識(shí)符列表模式。
評(píng)論