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&&CAN_BTR_LBKM=1入,不可收不可發,有回環,RX斷TX隱
發送流程
有三個郵箱,兩個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,引發溢出的那條消息會被丟棄。