日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32之CAN总线原理

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32之CAN总线原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


簡介:

  • CAN是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協議。由德國電氣商博世公司在1986年率先提出。此后,CAN通過ISO11898及ISO11519進行了標準化。現在在歐洲已是汽車網絡的標準協議。
  • CAN協議經過ISO標準化后有兩個標準:ISO11898標準和ISO11519-2標準。其中ISO11898是針對通信速率為125Kbps~1Mbps的高速通信標準,而ISO11519-2是針對通信速率為125Kbps以下的低速通信標準。
  • CAN具有很高的可靠性,廣泛應用于:汽車電子、工業自動化、船舶、醫療設備、工業設備等方面。
  • 特點:

  • 多主控制。總線空閑時,所有單元都可發送消息,而兩個以上的單元同時開始發送消息時,根據標識符(ID,非地址)決定優先級。兩個以上的單元同時開始發送消息時,對各消息ID 的每個位進行逐個仲裁比較。仲裁獲勝(優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。
  • 系統柔軟性。連接總線的單元,沒有類似“地址”的信息,因此,在總線上添加單元時,已連接的其他單元的軟硬件和應用層都不需要做改變。
  • 速度快,距離遠。最高1Mbps(距離<40M),最遠可達10KM(速率<5Kbps)。
  • 具有錯誤檢測、錯誤通知和錯誤恢復功能。所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。
  • 故障封閉功能。CAN可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。
  • 連接節點多。CAN 總線是可同時連接多個單元的總線。可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。
  • 物理特征:

    總線電平=CAN_H的電壓-CAN_L的電壓
    顯性電平對應邏輯0=總線電平為2V左右
    隱性電平對應邏輯0=總線電平為0V

    顯性電平具有優先權,只要有一個單元輸出顯性電平,總線上即為顯性電平。而隱形電平則具有包容的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強)。另外,在CAN總線的起止端都有一個120Ω的終端電阻,來做阻抗匹配,以減少回波反射。

    幀種類介紹:

    幀種類幀作用
    數據幀用于發送單元向接收單元傳送數據的幀
    遙控幀用于接收單元向具有相同 ID 的發送單元請求數據的幀
    錯誤幀用于當檢測出錯誤時向其它單元通知錯誤的幀
    過載幀用于接收單元通知其尚未做好接收準備的幀
    間隔幀用于將數據幀及遙控幀與前面的幀分離開來的幀

    注:其中,數據幀和遙控幀有標準格式和擴展格式兩種格式。
    標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID 。

    STM32 CAN控制器簡介:

  • 支持CAN協議2.0A和2.0B主動模式
  • 波特率最高達1Mbps
  • 支持時間觸發通信
  • 具有3個發送郵箱
  • 具有3級深度的2個接收FIFO
  • 可變的篩選器組(也稱過濾器組,最多28個,F1普通為14個,互聯和F4為28個,另外F4有兩個can,F1只有一個)
  • 3種模式:
    工作模式:

    • 初始化模式(INRQ=1,SLEEP=0)
    • 正常模式(INRQ=0,SLEEP=0)
    • 睡眠模式(SLEEP=1)

    測試模式:

    • 靜默模式( LBKM=0,SILM=1 )
    • 環回模式( LBKM=1,SILM=0 )
    • 環回靜默模式(LBKM=1,SILM=1)

    調試模式(不常用)

    STM32 CAN篩選器位寬和模式配置:

    CAN的標識符不表示目的地址而是表示發送優先級,接收節點根據標識符的值,來決定是否接收對應消息。

    標識符屏蔽模式:過濾一組標識符
    標識符列表模式:過濾一個標識符

    例:設置篩選器組0工作在:1個32位篩選器-標識符屏蔽模式,然后設置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是設置我們需要必須關心的ID,表示收到的映像,其位[31:24]和位[15:8]這16個位的必須和CAN_F0R1中對應的位一模一樣,而另外的16個位則不關心,可以一樣,也可以不一樣,都認為是正確的ID,即收到的映像必須是0XFFxx00xx,才算是正確的(x表示不關心)。

    波特率設置:

    TM32F103,設TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。

    STM32F407,設TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。

    寄存器:

    CAN主控制寄存器(CAN_MCR)

    該寄存器的我們僅介紹下INRQ位,該位用來控制初始化請求。
    設置INRQ=0,可使CAN從初始化模式進入正常工作模式。
    設置INRQ=1,可使CAN從正常工作模式進入初始化模式。
    CAN初始化時,先設置INRQ=1,進入初始化模式,進行初始化(尤其是CAN_BTR的設置,該寄存器,必須在CAN正常工作之前設置),之后再設置INRQ=0,進入正常工作模式。

    CAN位時序寄存器(CAN_BTR)設置波特率
    CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)
    CAN發送郵箱標識符寄存器(CAN_TIxR)(x=0~2)
    CAN發送郵箱數據長度和時間戳寄存器 (CAN_TDTxR) (x=0~2)
    低4位用于設置發送多少個字節,最多為8個字節
    CAN發送郵箱數據寄存器(CAN_TDLxR/CAN_TDHxR) (x=0~2)
    CAN接收FIFO郵箱標識符寄存器(CAN_RIxR)(x=0/1)
    CAN接收FIFO郵箱數據長度和時間戳寄存器(CAN_RDTxR) (x=0/1)
    CAN接收FIFO郵箱郵箱數據寄存器(CAN_RDLxR/CAN_RDHxR) (x=0/1)
    CAN篩選器模式寄存器(CAN_FM1R)(0標識符屏蔽,1標識符列表)
    CAN篩選器尺度寄存器(CAN_FS1R)(0雙16位,1單32位)
    CAN篩選器FIFO關聯寄存器(CAN_FFA1R)(0篩選器分到FIFO0,1篩選器分到FIFO1)
    CAN篩選器激活寄存器(CAN_FA1R)(0未激活,1激活)
    CAN篩選器組i寄存器x(CAN_FiRx)(i=0~27,x=1/2)(F103篩選器只有14個)

    總結

    以上是生活随笔為你收集整理的STM32之CAN总线原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。