新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32之CAN---錯誤管理分析

        STM32之CAN---錯誤管理分析

        作者: 時間:2016-11-24 來源:網絡 收藏

        3 STM32的bxCAN實現

        3.1 bxCAN錯誤狀態圖

        圖2

        3.2 出錯管理

        CAN協議描述的出錯管理,完全由硬件通過發送錯誤計數器(CAN_ESR寄存器里的TEC域),和接收錯誤計數器(CAN_ESR寄存器里的REC域)來實現,其值根據錯誤的情況而增加或減少。軟件可以讀出它們的值來判斷CAN網絡的穩定性。此外,CAN_ESR寄存器提供了當前錯誤狀態的詳細信息。通過設置CAN_IER寄存器(比如ERRIE位),軟件可以靈活地控制中斷的產生――當檢測到出錯時。

        3.3 離線恢復

        當TEC等于255時,bxCAN就進入離線狀態,同時CAN_ESR寄存器的BOFF位被置’1’。在離線狀態下,bxCAN無法接收和發送報文。

        根據CAN_MCR寄存器的ABOM位的設置,bxCAN可以自動或在軟件的請求下,從離線狀態恢復(變為錯誤主動狀態)。在這兩種情況下,bxCAN都必須等待一個CAN標準所描述的恢復過程(CAN RX引腳上檢測到128次11個連續的隱性位)。

        如果ABOM位為’1’,bxCAN進入離線狀態后,就自動開啟恢復過程。
        如果ABOM位為’0’,軟件必須先請求bxCAN進入然后再退出初始化模式,隨后恢復過程才被開啟。

        注: 在初始化模式下,bxCAN不會監視CAN RX引腳的狀態,這樣就不能完成恢復過程。為了完成恢復過程,bxCAN必須工作在正常模式。

        4 CAN錯誤狀態寄存器 (CAN_ESR)

        地址偏移量: 0x18
        復位值: 0x0000 0000

        圖3

        位31:24REC[7:0]: 接收錯誤計數器
        這是對CAN協議的故障界定機制接收部分的實現。按照CAN的標準,當接收出錯時,根據出錯的情況該計數器加1或加8;而在每次接收成功后,該計數器減1,或減少其值為120-當該計數器的值大于127時。當該計數器的值超過127時,CAN進入錯誤被動狀態。
        位23:16TEC[7:0]: 發送錯誤計數器
        與上面相似,這是對CAN協議的故障界定機制發送部分的實現。
        位15:7保留位,硬件強制為0。
        位6:4LEC[2:0]: 上次錯誤代碼
        在檢測到CAN總線上發生錯誤時,硬件根據出錯情況設置其為1~6的值。當報文被正確發送或接收后,硬件清除其值為’0’。
        硬件沒有使用錯誤代碼7,軟件可以設置該值,從而可以檢測代碼的更新。
        000: 沒有錯誤;
        001: 位填充錯;
        010: 格式(Form)錯;
        011: 確認(ACK)錯;
        100: 隱性位錯;
        101: 顯性位錯;
        110: CRC錯;
        111: 由軟件設置。
        位3保留位,硬件強制為0。
        位2BOFF: 離線(Bus Off)標志
        當進入離線狀態時,硬件對該位置1。當發送錯誤計數器TEC溢出,即大于255時,CAN進入離線狀態。
        位1EPVF: 錯誤被動(Error Passive)標志
        當出錯次數達到錯誤被動的閾值時,硬件對該位置1。
        (接收錯誤計數器或發送錯誤計數器的值>127)。
        位0EWGF: 錯誤警告標志
        當出錯次數達到警告的閾值時,硬件對該位置1。
        (接收錯誤計數器或發送錯誤計數器的值≥96)。


        上一頁 1 2 下一頁

        關鍵詞: STM32CAN錯誤管

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 潢川县| 宝兴县| 家居| 扎鲁特旗| 宁德市| 抚松县| 仙桃市| 宁陵县| 盐边县| 工布江达县| 通江县| 灵武市| 高台县| 贡山| 景洪市| 新晃| 水富县| 汝城县| 获嘉县| 同江市| 德令哈市| 西丰县| 瓦房店市| 延川县| 武宣县| 武义县| 堆龙德庆县| 墨竹工卡县| 蓬莱市| 榕江县| 武夷山市| 和田市| 大宁县| 阳江市| 满城县| 桐乡市| 即墨市| 陆河县| 甘孜县| 东兰县| 洪雅县|