国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

STM32--CAN通訊實驗

myeveryheart / 3846人閱讀

摘要:而及是一對差分信號線,使用差分信號。幀結束表示數據幀結束的段。控制段控制段由個位構成,表示數據段的字節數。有效消息當消息依據協議正確接收并且成功通過標識符篩選后,該消息將視為有效。

目錄

CAN協議介紹

物理層

閉環總線網絡

開環總線網絡

?通訊節點

差分信號

協議層簡介

CAN的波特率

位時序

幀類型、作用及格式

數據幀

STM32CAN外設

?CAN 發送郵箱

?CAN 接收 FIFO

?有效消息

?接收處理

上溢

?標識符篩選

CAN1與CAN2整體邏輯

HAL庫函數


CAN協議介紹

物理層

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

CAN的物理層有兩種拓撲結構,閉環總線網絡和開環總線網絡,我們將依次介紹他們。

閉環總線網絡

閉環網絡的特點是:高速、近距離。

它的總線最大長度為 40m,通信速度最高為1Mbps,總線的兩端各要求有一個“120 歐”的電阻。

CAN閉環總線網絡拓撲結構

開環總線網絡

閉環網絡的特點是:低速、遠距離。

它的最大傳輸距離為1km,最高通訊速率為 125kbps,兩根總線是獨立的、不形成閉環,要求每根總線上各串聯有一個“2.2 千歐”的電阻。

CAN閉環總線網絡拓撲結構

?通訊節點

CAN 總線上可以掛載多個通訊節點,節點之間的信號 經過總線傳輸,實現節點間通訊。

由于 CAN 通訊協議不對節點進行地址編碼,而是對數據內容進行編碼的,所以網絡中的節點個數理論上不受限制,只要總線的負載足夠即可,可以通過中繼器增強負載。

CAN 通訊節點由一個 CAN 控制器及 CAN 收發器組成,控制器與收發器之間通過 CAN_Tx 及 CAN_Rx 信號線相連,收發器與 CAN 總線之間使用 CAN_High 及 CAN_Low 信號線相連。而 CAN_High 及 CAN_Low 是一對差分信號線,使用差分信號。

差分信號

與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線 的電壓差值來表示邏輯 0 和邏輯 1。

?差分信號傳輸具有如下優點:

  • 抗干擾能力強,當外界存在噪聲干擾時,幾乎會同時耦合到兩條信號線上。所以外界的共模噪聲可以被完全抵消。
  • 能有效抑制它對外部的電磁干擾,同樣的道理,由于兩根信號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少。
  • 時序定位精確,由于差分信號的開關變化是位于兩個信號的交點,而不像普通單端信號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合于低幅度信號的電路。
CAN信號高速CAN低速CAN
電平顯性隱性顯性隱性
CAN_H

3.50

2.504.001.75
CAN_L1.502.501.003.25
電位差2.0003.00-1.50

?由于CAN總線的仲裁機制采取“線與”的方式對總線上的信號進行仲裁。因此,假如有兩個 CAN 通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,“線與”的總線仲裁機制將使它處于顯性電平狀態。因此低電平“0”被成為顯性電平。

物理層特征總結

協議層簡介

CAN的波特率

由于 CAN 屬于異步通訊,沒有時鐘信號線,連接在同一個總線網絡中的各個節點會像串口異步通訊那樣,節點間使用約定好的波特率進行通訊

總線上的各個通訊節點只要約定好 1 個 Tq 的時間長度以及每一個數據位占據多少個Tq,就可以確定 CAN 通訊的波特率。

位時序

為了實現位同步,在STM32數據手冊中通過將標稱位時間劃分為以下三段

  • 同步段 (SYNC_SEG):位變化應該在此時間段內發生。它只有一個時間片的固定長度 (1 x tCAN)
  • 位段 1 (BS1):定義采樣點的位置。它包括 CAN 標準的 PROP_SEG 和 PHASE_SEG1。 其持續長度可以在 1 到 16 個時間片之間調整,但也可以自動加長,以補償不同網絡節 點的頻率差異所導致的正相位漂移。
  • 位段 2 (BS2):定義發送點的位置。它代表 CAN 標準的 PHASE_SEG2。其持續長度可 以在 1 到 8 個時間片之間調整,但也可以自動縮短,以補償負相位漂移。

?關于同步,還有硬件同步、再同步等操作。更多關于位時序的內容可以參看 ISO 11898 標準。

幀類型、作用及格式

為了更有效地控制通訊,CAN 一共規定了 5 種類型的幀:

我們在這里主要介紹一下數據幀

數據幀

數據幀由 7 個段構成:

  • 幀起始:表示數據幀開始的段.
  • 仲裁段:表示該幀優先級的段。
  • 控制段:表示數據的字節數及保留位的段。
  • 數據段:數據的內容,可發送 0~8 個字節的數據。
  • CRC段:檢查幀的傳輸錯誤的段。
  • ACK段:表示確認正常接收的段。
  • 幀結束:表示數據幀結束的段。

幀起始

表示幀開始的段。1 個位的顯性位。

仲裁段

表示數據的優先級的段。

標準格式和擴展格式在此的構成有所不同。

控制段

控制段由 6 個位構成,表示數據段的字節數。標準格式和擴展格式的構成有所不同。

數據段

數據段可包含 0~8 個字節的數據。從 MSB(最高位)開始輸出。

CRC段

CRC 段是檢查幀傳輸錯誤的幀。由 15 個位的 CRC 順序和 1 個位的 CRC 界定符(用于分隔的位)構成。

ACK段?

?ACK 段用來確認是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 個位構成。

幀結束?

?幀結束是表示該該幀的結束的段。由 7 個位的隱性位構成。

STM32CAN外設

?從圖上我們可以看到,CAN 1與CAN 2為主從關系,CAN 1為Master ( 主 ) ,CAN 2為Slave ( 從 ) 。CAN 1和CAN 2有各自的3個發送郵箱,2個FIFO Buffer緩沖,6個接收郵箱。但是,28個Filter 過濾器卻是共用的,我們可以規定,哪些Filter給那個CAN用,甚至可以在程序運行的時候調控。

● CAN1:主 bxCAN,用于管理 bxCAN 與 512 字節 SRAM 存儲器之間的通信。

● CAN2:從 bxCAN,無法直接訪問 SRAM 存儲器。

● 兩個 bxCAN 單元共享 512 字節 SRAM 存儲器

?CAN 發送郵箱

CAN 1和CAN 2有各自的3個發送郵箱,最多可以緩存 3 個待發送的報文。

為了發送消息,程序必須在請求發送之前選擇一個空的發送郵箱,使郵箱退出空的狀態,進入掛起狀態。此時,對于掛起的郵箱,軟件無法再對其訪問。進入掛起狀態后,優先級高的郵箱將優先發送。發送后的郵箱將恢復到空的狀態。

?CAN 接收 FIFO

?為了接收 CAN 消息,提供了構成 FIFO 的三個郵箱。為了節約 CPU 負載,FIFO 完全由硬件進行管理。應用程序通過 FIFO 輸出郵箱訪問 FIFO 中所存儲的消息。

?有效消息

當消息依據 CAN 協議正確接收并且成功通過標識符篩選后,該消息將視為有效。

?接收處理

當接收到報文時,FIFO 的報文計數器會自增,而 STM32 內部讀取 FIFO 數據之后,報文計數器會自減,我們通過狀態寄存器可獲知報文計數器的值

上溢

?標識符篩選

?在 CAN 協議中,消息的標識符與節點地址無關,但與消息內容有關。因此,發送器將消息廣播給所有接收器。在接收到消息時,接收器節點會根據標識符的值來確定軟件是否需要該消息。STM32 的 CAN 外設接收報文前會先使用驗收篩選器檢查,只接收需要的報文到 FIFO 中。

CAN1與CAN2整體邏輯

CAN2 外設的結構與 CAN1 外設是一樣的,他們共用篩選器且由于存儲訪問控制器由 CAN1 控制,所以要使用 CAN2 的時候必須要使能 CAN1 的時鐘。

HAL庫函數

HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs);
  • 參數
    • hcan:指向CAN配置結構體
    • ActiveITs:表明哪個中斷會被啟動,開啟改中斷的消息提示
  • 返回值
    • HAL_StatusTypeDef:如果開啟成功,返回HAL_OK;如果失敗,返回HAL_ERROR
HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan);
  • 參數
    • hcan:指向CAN配置結構體
  • 返回值
    • HAL_StatusTypeDef:如果開啟成功,返回HAL_OK;如果失敗,返回HAL_ERROR
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig);
  • 參數
    • hcan:指向CAN配置結構體
    • sFilterConfig:指向Filter過濾器配置結構體
  • 返回值
    • HAL_StatusTypeDef:如果開啟成功,返回HAL_OK;如果失敗,返回HAL_ERROR
HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox);
  • 參數
    • hcan:指向CAN配置結構體
    • pHeader:指向發送數據的配置結構體
    • aData[]:指向需要發送的數據
    • pTxMailbox:該函數會返回用于儲存發送數據的發送郵箱編號到該變量
  • 返回值
    • HAL_StatusTypeDef:如果添加成功,返回HAL_OK;如果失敗,返回HAL_ERROR
uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes);
  • 參數
    • hcan:指向CAN配置結構體
    • TxMailboxes:指向發送數據的發送郵箱
  • 返回值
    • uint32_t:如果有發送數據正在等待發送,返回1;如果沒有,返回0
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan);
  • 在寫代碼的時候,在main.c中創建HAL_CAN_RxFifo0MsgPendingCallback函數
  • 在該函數中填寫在FIFO 0中已經沒有正在等待接收的數據的時候開啟中斷,需要執行的代碼
HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]);
  • 參數
    • hcan:指向CAN配置結構體
    • RxFifo:指向負責接收的FIFO
    • pHeader:指向接收數據的配置結構體
    • aData[]:指向需要接收的數據
  • 返回值
    • HAL_StatusTypeDef:如果接收成功,返回HAL_OK;如果失敗,返回HAL_ERROR

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119237.html

相關文章

  • 基于UCOSII的RS485通信(STM32F107)

    摘要:為了可靠工作,在總線狀態切換時需要做適當延時,再進行數據收發。 一、實現效果 ????????基于ucosii實時操作系統的RS485通信,采用USART + DMA進行收發, ?二、開發環境 開發工具:KEIL V5開發板: STM32f107RC采用方式:USART + DMA使用系統:...

    verano 評論0 收藏0
  • STM32CubeMX學習教程之硬件I2C讀取光照度

    摘要:使用庫讀寫環境光照度傳感器本文將教大家如何快速使用庫讀取光照度數據。五實驗樣機測試展示通過之前配置好的面板,通過涂鴉智能進行配網實時采集光照度傳感器的數據。 使用STM32 HAL庫讀寫環境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數據。 實現功能:通...

    tinylcy 評論0 收藏0
  • 基于MDK創建STM32匯編語言工程——上機實驗一(9527)

    摘要:設置下面的項為和項為,用于設置支持的軟硬件仿真。如有錯誤,請斧正。參考文獻基于創建匯編語言工程并分析 文章目錄 1新建工程2配置環境3測試代碼4分析生成的H...

    joy968 評論0 收藏0
  • 單片機入門指南

    摘要:單片機入門指南本文基于常神文章基礎上將單片機入門部分進行細化盡可能細節做到可實施性先引用一下常神的文章首先假設大家已經對高中物理的電路部分有所了解。單片機,如,是一種根據程序控制引腳高低電平的可編程器件,有些場合又將這種行為稱作嵌入式。 ...

    nevermind 評論0 收藏0
  • STM32學習——半天學完正點原子入門篇例程,STM32:學會了嗎?我:學廢了?

    本文代碼均來正點原子標準例程 聲明:本文不是教學文章,可能也不適合初學者閱讀 不知為什么,最近總蹦出有很多想法(可能是工作太閑了)一會想學這,一會想學那,這不,突然想復習一下STM32了。 我好久以前就學過正點原子的課程,還買過一些開發板,但現在手上只有一個核心板了,就暫且湊合著用吧。 我是個喜歡制定計劃的人,既然有了想法,那就得制定一個學習計劃,估摸了一下,明天要上班,現在已經中午了,所以我只...

    MingjunYang 評論0 收藏0

發表評論

0條評論

myeveryheart

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<