STM32 CAN通訊基礎(未完)

2021-10-24 04:53:48 字數 3244 閱讀 1793

can 是 controller area network 的縮寫(以下稱為 can),是 iso 國際標準化的序列通訊協議。

can 協議具有一下特點:

1) 多主控制。在匯流排空閒時,所有單元都可以傳送訊息(多主控制),而兩個以上的單元同時開始傳送訊息時,根據識別符號(id)決定優先順序。id 並不是表示傳送的目的位址,而是表示訪問匯流排的訊息的優先順序。

2) 系統的柔軟性。與匯流排相連的單元沒有類似於「位址」的資訊。因此在匯流排上增加單元時,連線在匯流排上的其它單元的軟硬體及應用層都不需要改變。

3) 通訊速度較快,通訊距離遠。最高 1mbps(距離小於 40m),最遠可達 10km(速率低於 5kbps)。

4) 具有錯誤檢測、錯誤通知和錯誤恢復功能。所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在傳送訊息的單元一旦檢測出錯誤,會強制結束當前的傳送。強制結束傳送的單元會不斷反覆地重新傳送此訊息直到成功傳送為止(錯誤恢復功能)。

5) 故障封閉功能。can 可以判斷出錯誤的型別是匯流排上暫時的資料錯誤(如外部雜訊等)還是持續的資料錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當匯流排上發生持續資料錯誤時,可將引起此故障的單元從匯流排上隔離出去。

6) 連線節點多。can 匯流排是可同時連線多個單元的匯流排。可連線的單元總數理論上是沒有限制的。但實際上可連線的單元數受匯流排上的時間延遲及電氣負載的限制。降低通訊速度,可連線的單元數增加;提高通訊速度,則可連線的單元數減少。

can 控制器根據兩根線上的電位差來判斷匯流排電平。匯流排電平分為顯性電平和隱性電平,二者必居其一。傳送方通過使匯流排電平發生變化,將訊息傳送給接收方.

顯性電平對應邏輯 0,can_h 和 can_l 之差為 2.5v 左右。而隱性電平對應邏輯 1,can_h 和 can_l 之差為 0v在。匯流排上顯性電平具有優先權,只要有乙個單元輸出顯性電平,匯流排上即為顯性電平。而**電平則具有包容的意味,只有所有的單元都輸出隱性電平,匯流排上才為隱性電平

can 協議是通過以下 5 種型別的幀進行的。其中,資料幀和遙控幀有標準格式和擴充套件格式兩種格式。標準格式有 11 個位的識別符號(id),擴充套件格式有 29 個位的 id。

||		幀型別  ||							幀用途 														

|| 資料幀 || 用於傳送單元向接收單元傳送資料的幀

|| 遙控幀 || 用於接收單元向具有相同 id 的傳送單元請求資料的幀

|| 錯誤幀 || 用於當檢測出錯誤時向其它單元通知錯誤的幀

|| 過載幀 || 用於接收單元通知其尚未做好接收準備的幀

|| 間隔幀 || 用於將資料幀及遙控幀與前面的幀分離開來的幀

我們這裡僅對資料幀進行詳細介紹,資料幀一般由 7 個段構成,即:

(1) 幀起始。表示資料幀開始的段。

(2) 仲裁段。表示該幀優先順序的段。

(3) 控制段。表示資料的位元組數及保留位的段。

(4) 資料段。資料的內容,一幀可傳送 0~8 個位元組的資料。

(5) crc 段。檢查幀的傳輸錯誤的段。

(6) ack 段。表示確認正常接收的段。

(7) 幀結束。表示資料幀結束的段。

資料幀仲裁段: id高位在前,地位在後,禁止高7位都為隱性,即不能id=1111111***

rtr,遠端請求位。0:資料幀;1:遠端幀

srr,替代遠端請求位。設定為1(隱性電平)

ide,識別符號選擇位。0:標準識別符號;1:擴充套件識別符號

資料幀控制段:由 6 個位構成,表示資料段的位元組數。

r0 和 r1 為保留位,必須全部以顯性電平傳送,但是接收端可以接收顯性、隱性及任意組合的電平

dlc 段為資料長度表示段,高位在前,dlc 段有效值為 0至8

ide,識別符號選擇位。0:標準識別符號;1:擴充套件識別符號

資料幀資料段:該段可包含 0~8 個位元組的資料。從最高位(msb)開始輸出。

資料幀crc段:該段用於檢查幀傳輸錯誤。由 15 個位的 crc 順序和 1 個位的 crc 界定符(用於分隔)組成;此段 crc 的值計算範圍包括:幀起始、仲裁段、控制段、資料段。接收方以同樣演算法計算crc值並進行比較,不一致時會通報錯誤。

資料幀ack 段:此段用來確認是否正常接收。由 ack 槽(ack slot)和 ack 界定符 2 個位組成。

傳送單元的 ack,傳送 2 個位的隱性位,而接收到正確訊息的單元在 ack 槽(ack slot)傳送顯性位,通知傳送單元正常接收結束,這個過程叫傳送 ack/返回 ack.

注意:傳送 ack 的是在既不處於匯流排關閉態也不處於休眠態的所有接收單元中,接收到正常訊息的單元(傳送單元不傳送 ack)。

資料幀幀結束:由7個位的隱性位組成。

位時序位速率:由傳送單元在非同步的情況下傳送的每秒鐘的位數稱為位速率。乙個位可分為 4 段,包括同步段(ss) ;傳播時間段(pts);相位緩衝段 1(pbs1) ;相位緩衝段 2(pbs2) 。每個段又由若干個tq(最小時間單位)構成,稱為位時序

位時間=1/波特率

位時序各段作用和tq:

乙個位的構成:

STM32 CAN通訊問題

檢舉 2012 07 04 20 59 breath123 分類 工程技術科學 瀏覽974次 can通訊測試中 使能報文標示符過濾器按照標示符的內容進行比對過濾,擴充套件id不是如下的就拋棄掉,是的話,會存入fifo0。can filterinitstructure.can filteridhigh...

stm32 can通訊傳送解釋

uint8 t can transmit can typedef canx,cantxmsg txmessage else if canx tsr can tsr tme1 can tsr tme1 else if canx tsr can tsr tme2 can tsr tme2 else if...

STM32 CAN通訊硬體設計

隔離方案就不說了,之前的usb轉485工具的開發在這塊已經有些基礎。其實板上非隔離can介面設計還有一些額外的注意點。回到最基礎的知識依然是cmos ttl 推挽 開漏的問題。正點原子開發板,can電路最為簡易,基本無可用性 看看乙個常用電路 非隔離 tx rx直連stm32引腳 ft 覺得還是要使...