亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

STM32--CAN通訊實驗

myeveryheart / 4069人閱讀

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

目錄

CAN協(xié)議介紹

物理層

閉環(huán)總線網(wǎng)絡

開環(huán)總線網(wǎng)絡

?通訊節(jié)點

差分信號

協(xié)議層簡介

CAN的波特率

位時序

幀類型、作用及格式

數(shù)據(jù)幀

STM32CAN外設

?CAN 發(fā)送郵箱

?CAN 接收 FIFO

?有效消息

?接收處理

上溢

?標識符篩選

CAN1與CAN2整體邏輯

HAL庫函數(shù)


CAN協(xié)議介紹

物理層

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

CAN的物理層有兩種拓撲結構,閉環(huán)總線網(wǎng)絡和開環(huán)總線網(wǎng)絡,我們將依次介紹他們。

閉環(huán)總線網(wǎng)絡

閉環(huán)網(wǎng)絡的特點是:高速、近距離。

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

CAN閉環(huán)總線網(wǎng)絡拓撲結構

開環(huán)總線網(wǎng)絡

閉環(huán)網(wǎng)絡的特點是:低速、遠距離。

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

CAN閉環(huán)總線網(wǎng)絡拓撲結構

?通訊節(jié)點

CAN 總線上可以掛載多個通訊節(jié)點,節(jié)點之間的信號 經(jīng)過總線傳輸,實現(xiàn)節(jié)點間通訊。

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

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

差分信號

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

?差分信號傳輸具有如下優(yōu)點:

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

3.50

2.504.001.75
CAN_L1.502.501.003.25
電位差2.0003.00-1.50

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

物理層特征總結

協(xié)議層簡介

CAN的波特率

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

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

位時序

為了實現(xiàn)位同步,在STM32數(shù)據(jù)手冊中通過將標稱位時間劃分為以下三段

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

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

幀類型、作用及格式

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

我們在這里主要介紹一下數(shù)據(jù)幀

數(shù)據(jù)幀

數(shù)據(jù)幀由 7 個段構成:

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

幀起始

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

仲裁段

表示數(shù)據(jù)的優(yōu)先級的段。

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

控制段

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

數(shù)據(jù)段

數(shù)據(jù)段可包含 0~8 個字節(jié)的數(shù)據(jù)。從 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個發(fā)送郵箱,2個FIFO Buffer緩沖,6個接收郵箱。但是,28個Filter 過濾器卻是共用的,我們可以規(guī)定,哪些Filter給那個CAN用,甚至可以在程序運行的時候調控。

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

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

● 兩個 bxCAN 單元共享 512 字節(jié) SRAM 存儲器

?CAN 發(fā)送郵箱

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

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

?CAN 接收 FIFO

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

?有效消息

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

?接收處理

當接收到報文時,F(xiàn)IFO 的報文計數(shù)器會自增,而 STM32 內部讀取 FIFO 數(shù)據(jù)之后,報文計數(shù)器會自減,我們通過狀態(tài)寄存器可獲知報文計數(shù)器的值

上溢

?標識符篩選

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

CAN1與CAN2整體邏輯

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

HAL庫函數(shù)

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

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/119237.html

相關文章

  • 基于UCOSII的RS485通信(STM32F107)

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

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

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

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

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

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

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

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

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

    MingjunYang 評論0 收藏0

發(fā)表評論

0條評論

myeveryheart

|高級講師

TA的文章

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