STM32 CAN匯流排識別符號過濾器難點解析

2021-07-12 05:48:11 字數 2210 閱讀 1119

can匯流排是目前應用非常多的一種匯流排,在汽車電子,航空航天中應用廣泛,博主用的是戰艦的stm32開發板。can的介紹和功能特點就不講了,書本上網上都有,請大家在閱讀本文前了解can匯流排協議的特點和功能。今天博主將和大家共同學習can匯流排識別符號過濾器的使用(非常重要!)

請認真讀這段話(來自stm32中文參考手冊):在can協議裡,報文的識別符號不代表節點的位址,而是跟報文的內容相關的。因此,傳送者以廣播的形式把報文傳送給所有的接受者。節點在接收報文時,根據識別符號的值,決定軟體是否需要該報文;如果需要,就拷貝到sram裡;如果不需要,報文就丟棄,且無需軟體的干預。在,stm32f103zet6這款晶元中,bxcan控制器為應用程式提供了14個位寬可變的,可配置的過濾器組(13~0),以便只接受那些軟體需要的報文。硬體過濾的做法節省了cpu的開銷,否則就必須由軟體過濾從而占用一定的cpu開銷。每個過濾器組x由2個32位暫存器,can_fxr0和

can_fxr1組成。

有些讀者看了之後覺得,報文,識別符號,過濾器,他們是什麼?他們有什麼聯絡?有這些問題說明你就要懂了。。別急,聽我慢慢道來~~~

過濾器:過濾器在接收時使用,在傳送時不需配置過濾器!過濾器會根據識別符號而決定節點要不要傳送者發過來的報文。通俗一點:是我想要的,我就要;不是我想要的,我就不要。

報文:報文(message)是網路中交換與傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,期長短不一致,長度不限且可變。注意(這裡才是重點!):報文也是網路傳輸的單位,傳輸過程中會不斷的封裝成分組,包,幀來傳輸,封裝的方式就是加一些資訊段,那些就是報文頭以一定格式組織起來的資料。

這裡補充一點:can匯流排上的報文傳輸由4個不同的幀型別表示和控制。1、資料幀 2、遠端幀 3、錯誤幀 4、過載幀。接著看下文:

識別符號:識別符號主要包括如下,也可以理解為僅包含id號,但是在這裡下面這些都是要包含的:

例如在資料幀和遠端幀中,識別符號都是包含在裡面的,而資料幀和遠端幀是報文的一種表示型別。故,傳送端發幀資料給接收端後,接收端根據識別符號來進行篩選,決定取捨。

看完上面三個定義,再回頭看上面那段話應該沒有問題了吧~

下面重點介紹過濾器:

stm32提供兩種過濾器模式供使用者選擇,遮蔽位模式(識別符號遮蔽位模式)和識別符號列表模式。上圖:

遮蔽位模式:

在遮蔽位模式下,識別符號暫存器和遮蔽暫存器一起,指定報文識別符號的任何一位,應該按照「必須匹配」和「不用關心」處理。

識別符號列表模式:

在識別符號列表模式下,遮蔽暫存器也被當做識別符號暫存器用。因此,不是採用乙個識別符號加乙個遮蔽位的方式,而是採用兩個識別符號暫存器。接收報文的每一位都必須跟過濾器識別符號相同。

識別符號列表模式很好理解:就是指過濾器暫存器的所有位都用來過濾,也就是說,傳送端傳送的識別符號所有的位必須和接收端的過濾器的暫存器定義的一模一樣,有乙個為不同,都拒收次訊息!

而遮蔽位模式稍微複雜一點,但也好理解:舉個簡單的例子,我們過濾器組0工作在:1個32位過濾器-識別符號遮蔽模式,然後設定can_f0r1=0xffff0000,can_f0r2=0xff00ff00。其中,存放到

can_f0r1的值是期望收到的id,即我們希望收到的映像(stid+extid+ide+rtr)最好是:0xffff0000。而

0xff00ff00就是設定我們需要必須關心的id,表示收到的映像,其位[31:24]和位[15:8]這16個位,必須和

can_f0r1中對應的位一模一樣,而另外的16個位則不必關心,可以一樣,也可以不一樣,都認為是正確的id,即收到的映像必須是0xffxx00xx,才算是正確的(x表示不關心)。也就是說,遮蔽位(

can_f0r2)中的數值:

1:必須匹配,到來的識別符號位必須和過濾器對應的識別符號暫存器位相一致。

0:不關心,

可以一樣,也可以不一樣,都認為是正確的id

因此:為了過濾出一組識別符號,應該設定過濾器組工作在遮蔽位模式

為了過濾出乙個識別符號,

應該設定過濾器組工作在識別符號列表模式

注意:應用程式不用的過濾器組,應該保持在禁用模式。(這個很好理解)

最後關於can的傳送和接收流程,這個可以看看手冊上的流程圖,講的很詳細。

關於can匯流排網上有很多優秀的文章,讀者可以去多瀏覽。由於博主水平有限,還請各位讀者指正,共同進步!

STM32CAN匯流排協議講解

月報 最近學習了stm32的can匯流排協議,使用的是野火的開發板 can 是controller area network 的縮寫 can bus 具有佈線簡單 典型的匯流排型結構 可最大限度的節約佈線與維護成本 穩定可靠 實時 抗干擾能力強 傳輸距離遠等特點,是一種成功的匯流排。不僅在汽車行業得...

stm32 CAN過濾器組

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

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

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