各種匯流排協議彙總(四) CAN

2021-09-11 10:22:33 字數 3426 閱讀 5958

(二)、can波特率計算

(三)、can電平型別

(五)、can匯流排設定程式

(一)、can匯流排幀種類

can協議是通過以下5種型別的幀進行的:資料幀 、搖控幀 、錯誤幀 、過載幀 、幀間隔

1、資料幀

資料幀一般由7個段構成,即:

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

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

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

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

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

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

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

2、搖控幀

搖控幀只發id不發資料,將id發給另一台裝置,請求返回資料。

3、錯誤幀

can網路具有嚴格的錯誤診斷功能,該功能已固化在矽片之中,一旦錯誤被檢測,正在傳送的資料幀將會立即停止而待匯流排空閒時再次重發直至傳送成功,該過程並不需要cpu的干涉除非錯誤累計該傳送器退隱(bus off)。

4、過載幀

過載幀是接收節點向匯流排上其它節點報告自身接收能力達到極限的幀。

5、幀間隔

幀間隔是用來隔離資料幀(或者遙控幀)的,也就是說,資料幀(或者遙控幀)通過插入幀間隔可以將本幀與先行幀(資料幀、遙控幀、錯誤幀、過載幀)分隔開來。

(二)、can波特率計算

can通訊波特率計算公式:

baudrate = fpclk / [ (tbs1+tbs2+t) * brp]

tsjw:重新同步時間跳躍訊號 range from 1~3

tbs1:時間段1的時間單元 range from 1~16

tbs2:時間段2的時間單元 range from 1~8

brp:波特率分頻器

當然很多裝置的波特率都是固定的,比如以下這些裝置:

汽油車:500k,250k,125k,100k

柴油車:250k

伺服電機控制器:250k,125k

epec控制器:250k

消防主機通訊:5k,10k,13.3k

(三)、can電平型別

can_h

can_l

電位差電平

2.5v

2.5v

0v隱性電平

3.5v

1.5v

2v顯性電平

隱性電平->邏輯『1』     顯性電平->邏輯『0』

顯性電平能覆蓋陰性電平(驅動能力差異導致)

(五)、can匯流排設定程式

#include

"bsp_can_master.h"

/* * can 差分訊號的表示

* 1:隱性電平 h2.5v - l2.5v = 0v

* 0:顯性電平 h3.5v - l1.5v = 2v

*///主從機can設定都一樣,只不過傳送接收有些許差異

typedef

unsigned

char u8;

//接收資料緩衝區

u8 rxbuf[5]

;u8 rx_flag =0;

cantxmsg txmessage;

//傳送資料緩衝區

canrxmsg rxmessage;

//接收資料緩衝區

void

can_master_gpio_configuration

(void

)void

can_master_nvic_configuration

(void)/*

can 的中斷由傳送中斷、接收 fifo 中斷和錯誤中斷構成

傳送中斷由三個傳送郵箱任意乙個為空的事件構成。

接收 fifo 中斷分為 fifo0 和 fifo1 的中斷,接收 fifo 收到新的報文或報文溢位的事件可以引起中斷。

*/static

void

can_master_mode_configuration

(void

)/*我們還要對 can 的過濾器進行配置,使接收 fifo 只接收特定的報文。

所謂的過濾就是 can 介面根據收到報文的 id,選擇是否把該報文儲存到接收 fifo 中。*/

/*stm32 的 id 過濾方式有兩種。一種為識別符號列表模式,它把要接收報文的 id 列成一

個表,要求報文 id 與列表中的某乙個識別符號完全相同才可以接收,可以理解為白名單管

理。另一種稱為識別符號遮蔽模式,它把可接收報文 id 的某幾位作為列表,這幾位被稱為

遮蔽位,可以把它理解成關鍵字搜尋,只要遮蔽位(關鍵字)相同就符合要求。*/

static

void

can_master_filter_configuration

(void

)void

can_master_configuration

(void

)//打包並傳送報文 如果要觸發中斷的話 data裡資料要是0xabcd

void

can_master_setmsg

(uint8_t data)

void

can_master_sendmsg

(void

)void

usb_lp_can1_rx0_irqhandler

(void

)//中斷函式名在startup_stm32f10x_xx.s裡可看到

else

rx_flag =

0xff

;//接收失敗

}

CAN匯流排協議

can control controller area network 是控制 器 區域網的簡稱 can是一種有效支援分布式控制或實時控制的序列通訊網路,最初由德國bosch公司80年代用於汽車內部測試和控制儀器之間的資料通訊。目前can 匯流排規範已被國際標準化組織iso制訂為國際標準iso118...

CAN匯流排協議

can control controller area network 是控制 器 區域網的簡稱 can是一種有效支援分布式控制或實時控制的序列通訊網路,最初由德國bosch公司80年代用於汽車內部測試和控制儀器之間的資料通訊。目前can 匯流排規範已被國際標準化組織iso制訂為國際標準iso118...

can匯流排協議(二)

can協議已經由iso標準化,有2個版本,如iso11898和iso11519 2,它們之間在資料鏈路層沒什麼不同,但是在物理層有些區別。1 關於iso11898 這個標準用於高速can通訊。開始的時候,資料鏈路層和物理層都在標準iso11898中規定,後來被拆分為iso11898 1 僅涉及資料鏈...