<dl id="zdxnv"><sup id="zdxnv"></sup></dl>
<tbody id="zdxnv"><nobr id="zdxnv"></nobr></tbody>

<menuitem id="zdxnv"><ins id="zdxnv"></ins></menuitem>
    <menuitem id="zdxnv"></menuitem>
      1. <tbody id="zdxnv"><bdo id="zdxnv"></bdo></tbody>
        <progress id="zdxnv"></progress>
      2. <progress id="zdxnv"></progress>
      3. 國民技術

        代理品牌

        國民技術單片機CAN接口參數配置說明及應用Application Note

        國民技術單片機CAN接口參數配置說明及應用Application Note

        產品分類:國民技術

        • 產品說明

        國民技術單片機CAN接口參數配置說明及應用Application Note

        說明:本文為國民技術Arm Cortex系列單片機的CAN參數配置參數說明部分章節,可適用于國民技術所有32位MCU的CAN參數配置,若您需要完整的配置說明手冊或其它技術支持,請聯絡國民技術代理商深圳市綠都電子有限公司,聯絡方式:Email: philip.yf@szlvdu.com,0755-83777479,18688790400(微信同號)。

        bxCAN 指的是基本擴展 CAN(Basic Extended CAN),它支持 CAN 協議 2.0A 和 2.0B。它在高效處理大量收到的報文的同時,極大地降低了 CPU 資源的消耗??梢酝ㄟ^軟件配置報文發送的優先級特性。本篇應用筆記可以幫助用戶了解 CAN 模塊,通過對 CAN 接口參數的詳解及典型應用來了解 CAN 接口的使用。 

        一、CAN 協議簡介

        CAN 是控制器局域網絡(Controller Area Network)的簡稱,它是由研發和生產汽車電子產品著稱的德國博世(BOSCH)公司開發的,并最終成為國際標準, CAN 總線協議已經成為汽車計算機控制系統和嵌入式工業
        控制局域網的標準總線。近年來,它具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用于汽車計算機控制系統和環境溫度惡劣、電磁輻射強及振動大的工業環境。

        1.1 CAN 物理層

        與 I2C、SPI 等具有時鐘信號的同步通訊方式不同,CAN 通訊并不是以時鐘信號來進行同步的,它是一種異步通訊,只具有 CAN_High 和 CAN_Low 兩條信號線,共同構成一組差分信號線,以差分信號的形式進行
        通訊。

        1.1.1 閉環總線網絡

        CAN 物理層的形式主要有兩種,圖 1-1 中的 CAN 通訊網絡是一種遵循 ISO11898 標準的高速、短距離“閉環網絡”,它的總線最大長度為 40m,通信速度最高為 1Mbps,總線的兩端各要求有一個“120 歐”的電阻。


        1.1.2 通訊節點
        從 CAN 通訊網絡圖可了解到,CAN 總線上可以掛載多個通訊節點,節點之間的信號經過總線傳輸,實現節點間通訊。由于 CAN 通訊協議不對節點進行地址編碼,而是對數據內容進行編碼的,所以網絡中的節點個

        數理論上不受限制,只要總線線束的電氣負載能力足夠即可,但實際應用過程中,一條總線上的節點一般不會超過 100 個。

        CAN 通訊節點由一個 CAN 控制器(如 MCU)及 CAN 收發器組成,控制器與收發器之間通過 CAN_Tx及 CAN_Rx 信號線相連,收發器與 CAN 總線之間使用 CAN_High 及 CAN_Low 信號線相連。其中 CAN_Tx

        及 CAN_Rx 使用普通的類似 TTL 邏輯信號,而 CAN_High 及 CAN_Low 是一對差分信號線,下一小節將對該差分信號做較為詳細闡述 。

        當 CAN 節點需要發送數據時,控制器把要發送的二進制編碼通過 CAN_Tx 線發送到收發器,然后由收發器把這個普通的邏輯電平信號轉化成差分信號, 通過差分線 CAN_High 和 CAN_Low 線輸出到 CAN 總線上。而通過收發器接收總線上的數據到控制器時,則是相反的過程,收發器把總線上收到的 CAN_High 及CAN_Low 信號轉化成普通的邏輯電平信號,通過 CAN_Rx 輸出到控制器中。

        1.1.3 差分信號

        差分信號又稱差模信號,與傳統使用單端信號的電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯 0 和邏輯 1。見圖1-2,它使用了 V+與 V-信號的差值表達出了圖下方的信號。 


        CAN 協議中對它使用的 CAN_High 和 CAN_Low 表示的差分信號做了規定,如圖 1-3 和 1-4 所示,以高速CAN 協議(ISO11898)為例,當表示邏輯 1 時(隱形電平),CAN_High 和 CAN_Low 線上的電壓均為
        2.5V,即他們的電壓差△ V=|VH-VL|=0V;而表示邏輯 0 時(顯性電平),CAN_High 的電平為 3.5V,CAN_Low 的電平為 1.5V,即他們的電壓差為△ V=|VH-VL|=2V。例如,當 CAN 收發器從 CAN_Tx 線接收到來自 CAN 控制器的低電平信號時(邏輯 0),它會使 CAN_High 輸出 3.5V,同時 CAN_Low 輸出 1.5V,從而輸出顯性電平表示邏輯 0。 


        在 CAN 總線中,必須使它處于隱性電平(邏輯 1)或顯性電平(邏輯 0)中的其中一個狀態。假如有兩個 CAN通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似 I2C 總線的“線與”特性將使它處于顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味。由于 CAN 總線協議的物理層只有 1 對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN 通訊是半雙工的,收發數據需要分時進行。在 CAN 的通訊網絡中,因為共用總線,在整個網絡中同一時刻只能有一個通訊節點發送信號,其余的節點在該時刻都只能接收。 

        1.2 協議

        對 CAN 協議標準這里不作多余闡述,若對 CAN 通訊協議想要了解,可以瀏覽附件的文檔《CAN 入門教程》、《CAN2.0 規范》,或網上查找專業性資料進行學習CAN 外設接口參數說明。CAN 外設有許多的參數接口需要配置,例如初始化結構體、發送及接收結構體、過濾器結構體等,下面將根據 N32 庫的風格來對這些結構體成員變量做一些解釋及配置說明


        CAN 外設接口參數說明
        CAN 外設有許多的參數接口需要配置,例如初始化結構體、發送及接收結構體、過濾器結構體等,下面將根據 N32 庫的風格來對這些結構體成員變量做一些解釋及配置說明


        2.1 CAN

        CAN 控制內核包含了各種控制寄存器及狀態寄存器,主要講解其中的主控制寄存器 CAN_MCTRL 及位時序寄存器 CAN_BTIM

        2.1.1 主控制寄存器 CAN_MCTRL

        主控制寄存器 CAN_MCTRL 負責 CAN 的工作模式,它主要使用以下功能實現控制

        (1) DBGF 調試凍結功能

        DBGF(Debug freeze)調試凍結,使用它可設置在調試時 CAN 處于工作狀態或禁止收發的狀態,禁止收發時仍可訪問接收 FIFO 中的數據。這兩種狀態是當 N32 芯片處于程序調試模式時才使用的,平時使用并不影響。注:CAN 凍結時必須設置 DBG_CTRL.CAN_STOP 位

        (2) TTCM 時間觸發模式

        TTCM(Time triggered communication mode)時間觸發模式,它用于配置 CAN 的時間觸發通信模式,在此模式下,CAN 使用它內部定時器產生時間戳,并把它保存在 CAN_TMDTx、CAN_RMDTx 寄存器中。內部定時器在每個 CAN 位時間累加,在接收和發送的幀起始位被采樣,并生成時間戳。利用它可以實現 ISO11898-4 CAN 標準的分時同步通信功能。

        (3) ABOM 自動離線管理

        ABOM(Automatic bus-off management) 自動離線管理,它用于設置是否使用自動離線管理功能。當節點檢測到它發送錯誤或接收錯誤超過一定值時,會自動進入離線狀態,在離線狀態中,CAN 不能接收或發送報文。處于離線狀態的時候,可以軟件控制恢復或者直接使用這個自動離線管理功能,它會在適當的時候自動恢復。

        (4) AWKUM 自動喚醒

        AWUM(Automatic bus-off management),自動喚醒功能,CAN 外設可以使用軟件進入低功耗的睡眠模式,如果使能了這個自動喚醒功能,當 CAN 檢測到總線活動的時候,會自動喚醒。

        (5) NART 自動重傳

        NART(No automatic retransmission)報文自動重傳功能,設置這個功能后,當報文發送失敗時會自動重傳至成功為止。若不使用這個功能,無論發送結果如何,消息只發送一次。

        (6) RFLM 鎖定模式

        RFLM(Receive FIFO locked mode)FIFO 鎖定模式,該功能用于鎖定接收 FIFO。鎖定后,當接收 FIFO 溢出時,會丟棄下一個接收的報文。若不鎖定,則下一個接收到的報文會覆蓋原報文。

        (7) TXFP 報文發送優先級的判定方法

        TXFP(Transmit FIFO priority)報文發送優先級的判定方法,當 CAN 外設的發送郵箱中有多個待發送報文時,本功能可以控制它是根據報文的 ID 優先級還是報文存進郵箱的順序來發送。

        2.1.2 位時序寄存CAN_BTIM

        CAN 外設中的位時序寄存器 CAN_BTIM 用于配置測試模式、波特率以及各種位內的段參數。

        (1) 測試模式

        為方便調試,N32 的 CAN 提供了測試模式,配置位時序寄存器 CAN_BTIM 的 SLM 及 LBM 寄存器位可以控制使用正常模式、靜默模式、回環模式及靜默回環模式,如圖 2-1 所示


        (2) 位時序及波特率

        N32 的 CAN 外設定義的時序與 CAN 標準時序有一點區別,如圖 2-2 所示:


        N32 的 CAN 外設位時序中只包含 3 段,分別是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采樣點位于BS1 及 BS2 段的交界處。其中 SYNC_SEG 段固定長度為 1Tq,而 BS1 及 BS2 段可以在位時序寄存器 7 CAN_ BTIM 設置它們的時間長度,它們可以在重新同步期間增長或縮短,該長度 RSJW 也可在位時序寄存器中配置。

        理解 N32 的 CAN 外設的位時序時,可以把它的 BS1 段理解為是由前面介紹的 CAN 標準協議中 PTS 段與PBS1 段合在一起的,而 BS2 段就相當于 PBS2 段。了解位時序后,接下來可以配置波特率。通過配置位時序寄存器 CAN_BTIM 的 TBS1[3:0]及 TBS2[2:0]寄存器位設定 BS1 及 BS2 段的長度后,就可以確定每個 CAN 數據位的時間:

        BS1 段時間:TS1=Tq x (TBS1[3:0] + 1)

        BS2 段時間:TS2= Tq x (TBS2[2:0] + 1)

        一個數據位的時間:T1bit =1Tq+TS1+TS2 =1+ (TBS1[3:0] + 1)+ (TBS2[2:0] + 1)= N Tq

        其中單個時間片的長度 Tq 與 CAN 外設的所掛載的時鐘總線及分頻器配置有關,CAN1 和 CAN2 外設都是掛載在 APB1 總線上的,而位時序寄存器 CAN_BTIM 中的 BRTP[9:0]寄存器位可以設置 CAN 外設時鐘的分頻值 ,所以:Tq = (BRTP[9:0]+1) x TPCLK

        其中的 PCLK 指 APB1 時鐘,N32G45X 默認值為 36MHz。

        最終可以計算出 CAN 通訊的波特率:BaudRate = 1/N Tq

        如下圖 2-3 說明了一種把 N32G45X 的 CAN 波特率配置為 1Mbps 的方式

        (以下內容因篇幅原因未詳述,詳細應用筆記請聯絡國民技術代理商深圳市綠都電子有限公司索取,聯絡方式:Philip.yf@szlvdu.com,0755-83777479, 18688790400)

        2.2 CAN 初始化結構體

        2.3 CAN 發送及接收結構體

        2.4 CAN 過濾器結構體

        3 CAN 外設典型應用

        3.1 修改采樣率

        3.2 過濾指定 ID 報文 

        4 注意事項

        无码专区—VA亚洲V天堂麻豆|亚洲欧美综合一区二区|日韩V精品v无码一区二区|国产精品亚洲精品日韩已满
        <dl id="zdxnv"><sup id="zdxnv"></sup></dl>
        <tbody id="zdxnv"><nobr id="zdxnv"></nobr></tbody>

        <menuitem id="zdxnv"><ins id="zdxnv"></ins></menuitem>
          <menuitem id="zdxnv"></menuitem>
            1. <tbody id="zdxnv"><bdo id="zdxnv"></bdo></tbody>
              <progress id="zdxnv"></progress>
            2. <progress id="zdxnv"></progress>