18.1 CAN協(xié)議
18.1.1 協(xié)議概述
CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能與可靠性被認同,現(xiàn)在被廣泛運用在工業(yè)自動化,船舶等當(dāng)面,目前最熱門的國六標準,J1939通信協(xié)議就是以CAN協(xié)議為基礎(chǔ)設(shè)計的。
CAN協(xié)議最遠通信距離可達10km,與485相似,CAN也有兩種電平,分別為顯性電平與隱性電平,當(dāng)CAN_H與CAN_L電壓一致的時候為隱性電平,反之為顯性電平。實際上隱性電平代表邏輯電平1,顯性電平代表邏輯電平0,CAN在通信的時候,也需要在每個設(shè)備輸出端并聯(lián)1個120Ω的終端匹配電阻,用于進行阻抗匹配。
18.1.2 通信組成
CAN協(xié)議通過5種類型的幀進行數(shù)據(jù)通信:數(shù)據(jù)幀,遙控幀,錯誤幀,過載幀和間隔幀,其中數(shù)據(jù)幀與遙控幀具有標準格式與擴展格式兩種,標準格式有11個位的標識符,擴展格式則有29個位的標識符,五種幀的功能如下所示。
(1)數(shù)據(jù)幀:用于實際數(shù)據(jù)傳輸
(2)遙控幀:用于接收端向具有相同ID的發(fā)送端請求數(shù)據(jù)
(3)錯誤幀:用于檢測報錯時通知其他設(shè)備
(4)過載幀:用于接收端通報尚未準備好接收準備
(5)間隔幀:用于將數(shù)據(jù)幀與遙控幀和前面的幀分割
完整的數(shù)據(jù)幀構(gòu)成如下圖所示。
數(shù)據(jù)幀一般由7段組成:
(1)幀起始:即數(shù)據(jù)幀開始的段,標準幀和擴展幀都是由1個位的顯性電平表示幀起始
(2)仲裁段:表示該幀優(yōu)先級,標準幀和擴展幀格式在這一段結(jié)構(gòu)如下圖所示。
其中RTR位用于標識是否是遠程幀(0代表數(shù)據(jù)幀;1代表遠程幀),IDE位為標識符選擇位(0表示使用標準標識符;1表示使用擴展標識符),SRR位為代替遠程請求位,為隱性位,代替了標準幀中的RTR位。
(3)控制段:表示數(shù)據(jù)的字節(jié)數(shù)即保留位,由6個位構(gòu)成,表示數(shù)據(jù)段的字節(jié)數(shù)。標準幀和擴展幀的控制段結(jié)構(gòu)如下圖所示。
r0和r1為保留位,必須全部以顯性電平發(fā)送,但是接收端可以接收顯性、隱性及任意組合的電平。DLC段為數(shù)據(jù)長度表示段,高位在前,DLC段有效值為08,但是接收方接收到915的時候并不認為是錯誤。
(4)數(shù)據(jù)段:數(shù)據(jù)段內(nèi)容,一段可以發(fā)送0~8個字節(jié)的數(shù)據(jù),從最高位MSB開始輸出
(5)CRC校驗:CRC校驗數(shù)據(jù)完整性
(6)應(yīng)答段:表示正常接收
(7)幀結(jié)束:表示該幀結(jié)束
18.1.3 通信參數(shù)
由發(fā)送單元在非同步的情況下發(fā)送的每秒鐘的位數(shù)稱為位速率。一個位可分為4段。
(1)同步段(SS)
(2)傳播時間段(PTS)
(3)相位緩沖段1(PBS1)
(4)相位緩沖段2(PBS2)
這些段又由可稱為Tq的最小時間單位構(gòu)成。1位分為4個段,每個段又由若干個Tq構(gòu)成,這稱為位時序。1位由多少個Tq構(gòu)成、每個段又由多少個Tq構(gòu)成等,可以任意設(shè)定位時序。通過設(shè)定位時序,多個單元可同時采樣,也可任意設(shè)定采樣點。各段的作用和Tq數(shù)如下表所示。
18.1.4 總線仲裁
在總線空閑態(tài),最先開始發(fā)送消息的單元獲得發(fā)送權(quán)。當(dāng)多個單元同時開始發(fā)送時,各發(fā)送單元從仲裁段的第一位開始進行仲裁。連續(xù)輸出顯性電平最多的單元可繼續(xù)發(fā)送。實現(xiàn)過程如下圖所示。
單元1和單元2同時開始向總線發(fā)送數(shù)據(jù),開始部分他們的數(shù)據(jù)格式是一樣的,故無法區(qū)分優(yōu)先級,直到T時刻,單元1輸出隱性電平,而單元2輸出顯性電平,此時單元1仲裁失利,立刻轉(zhuǎn)入接收狀態(tài)工作,不再與單元2競爭,而單元2則順利獲得總線使用權(quán),繼續(xù)發(fā)送自己的數(shù)據(jù)。這就實現(xiàn)了仲裁,讓連續(xù)發(fā)送顯性電平多的單元獲得總線使用權(quán)
18.1.5 STM32 CAN模組簡介
STM32F1系列自帶的是基本擴展CAN,支持CAN協(xié)議的2.0A和2.0B,支持報文發(fā)送的優(yōu)先級要求可軟件配置,最大通信速率1Mbps,3個發(fā)送郵箱和3級深度的2個接收緩存器FIFO,28個可變的濾波器組,STM32的CAN模組結(jié)構(gòu)如下圖所示。
從上面結(jié)構(gòu)可以看出,兩個CAN都分別具備自己的發(fā)送與接收郵箱,但是28個濾波器卻是公用的,通過FMR寄存器可以設(shè)置濾波器的分配方式,STM32的每個濾波器組的位寬都可以獨立配置,根據(jù)位寬的不同,每個濾波器組可以提供
(1)1個32位過濾器:包含STDID[10:0],EXTID[17:0],18位擴展ID,IDE和RTR位
(2)1個16位過濾器:包含STDID[10:0],IDE,RTR和EXTID[17:15]
此外過濾器可以配置為屏蔽位模式與標識符列表模式。
(1)在屏蔽位模式下,標識符寄存器和屏蔽寄存器一起,指定報文標識符的任何一位,應(yīng)該按照“必須匹配”或“不用關(guān)心”處理
(2)標識符列表模式下,屏蔽寄存器也被當(dāng)作標識符寄存器用。因此,不是采用一個標識符加一個屏蔽位的方式,而是使用2個標識符寄存器。接收報文標識符的每一位都必須跟過濾器標識符相同。
18.1.6 CAN的發(fā)送流程
第1步:程序選擇1個空置的郵箱(TME=1),設(shè)置標識符(ID),數(shù)據(jù)長度和發(fā)送數(shù)據(jù)
第2步:設(shè)置CAN_TIxR的TXRQ位為1,請求發(fā)送
第3步:郵箱掛號(等待成為最高優(yōu)先級)?
第4步:預(yù)定發(fā)送(等待總線空閑)
第5步:發(fā)送
第6步:郵箱空置
整個發(fā)送流程如下圖所示。
18.1.7 CAN的接收流程
CAN接收到的有效報文,被存儲在3級郵箱深度的FIFO中。FIFO完全由硬件來管理,從而節(jié)省了CPU的處理負荷,簡化了軟件并保證了數(shù)據(jù)的一致性。應(yīng)用程序只能通過讀取FIFO輸出郵箱,來讀取FIFO中最先收到的報文。這里的有效報文是指那些正確被接收的(直到EOF都沒有錯誤)且通過了標識符過濾的報文。前面我們知道CAN的接收有2個FIFO,我們每個濾波器組都可以設(shè)置其關(guān)聯(lián)的FIFO,通過CAN_FFA1R的設(shè)置,可以將濾波器組關(guān)聯(lián)到FIFO0/FIFO1。CAN接收流程為:
FIFO空->收到有效報文->掛號1(存入FIFO的一個郵箱,這個由硬件控制,我們不需要理會)->收到有效報文->掛號2->收到有效報文->掛號3->收到有效報文->溢出
這個流程里面,我們沒有考慮從FIFO讀出報文的情況,實際情況是:我們必須在FIFO溢出之前,讀出至少1個報文,否則下個報文到來,將導(dǎo)致FIFO溢出,從而出現(xiàn)報文丟失。每讀出1個報文,相應(yīng)的掛號就減1,直到FIFO空,完整的接收流程圖如下圖所示。
FIFO接收到的報文數(shù),我們可以通過查詢CAN_RFxR的FMP寄存器來得到,只要FMP不為0,我們就可以從FIFO讀出收到的報文。
18.1.8 通信速率計算
根據(jù)通信參數(shù)小節(jié)我們可以知道1個位是由4個段組成,分別為同步段(SS),傳播時間段(PTS),相位緩沖段1(PBS1),相位緩沖段2(PBS2),STM32內(nèi)部將傳播時間段與相位緩沖段1合并為時間段1,這樣1個位就是有3個段組成,即同步段SS,時間段1和時間段2(即相位緩沖段),由于波特率的定義是1秒內(nèi)發(fā)送二進制位的個數(shù),所以,CAN波特率的計算公式為
18.1.9 STM32F1系列CAN測試模式
(1)靜默模式
通過對CAN_BTR寄存器的SILM位置1,來選擇靜默模式。在靜默模式下,CAN可以正常地接收數(shù)據(jù)幀和遠程幀,但只能發(fā)出隱性位,而不能真正發(fā)送報文。如果bxCAN需要發(fā)出顯性位(確認位、過載標志、主動錯誤標志),那么這樣的顯性位在內(nèi)部被接回來從而可以被CAN內(nèi)核檢測到,同時CAN總線不會受到影響而仍然維持在隱性位狀態(tài)。因此,靜默模式通常用于分析CAN總線的活動,而不會對總線造成影響-顯性位(確認位、錯誤幀)不會真正發(fā)送到總線上,靜默模式等效圖如下圖所示。
(2)環(huán)回模式
通過對CAN_BTR寄存器的LBKM位置1,來選擇環(huán)回模式。在環(huán)回模式下,CAN把發(fā)送的報文當(dāng)作接收的報文并保存(如果可以通過接收過濾)在接收郵箱里,環(huán)回模式等效圖如下圖所示。
(3)環(huán)回靜默模式
該模式可用于“熱自測試”,即可以像環(huán)回模式那樣測試CAN,但卻不會影響CANTX和CANRX所連接的整個CAN系統(tǒng)。在環(huán)回靜默模式下,CANRX引腳與CAN總線斷開,同時CANTX引腳被驅(qū)動到隱性位狀態(tài),環(huán)回靜默模式等效圖如下圖所示。
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1022瀏覽量
41046 -
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
2010瀏覽量
65876 -
CAN
+關(guān)注
關(guān)注
57文章
2903瀏覽量
467226
發(fā)布評論請先 登錄
介紹一下stm32F103C8T6的can總線通信實驗
串口通信實驗分享
ALIENTEK_MINISTM32_實驗19_無線通信實驗
STM32各模塊學(xué)習(xí)筆記
STM32CubMX自學(xué)筆記(七)—CAN通信實驗

16 . USART 串口通信實驗

評論