CAN匯流排波特率計算方法(AHB:72MHz/APB1:36MHz)CAN外設掛載在APB1 上
CAN位時序(波特率計算方法)總結
Q 時間量子數
QT 時間量子
SS 同步段
TPS 傳播時間段
Tpbs1 相位緩衝段1
Tpbs2 相位緩衝段2
TBS1 Tpbs1 + TPS //因為程式設計時ST庫中的結構體把Tpbs1和TPS加在一起作為TBS1
BRP CAN的預分頻係數
FCLK CAN掛載匯流排時鐘
Baudrate 想要的CAN波特率
Q * BRP(未知)=FCLK / Baudrate(已知)
Q = TBS1 (Tpbs1+TPS) + Tpbs2+SS (1QT)
取樣點 = (TBS1 + SS) / Q
注:取樣點最好在80%左右(500K---80%),波特率增大比例降低,CIA推薦取樣點85%-90%。
期望在SS段切換電平,若電平切換提前則增長PBS1段,若電平切換延後則縮短上一幀的PBS2。
2022年3月9日20:50:54
幀格式
RTR 0是資料幀,1是遙控幀
IDE 0是標準幀,1是擴充套件幀
R0和R1 接收位(保留位),預設顯性電平
一位顯性電平0起始,7位隱性電平1結束
bxCAN :擴充套件的基本模式CAN
SOF :幀起始
標準識別符號:11位
擴充套件識別符號:29位
FIFO:先入先出儲存器,有六個腳分別是讀使能、寫使能、資料入、資料出、FIFO滿、FIFO空。
CAN2 的開始濾波器編號 n 是通過寫入CAN FMR 暫存器的 CAN2SB[5:0]配置的。
BxCAN模式
工作模式
初始化模式
INRQ:軟置一入
INAK:硬一,入成功
ACK:硬一,請求入的響應
正常模式
SYNC:硬檢測11連隱(匯流排空閒),可入正常
睡眠模式
SLEEP:軟置一入
SLAK:硬一,入成功
ACK:硬一,請求入的響應
若AWUM=1則硬體檢測匯流排活動硬體將SLEEP清0入正常(AWUM硬體喚醒允許位)
總結:!SLEEP+!INRQ+SYNC(硬)則入正常,SLEEP+!INRQ+ACK(硬)則入睡眠,!SLEEP+INRQ+ACK(硬)則入初始化。
測試模式
迴環模式
CAN_BTR_LBKM=1入迴環,可發不可收,有迴環,RX斷
靜默模式
CAN_BTR_SILM=1入靜默,可收不可發,有迴環,TX隱
迴環靜默模式
CAN_BTR_SILM=1&&
傳送流程
有三個郵箱,兩個3級深度接收FIFO(一個郵箱存一報文,一級深度存一個報文)
- 選擇一個空的郵箱把報文ID、資料長度、資料放進去(software)
- CAN_TIXR_TXRQ = 1,傳送請求(software)
- 郵箱掛號,等待成為最高優先順序(hardware)
- 成為最高優先順序,預定(hardware)
- CANBus空閒(11連隱)傳送,郵箱空(hardware)
- -------------------------------------------------------------------------------------------------------
- 傳送成功RQCP&&TXOK = 1,RQCP只要流程執行完就為1(不管成功失敗),TXOK只有成功傳送才為1。(hardware)
- 若匯流排仲裁引發失敗:CAN_TSR_ALST = 1(可設定自動重發)
- 若傳送錯誤引起失敗:CAN_TSR_TERP = 1(可設定自動重發)
- 傳送優先順序:CAN_MCR_TXFP = 0,ID小的先發,ID相同低郵箱先發
- 傳送優先順序:CAN_MCR_TXFP = 1,位FIFO模式郵箱,先放入郵箱的先發出
- 郵箱空標誌位:TME = 1,郵箱空(hardware)
- 終止傳送請求:ABRQ = 1,若郵箱處於掛號或預定狀態則直接清空郵箱TXOK = 0,RQCP =1,若郵箱處於傳送狀態並且傳送成功則TXOK = 1,RQCP =1,自動清空郵箱。不管怎樣只要將中止位置1,郵箱都會被清空。
- 自動重傳:NART = 1(禁止自動重傳)
-
接收郵箱空標誌:FOVR = 0為空,FOVR = 1為郵箱中存在有效報文。
接收報文數量標誌位:CAN_RFR_FMP[1:0]中儲存接收郵箱中報文數量。
郵箱釋放標誌:RFOM = 1釋放最深處的郵箱。
禁用FIFO鎖定:CAN_MCR_RFLM = 0,引發溢位的那條訊息會覆蓋最後接受的訊息。
啟用FIFO鎖定:CAN_MCR_RFLM = 0,引發溢位的那條訊息會被丟棄。