0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32入門學(xué)習(xí)筆記之CAN通信實(shí)驗(yàn)1

jf_78858299 ? 來(lái)源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 14:37 ? 次閱讀

18.1 CAN協(xié)議

18.1.1 協(xié)議概述

CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能與可靠性被認(rèn)同,現(xiàn)在被廣泛運(yùn)用在工業(yè)自動(dòng)化,船舶等當(dāng)面,目前最熱門的國(guó)六標(biāo)準(zhǔn),J1939通信協(xié)議就是以CAN協(xié)議為基礎(chǔ)設(shè)計(jì)的。

CAN協(xié)議最遠(yuǎn)通信距離可達(dá)10km,與485相似,CAN也有兩種電平,分別為顯性電平與隱性電平,當(dāng)CAN_H與CAN_L電壓一致的時(shí)候?yàn)殡[性電平,反之為顯性電平。實(shí)際上隱性電平代表邏輯電平1,顯性電平代表邏輯電平0,CAN在通信的時(shí)候,也需要在每個(gè)設(shè)備輸出端并聯(lián)1個(gè)120Ω的終端匹配電阻,用于進(jìn)行阻抗匹配。

18.1.2 通信組成

CAN協(xié)議通過(guò)5種類型的幀進(jìn)行數(shù)據(jù)通信:數(shù)據(jù)幀,遙控幀,錯(cuò)誤幀,過(guò)載幀和間隔幀,其中數(shù)據(jù)幀與遙控幀具有標(biāo)準(zhǔn)格式與擴(kuò)展格式兩種,標(biāo)準(zhǔn)格式有11個(gè)位的標(biāo)識(shí)符,擴(kuò)展格式則有29個(gè)位的標(biāo)識(shí)符,五種幀的功能如下所示。

(1)數(shù)據(jù)幀:用于實(shí)際數(shù)據(jù)傳輸

(2)遙控幀:用于接收端向具有相同ID的發(fā)送端請(qǐng)求數(shù)據(jù)

(3)錯(cuò)誤幀:用于檢測(cè)報(bào)錯(cuò)時(shí)通知其他設(shè)備

(4)過(guò)載幀:用于接收端通報(bào)尚未準(zhǔn)備好接收準(zhǔn)備

(5)間隔幀:用于將數(shù)據(jù)幀與遙控幀和前面的幀分割

完整的數(shù)據(jù)幀構(gòu)成如下圖所示。

圖片

數(shù)據(jù)幀一般由7段組成:

(1)幀起始:即數(shù)據(jù)幀開(kāi)始的段,標(biāo)準(zhǔn)幀和擴(kuò)展幀都是由1個(gè)位的顯性電平表示幀起始

(2)仲裁段:表示該幀優(yōu)先級(jí),標(biāo)準(zhǔn)幀和擴(kuò)展幀格式在這一段結(jié)構(gòu)如下圖所示。

圖片

其中RTR位用于標(biāo)識(shí)是否是遠(yuǎn)程幀(0代表數(shù)據(jù)幀;1代表遠(yuǎn)程幀),IDE位為標(biāo)識(shí)符選擇位(0表示使用標(biāo)準(zhǔn)標(biāo)識(shí)符;1表示使用擴(kuò)展標(biāo)識(shí)符),SRR位為代替遠(yuǎn)程請(qǐng)求位,為隱性位,代替了標(biāo)準(zhǔn)幀中的RTR位。

(3)控制段:表示數(shù)據(jù)的字節(jié)數(shù)即保留位,由6個(gè)位構(gòu)成,表示數(shù)據(jù)段的字節(jié)數(shù)。標(biāo)準(zhǔn)幀和擴(kuò)展幀的控制段結(jié)構(gòu)如下圖所示。

圖片

r0和r1為保留位,必須全部以顯性電平發(fā)送,但是接收端可以接收顯性、隱性及任意組合的電平。DLC段為數(shù)據(jù)長(zhǎng)度表示段,高位在前,DLC段有效值為08,但是接收方接收到915的時(shí)候并不認(rèn)為是錯(cuò)誤。

(4)數(shù)據(jù)段:數(shù)據(jù)段內(nèi)容,一段可以發(fā)送0~8個(gè)字節(jié)的數(shù)據(jù),從最高位MSB開(kāi)始輸出

(5)CRC校驗(yàn):CRC校驗(yàn)數(shù)據(jù)完整性

(6)應(yīng)答段:表示正常接收

(7)幀結(jié)束:表示該幀結(jié)束

18.1.3 通信參數(shù)

由發(fā)送單元在非同步的情況下發(fā)送的每秒鐘的位數(shù)稱為位速率。一個(gè)位可分為4段。

(1)同步段(SS)

(2)傳播時(shí)間段(PTS)

(3)相位緩沖段1(PBS1)

(4)相位緩沖段2(PBS2)

這些段又由可稱為Tq的最小時(shí)間單位構(gòu)成。1位分為4個(gè)段,每個(gè)段又由若干個(gè)Tq構(gòu)成,這稱為位時(shí)序。1位由多少個(gè)Tq構(gòu)成、每個(gè)段又由多少個(gè)Tq構(gòu)成等,可以任意設(shè)定位時(shí)序。通過(guò)設(shè)定位時(shí)序,多個(gè)單元可同時(shí)采樣,也可任意設(shè)定采樣點(diǎn)。各段的作用和Tq數(shù)如下表所示。

圖片

18.1.4 總線仲裁

在總線空閑態(tài),最先開(kāi)始發(fā)送消息的單元獲得發(fā)送權(quán)。當(dāng)多個(gè)單元同時(shí)開(kāi)始發(fā)送時(shí),各發(fā)送單元從仲裁段的第一位開(kāi)始進(jìn)行仲裁。連續(xù)輸出顯性電平最多的單元可繼續(xù)發(fā)送。實(shí)現(xiàn)過(guò)程如下圖所示。

圖片

單元1和單元2同時(shí)開(kāi)始向總線發(fā)送數(shù)據(jù),開(kāi)始部分他們的數(shù)據(jù)格式是一樣的,故無(wú)法區(qū)分優(yōu)先級(jí),直到T時(shí)刻,單元1輸出隱性電平,而單元2輸出顯性電平,此時(shí)單元1仲裁失利,立刻轉(zhuǎn)入接收狀態(tài)工作,不再與單元2競(jìng)爭(zhēng),而單元2則順利獲得總線使用權(quán),繼續(xù)發(fā)送自己的數(shù)據(jù)。這就實(shí)現(xiàn)了仲裁,讓連續(xù)發(fā)送顯性電平多的單元獲得總線使用權(quán)

18.1.5 STM32 CAN模組簡(jiǎn)介

STM32F1系列自帶的是基本擴(kuò)展CAN,支持CAN協(xié)議的2.0A和2.0B,支持報(bào)文發(fā)送的優(yōu)先級(jí)要求可軟件配置,最大通信速率1Mbps,3個(gè)發(fā)送郵箱和3級(jí)深度的2個(gè)接收緩存器FIFO,28個(gè)可變的濾波器組,STM32的CAN模組結(jié)構(gòu)如下圖所示。

圖片

從上面結(jié)構(gòu)可以看出,兩個(gè)CAN都分別具備自己的發(fā)送與接收郵箱,但是28個(gè)濾波器卻是公用的,通過(guò)FMR寄存器可以設(shè)置濾波器的分配方式,STM32的每個(gè)濾波器組的位寬都可以獨(dú)立配置,根據(jù)位寬的不同,每個(gè)濾波器組可以提供

(1)1個(gè)32位過(guò)濾器:包含STDID[10:0],EXTID[17:0],18位擴(kuò)展ID,IDE和RTR位

(2)1個(gè)16位過(guò)濾器:包含STDID[10:0],IDE,RTR和EXTID[17:15]

此外過(guò)濾器可以配置為屏蔽位模式與標(biāo)識(shí)符列表模式。

(1)在屏蔽位模式下,標(biāo)識(shí)符寄存器和屏蔽寄存器一起,指定報(bào)文標(biāo)識(shí)符的任何一位,應(yīng)該按照“必須匹配”或“不用關(guān)心”處理

(2)標(biāo)識(shí)符列表模式下,屏蔽寄存器也被當(dāng)作標(biāo)識(shí)符寄存器用。因此,不是采用一個(gè)標(biāo)識(shí)符加一個(gè)屏蔽位的方式,而是使用2個(gè)標(biāo)識(shí)符寄存器。接收?qǐng)?bào)文標(biāo)識(shí)符的每一位都必須跟過(guò)濾器標(biāo)識(shí)符相同。

18.1.6 CAN的發(fā)送流程

第1步:程序選擇1個(gè)空置的郵箱(TME=1),設(shè)置標(biāo)識(shí)符(ID),數(shù)據(jù)長(zhǎng)度和發(fā)送數(shù)據(jù)

第2步:設(shè)置CAN_TIxR的TXRQ位為1,請(qǐng)求發(fā)送

第3步:郵箱掛號(hào)(等待成為最高優(yōu)先級(jí))?

第4步:預(yù)定發(fā)送(等待總線空閑)

第5步:發(fā)送

第6步:郵箱空置

整個(gè)發(fā)送流程如下圖所示。

圖片

18.1.7 CAN的接收流程

CAN接收到的有效報(bào)文,被存儲(chǔ)在3級(jí)郵箱深度的FIFO中。FIFO完全由硬件來(lái)管理,從而節(jié)省了CPU的處理負(fù)荷,簡(jiǎn)化了軟件并保證了數(shù)據(jù)的一致性。應(yīng)用程序只能通過(guò)讀取FIFO輸出郵箱,來(lái)讀取FIFO中最先收到的報(bào)文。這里的有效報(bào)文是指那些正確被接收的(直到EOF都沒(méi)有錯(cuò)誤)且通過(guò)了標(biāo)識(shí)符過(guò)濾的報(bào)文。前面我們知道CAN的接收有2個(gè)FIFO,我們每個(gè)濾波器組都可以設(shè)置其關(guān)聯(lián)的FIFO,通過(guò)CAN_FFA1R的設(shè)置,可以將濾波器組關(guān)聯(lián)到FIFO0/FIFO1。CAN接收流程為:

FIFO空->收到有效報(bào)文->掛號(hào)1(存入FIFO的一個(gè)郵箱,這個(gè)由硬件控制,我們不需要理會(huì))->收到有效報(bào)文->掛號(hào)2->收到有效報(bào)文->掛號(hào)3->收到有效報(bào)文->溢出

這個(gè)流程里面,我們沒(méi)有考慮從FIFO讀出報(bào)文的情況,實(shí)際情況是:我們必須在FIFO溢出之前,讀出至少1個(gè)報(bào)文,否則下個(gè)報(bào)文到來(lái),將導(dǎo)致FIFO溢出,從而出現(xiàn)報(bào)文丟失。每讀出1個(gè)報(bào)文,相應(yīng)的掛號(hào)就減1,直到FIFO空,完整的接收流程圖如下圖所示。

圖片

FIFO接收到的報(bào)文數(shù),我們可以通過(guò)查詢CAN_RFxR的FMP寄存器來(lái)得到,只要FMP不為0,我們就可以從FIFO讀出收到的報(bào)文。

18.1.8 通信速率計(jì)算

根據(jù)通信參數(shù)小節(jié)我們可以知道1個(gè)位是由4個(gè)段組成,分別為同步段(SS),傳播時(shí)間段(PTS),相位緩沖段1(PBS1),相位緩沖段2(PBS2),STM32內(nèi)部將傳播時(shí)間段與相位緩沖段1合并為時(shí)間段1,這樣1個(gè)位就是有3個(gè)段組成,即同步段SS,時(shí)間段1和時(shí)間段2(即相位緩沖段),由于波特率的定義是1秒內(nèi)發(fā)送二進(jìn)制位的個(gè)數(shù),所以,CAN波特率的計(jì)算公式為

圖片

18.1.9 STM32F1系列CAN測(cè)試模式

(1)靜默模式

通過(guò)對(duì)CAN_BTR寄存器的SILM位置1,來(lái)選擇靜默模式。在靜默模式下,CAN可以正常地接收數(shù)據(jù)幀和遠(yuǎn)程幀,但只能發(fā)出隱性位,而不能真正發(fā)送報(bào)文。如果bxCAN需要發(fā)出顯性位(確認(rèn)位、過(guò)載標(biāo)志、主動(dòng)錯(cuò)誤標(biāo)志),那么這樣的顯性位在內(nèi)部被接回來(lái)從而可以被CAN內(nèi)核檢測(cè)到,同時(shí)CAN總線不會(huì)受到影響而仍然維持在隱性位狀態(tài)。因此,靜默模式通常用于分析CAN總線的活動(dòng),而不會(huì)對(duì)總線造成影響-顯性位(確認(rèn)位、錯(cuò)誤幀)不會(huì)真正發(fā)送到總線上,靜默模式等效圖如下圖所示。

圖片

(2)環(huán)回模式

通過(guò)對(duì)CAN_BTR寄存器的LBKM位置1,來(lái)選擇環(huán)回模式。在環(huán)回模式下,CAN把發(fā)送的報(bào)文當(dāng)作接收的報(bào)文并保存(如果可以通過(guò)接收過(guò)濾)在接收郵箱里,環(huán)回模式等效圖如下圖所示。

圖片

(3)環(huán)回靜默模式

該模式可用于“熱自測(cè)試”,即可以像環(huán)回模式那樣測(cè)試CAN,但卻不會(huì)影響CANTX和CANRX所連接的整個(gè)CAN系統(tǒng)。在環(huán)回靜默模式下,CANRX引腳與CAN總線斷開(kāi),同時(shí)CANTX引腳被驅(qū)動(dòng)到隱性位狀態(tài),環(huán)回靜默模式等效圖如下圖所示。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    883

    瀏覽量

    40309
  • 數(shù)據(jù)傳輸
    +關(guān)注

    關(guān)注

    9

    文章

    1891

    瀏覽量

    64605
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2754

    瀏覽量

    463717
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹一下stm32F103C8T6的can總線通信實(shí)驗(yàn)

    本篇文章介紹一下stm32F103C8T6的can總線通信實(shí)驗(yàn)需要兩塊stm32F103C8T6板子can
    發(fā)表于 08-19 06:29

    串口通信實(shí)驗(yàn)分享

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)? 自律學(xué)習(xí)堅(jiān)強(qiáng) ,拒絕迷茫。作者:行走的皮卡丘時(shí)間:2021/4/4喜歡就去追,這個(gè)紅燈等不到,說(shuō)不定下一個(gè)紅燈等到了,嘻嘻?。。。。。?!文章目錄實(shí)驗(yàn)四、串口
    發(fā)表于 01-14 09:08

    CAN通信實(shí)驗(yàn)報(bào)文對(duì)象的FIFO緩沖器應(yīng)用

    關(guān)鍵詞 CAN報(bào)文對(duì)象的FIFO模式應(yīng)用摘 要 CAN通信實(shí)驗(yàn)
    發(fā)表于 11-07 14:18 ?33次下載

    ALIENTEK_MINISTM32_實(shí)驗(yàn)19_無(wú)線通信實(shí)驗(yàn)

    ALIENTEK MINISTM32 實(shí)驗(yàn)19 無(wú)線通信實(shí)驗(yàn),很好的資料,快來(lái)下載吧
    發(fā)表于 02-19 11:40 ?12次下載

    CAN通信實(shí)驗(yàn)

    CAN通信實(shí)驗(yàn)。
    發(fā)表于 03-30 16:48 ?0次下載

    STM32各模塊學(xué)習(xí)筆記

    STM32個(gè)模塊學(xué)習(xí)筆記 目錄 STM32筆記之一 中斷優(yōu)先級(jí).......................................
    發(fā)表于 11-30 03:32 ?3160次閱讀

    STM32學(xué)習(xí)筆記--CAN

    目錄:一、CAN通信原理1.CAN通信簡(jiǎn)介2.CAN通信優(yōu)點(diǎn)3.
    發(fā)表于 11-19 12:21 ?86次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>--<b class='flag-5'>CAN</b>

    STM32CubMX自學(xué)筆記(七)—CAN通信實(shí)驗(yàn)

    STM32CubMX自學(xué)筆記(七)—CAN通信實(shí)驗(yàn)主要介紹由于項(xiàng)目需求要用到CAN通信協(xié)議,因此
    發(fā)表于 12-04 18:21 ?11次下載
    <b class='flag-5'>STM32</b>CubMX自學(xué)<b class='flag-5'>筆記</b>(七)—<b class='flag-5'>CAN</b><b class='flag-5'>通信實(shí)驗(yàn)</b>

    Can通信接口學(xué)習(xí)筆記

    Can通信接口學(xué)習(xí)筆記
    發(fā)表于 12-08 16:36 ?26次下載
    <b class='flag-5'>Can</b><b class='flag-5'>通信</b>接口<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    16 . USART 串口通信實(shí)驗(yàn)

    USART 串口通信實(shí)驗(yàn)我們知道STM32F1 內(nèi)部含有非常多的通信接口,我們就來(lái)學(xué)習(xí)下USART 串口通信。要實(shí)現(xiàn)的功能是:
    發(fā)表于 12-20 19:22 ?20次下載
    16 . USART 串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    STM32 串口通信實(shí)驗(yàn)

    stm32串口通信實(shí)驗(yàn)UART通信實(shí)驗(yàn)(通用異步收發(fā)器)UART串口通信原理:UART的通信過(guò)程實(shí)驗(yàn)
    發(fā)表于 12-20 19:26 ?15次下載
    <b class='flag-5'>STM32</b> 串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)? 自律 學(xué)習(xí)
    發(fā)表于 01-14 10:09 ?2次下載
    <b class='flag-5'>實(shí)驗(yàn)</b>四、串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)2

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN
    的頭像 發(fā)表于 02-16 14:37 ?1736次閱讀

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)3

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN
    的頭像 發(fā)表于 02-16 14:37 ?955次閱讀

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)4

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN
    的頭像 發(fā)表于 02-16 14:37 ?1079次閱讀