STM32——CAN通訊

持枢丶發表於2024-02-28

STM32-CAN通訊

一、傳送和接收流程

can通訊傳輸的是一種差分訊號,關於具體的硬體電路略。

1、傳送流程
  • 前置工作:如 時鐘的開啟、引腳的配置;CAN郵箱和模式等配置參考下面或HAL庫選擇

  • 選擇一個空置的郵箱(判斷空置:CAN_TSR的TMEx位);

  • 在這個空置郵箱中按資料幀格式設定ID、資料長度以及要傳送的資料;

  • 請求傳送(CAN_TIxR 的 TXRQ = 1 );

  • 後面的是硬體來實現的(這個過程可以被軟體打斷):

    • 郵箱掛號(等優先);
    • 預定(等匯流排);
    • 傳送;
    • 空置。
2、接收流程
  • 前置工作略
  • 配置過濾器:給過濾器繫結一個FIFO,之後以FIFO0為例;
  • 硬體自動處理:收到報文後掛號到FIFO0(繫結的)的空閒郵箱深度;如果郵箱深度,再收到報文會溢位;
    • 這個掛號和溢位都可以觸發中斷
  • 軟體接收:有個郵箱深度裡掛過一次號即存一個報文,所以,可以透過掛號的數量來獲取到存進來的報文數量。具體參考暫存器的位。

二、資料幀格式

  • 標準幀

    • 仲裁段:
      • SOF : 幀起始,1bit
      • ID : 11bit
      • RTR : 1bit ------------------- 0資料幀;1遠端幀
    • 控制段
      • IDE : 1bit -------------------- 0標準格式;1擴充套件格式
      • R0 : 1bit ---------------------- 保留位
      • DLC : 4bit ---------------------- 資料位元組個數 , 雖然有4bit容量,但只能放0-8,也就是最大傳送8byte資料
    • 資料段 0-64bit,最大64bit,即8byte資料
    • CRC段
      • CRC : 15bit 校驗
      • 界定符 : 1bit 校驗結束
    • ACK段
      • ACK : 1bit 確認
      • 界定符 : 1bit 確認結束
    • 幀結束 7bit
  • 擴充套件幀

    略。比標準幀多了 1bit SRR, 18bit ID, 1bit R1保留位。

三、bit時段

​ 為了實現發收雙方資料的同步,將傳送每個bit的時間分為n個小的時間單位,這個時間單位就是tq, 可配置每個tq的具體時長。

​ CAN通訊是一種非同步傳輸通訊,透過位時段來確認雙方的通訊無誤。

  • sync (ss) : 同步段。1tq
  • prop-set (pts) : 傳播時間段。一般 1-8tq,補傳輸時的延時的誤差
  • phase1 (pbs1) : 相位緩衝段1。一般 1-8tq,補邊沿誤差
  • phase2 (pbs2) : 相位緩衝段2。一般2-8tq,補邊沿誤差

​ 硬同步:接收到起始幀SOF時,調整同步段SS,使得與傳送方SOF的SS段一致。

​ 再同步:接收過起始幀以後,發現與傳送方不同步,則透過拉或縮相位段進行位同步。

​ 取樣點:每個bit的取樣位置,取樣時發現位不同步則進行調整。

​ 在stm32f103中,prop-seg和phase1合作為了一段。

​ CAN通訊並【不是】透過波特率(每秒傳輸速率,比如uart中,確定起始位後,可以透過波特率完成)來確保通訊的,但它可以計算出波特率。

​ 1bit花費n個tq

​ tq = ( CAN_BTR的BRP位 + 1 ) * Tcan頻率

​ 1bit中所有時段花費的tq = 1bit花費的時間

​ 波特率 = 1s / 1bit花費的時間

四、工作模式和測試模式

1、工作模式

​ 睡眠、正常、初始化。 透過暫存器控制。

2、測試模式

​ 靜默模式(LBKM=0, SILM=1):可以自通訊,對外部只收不發;

​ 環回模式(LBKM=1, SILM=0):可以自通訊,對外部只發不收;

​ 環回靜默模式(LBKM=1,SILM=1):可以自通訊,對外部不發不收。

五、CAN主體功能

1、CAN1和CAN2

​ 對於非互聯產品,如stm32f103系列,只有一個CAN1,有14個過濾器組;

​ 對於互聯型產品,如105、107系列,有一個CAN1和一個CAN2,連個CAN共享28個過濾器組。

2、傳送郵箱

​ 3個。將要傳送的報文放到某個郵箱中,硬體自動傳送出去。

3、接收郵箱和FIFO

關於FIFO和接收郵箱,可以說每個FIFO裡有三個郵箱,但一般說法是每個FIFO裡有三個郵箱深度。

stm32f103系列中,CAN功能有2個FIFO(佇列), 每個FIFO有3個郵箱深度, 每個郵箱深度可放一個報文。

當報文透過濾波器過濾之後,就儲存到了某個FIFO的某郵箱中,這個需要FIFO和過濾器進行關聯配置。

硬體會遍歷配置好的FIFO中的郵箱深度以儲存報文。

4、接收濾波器 (關於位寬和模式)

​ 上面說到,stm32103系列CAN功能有14個過濾器組;

​ 每個過濾器組由2個32位暫存器組成。

  • 位寬:

    可透過CAN_FS1R暫存器的FSCx(0-13)位將這2個32位運用為:

    • 0 ———— 4個單位,每個單位16bit
    • 1 ———— 2個單位,每個單位32bit
  • 過濾器模式:

    可透過CAN_FM1R暫存器的FBMx位控制

    • 1 ———— 識別符號模式: 4或2個單位全填ID, 只有填進去的ID才可透過過濾器放到FIFO的郵箱深度中
    • 0 ———— 遮蔽位模式: 4或2個單位 的 其中一半是1/0位,另一半(每個32bit的低16bit)是規則(0驗證 1不驗證)

六、CAN錯誤狀態

  • 錯誤主動——————出錯次數較少, [0, 127]

  • 錯誤被動——————出錯次數中等, [128, 255]

  • 離線 ——————出錯次數較多, [256, ∞)

    從離線模式進入正常模式(錯誤主動)可以由軟體或硬體控制,MCR的ABOM位可配置這個。

相關文章