国产chinesehdxxxx老太婆,办公室玩弄爆乳女秘hd,扒开腿狂躁女人爽出白浆 ,丁香婷婷激情俺也去俺来也,ww国产内射精品后入国产

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

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

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

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

汽車電子技術(shù) ? 來(lái)源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-03-01 14:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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ù)幀開始的段,標(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開始輸出

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

圖片

單元1和單元2同時(shí)開始向總線發(fā)送數(shù)據(jù),開始部分他們的數(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總線斷開,同時(shí)CANTX引腳被驅(qū)動(dòng)到隱性位狀態(tài),環(huán)回靜默模式等效圖如下圖所示。

圖片

18.2 相關(guān)寄存器

18.2.1 CAN主控制器:CAN_MCR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- DBF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RESET - TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ

Bit 16:DBF:調(diào)試凍結(jié)

0:在調(diào)試時(shí),CAN照常工作

1:在調(diào)試時(shí),凍結(jié)CAN的接收/發(fā)送。仍然可以正常地讀寫和控制接收FIFO

Bit 15:bxCAN軟件復(fù)位

0:本外設(shè)正常工作

1:對(duì)bxCAN進(jìn)行強(qiáng)行復(fù)位,復(fù)位后bxCAN進(jìn)入睡眠模式。此后硬件自動(dòng)對(duì)該位清0

Bit 7:時(shí)間觸發(fā)通信模式

0:禁止時(shí)間觸發(fā)通信模式

1:允許時(shí)間觸發(fā)通信模式

Bit 6:自動(dòng)離線管理

0:離線狀態(tài)的退出過(guò)程是,軟件對(duì)INRQ位進(jìn)行置1隨后清0后,一旦硬件檢測(cè)到128次11位連續(xù)的隱性位,則退出離線狀態(tài)

1:一旦硬件檢測(cè)到128次11位連續(xù)的隱性位,則自動(dòng)退出離線狀態(tài)

Bit 5:自動(dòng)喚醒模式

0:睡眠模式通過(guò)清除CAN_MCR寄存器的SLEEP位,由軟件喚醒

1:睡眠模式通過(guò)檢測(cè)CAN報(bào)文,由硬件自動(dòng)喚醒。喚醒的同時(shí),硬件自動(dòng)對(duì)SLEEP和SLAK位清0

Bit 4:禁止報(bào)文自動(dòng)重傳

0:按照CAN標(biāo)準(zhǔn),CAN硬件在發(fā)送報(bào)文失敗時(shí)會(huì)一直自動(dòng)重傳直到發(fā)送成功

1:CAN報(bào)文只被發(fā)送1次,不管發(fā)送的結(jié)果如何

Bit 3:接收FIFO鎖定模式

0:在接收溢出時(shí)FIFO未被鎖定,當(dāng)接收FIFO的報(bào)文未被讀出,下一個(gè)收到的報(bào)文會(huì)覆蓋原有的報(bào)文

1:在接收溢出時(shí)FIFO被鎖定,當(dāng)接收FIFO的報(bào)文未被讀出,下一個(gè)收到的報(bào)文會(huì)被丟棄

Bit 2:發(fā)送FIFO優(yōu)先級(jí)

0:優(yōu)先級(jí)由報(bào)文的標(biāo)識(shí)符來(lái)決定

1:優(yōu)先級(jí)由發(fā)送請(qǐng)求的順序來(lái)決定

Bit 1:睡眠模式請(qǐng)求(在復(fù)位后該位被置1)

1:可以請(qǐng)求CAN進(jìn)入睡眠模式,一旦當(dāng)前的CAN活動(dòng)結(jié)束,CAN就進(jìn)入睡眠

0:使CAN退出睡眠模式

Bit 0:初始化請(qǐng)求

0:當(dāng)CAN在接收引腳檢測(cè)到連續(xù)的11個(gè)隱性位后,CAN就達(dá)到同步,并為接收和發(fā)送數(shù)據(jù)作好準(zhǔn)備了。為此,硬件相應(yīng)地對(duì)INAK位清0

1:一旦當(dāng)前的CAN活動(dòng)結(jié)束,CAN就進(jìn)入初始化模式。相應(yīng)地,硬件對(duì)INAK位置1

18.2.2 CAN主狀態(tài)寄存器:CAN_MSR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- RX SAMP RXM TXM - SLAKI WKUI ERRI SLAK INAK

Bit 11:CAN接收電平,該位反映CAN接收引腳的實(shí)際電平

Bit 10:上次采樣值,CAN接收引腳的上次采樣值(對(duì)應(yīng)于當(dāng)前接收位的值)

Bit 9:接收模式,該位為1表示CAN當(dāng)前為接收器

Bit 8:發(fā)送模式,該位為1表示CAN當(dāng)前為發(fā)送器

Bit 4:睡眠確認(rèn)中斷,當(dāng)SLKIE=1,一旦CAN進(jìn)入睡眠模式硬件就對(duì)該位置1,緊接著相應(yīng)的中斷被觸發(fā)軟件可對(duì)該位清0,當(dāng)SLAK位被清0時(shí)硬件也對(duì)該位清0

Bit 3:?jiǎn)拘阎袛鄴焯?hào),當(dāng)CAN處于睡眠狀態(tài),一旦檢測(cè)到幀起始位,硬件就置該位為1

Bit 2:出錯(cuò)中斷掛號(hào),當(dāng)檢測(cè)到錯(cuò)誤時(shí),CAN_ESR寄存器的某位被置1,如果CAN_IER寄存器的相應(yīng)中斷使能位也被置1時(shí),則硬件對(duì)該位置1

Bit 1:睡眠模式確認(rèn)

0:CAN退出睡眠模式

1:CAN模塊正處于睡眠模式

Bit 0:初始化確認(rèn)

0:CAN退出初始化模式時(shí)

1:CAN模塊正處于初始化模式

18.2.3 CAN位時(shí)序寄存器:CAN_BTR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SILM LBKM - SJW[1:0] - TS2[2:0] TS1[3:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- BRP[9:0]

Bit 31:靜默模式(用于調(diào)試)

0:正常狀態(tài)

1:靜默模式

Bit 30:環(huán)回模式(用于調(diào)試)

0:禁止環(huán)回模式

1:允許環(huán)回模式

Bit 25~Bit 24:重新同步跳躍寬度,該位域定義了CAN硬件在每位中可以延長(zhǎng)或縮短多少個(gè)時(shí)間單元的上限,t RJW =t CAN ×(SJW[1:0]+1)

Bit 22~Bit 20:時(shí)間段2,該位域定義了時(shí)間段2占用了多少個(gè)時(shí)間單元,t BS2 =t CAN ×(TS2[2:0]+1)

Bit 19~Bit 16:時(shí)間段1,該位域定義了時(shí)間段1占用了多少個(gè)時(shí)間單元,t BS1 =t CAN ×(TS1[3:0]+1)

Bit 9Bit 0:波特率分頻器,該位域定義了時(shí)間單元tq的時(shí)間長(zhǎng)度,t q =(BRP[9:0]+1)×tPCLK~

18.2.4 CAN發(fā)送狀態(tài)寄存器:CAN_TSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOW2 LOW1 LOW0 TME2 TME1 TME0 CODE[1:0] ABRQ2 - TERR2 ALST2 TXOK2 RQCP2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ABRQ1 - TERR1 ALST1 TXOK1 RQCP1 ABRQ0 - TERR0 ALST0 TXOK0 RQCP0

Bit 31,Bit30,Bit 29:郵箱x最低優(yōu)先級(jí)標(biāo)志

當(dāng)多個(gè)郵箱在等待發(fā)送報(bào)文,且郵箱x的優(yōu)先級(jí)最低時(shí),硬件對(duì)該位置1

Bit 28,Bit 27,Bit 26:發(fā)送郵箱x空

Bit 25~Bit 24:郵箱號(hào)

當(dāng)有至少1個(gè)發(fā)送郵箱為空時(shí),表示下一個(gè)空的發(fā)送郵箱號(hào)。

當(dāng)所有的發(fā)送郵箱都為空時(shí),表示優(yōu)先級(jí)最低的那個(gè)發(fā)送郵箱號(hào)

Bit 23,Bit 15,Bit 7:郵箱x終止發(fā)送

Bit 19,Bit 11,Bit 3:郵箱x發(fā)送失敗

Bit 18,Bit 10,Bit 2:郵箱x仲裁丟失

Bit 17,Bit 9,Bit 1:郵箱x發(fā)送成功

Bit 16,Bit 8,Bit 0:郵箱x請(qǐng)求完成

18.2.5 CAN接收FIFOx寄存器:CAN_RFxR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- ROFM FOVR FULL - FMP[1:0]

Bit 5:釋放接收FIFO,輸出郵箱軟件通過(guò)對(duì)該位置1來(lái)釋放接收FIFO的輸出郵箱。如果接收FIFO為空,那么對(duì)該位置1沒(méi)有任何效果,即只有當(dāng)FIFO中有報(bào)文時(shí)對(duì)該位置1才有意義。如果FIFO中有2個(gè)以上的報(bào)文,由于FIFO的特點(diǎn),軟件需要釋放輸出郵箱才能訪問(wèn)第2個(gè)報(bào)文,當(dāng)輸出郵箱被釋放時(shí),硬件對(duì)該位清0

Bit 4:FIFO溢出,當(dāng)FIFO0已滿,又收到新的報(bào)文且報(bào)文符合過(guò)濾條件,硬件對(duì)該位置1,該位由軟件清0

Bit 3:FIFO滿,當(dāng)FIFO0中有3個(gè)報(bào)文時(shí),硬件對(duì)該位置1,該位由軟件清0

Bit 1~Bit 0:FIFO報(bào)文數(shù)目,表示當(dāng)前接收FIFO0中存放的報(bào)文數(shù)目

每當(dāng)1個(gè)新的報(bào)文被存入接收FIFO0,硬件就對(duì)FMP0加1

每當(dāng)軟件對(duì)RFOM位寫1來(lái)釋放輸出郵箱,F(xiàn)MP就被減1,直到其為0

18.2.6 CAN過(guò)濾器主控寄存器:CAN_FMR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- FINIT

Bit 0:過(guò)濾器初始化模式

0:過(guò)濾器組工作在正常模式

1:過(guò)濾器組工作在初始化模式

18.2.7 CAN過(guò)濾器模式寄存器:CAN_FM1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- FBM[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FBM[15:0]

Bit 29~Bit 0:過(guò)濾器模式

0:過(guò)濾器組x的2個(gè)32位寄存器工作在標(biāo)識(shí)符屏蔽位模式

1:過(guò)濾器組x的2個(gè)32位寄存器工作在標(biāo)識(shí)符列表模式

18.2.8 CAN過(guò)濾器位寬寄存器:CAN_FS1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- FSC[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FSC[15:0]

Bit 29~Bit 0:過(guò)濾器位寬設(shè)置

0:過(guò)濾器位寬為2個(gè)16位

1:過(guò)濾器位寬為單個(gè)32位

18.2.9 CAN過(guò)濾器FIFO關(guān)聯(lián)寄存器:CAN_FFA1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FFA[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FFA[15:0]

Bit 29~Bit 0:過(guò)濾器關(guān)聯(lián)設(shè)置

0:過(guò)濾器被關(guān)聯(lián)到FIFO0

1:過(guò)濾器被關(guān)聯(lián)到FIFO1

18.2.10 CAN過(guò)濾器激活寄存器:CAN_FA1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FACT[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FACT[15:0]

Bit 29~Bit 0:過(guò)濾器激活

0:過(guò)濾器被禁用

1:過(guò)濾器被激活

18.2.11 發(fā)送郵箱標(biāo)識(shí)符寄存器:CAN_TIxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
STID[10:0]/EXID[28:18] EXID[17:13]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXID[12:0] IDE RTR TXRQ

Bit 31~Bit 21:標(biāo)準(zhǔn)標(biāo)識(shí)符或擴(kuò)展標(biāo)識(shí)符,依據(jù)IDE位的內(nèi)容,這些位或是標(biāo)準(zhǔn)標(biāo)識(shí)符,或是擴(kuò)展身份標(biāo)識(shí)的高字節(jié)

Bit 20~Bit 3:擴(kuò)展標(biāo)識(shí)符,擴(kuò)展身份標(biāo)識(shí)的低字節(jié)

Bit 2:標(biāo)識(shí)符選擇

0:使用標(biāo)準(zhǔn)標(biāo)識(shí)符

1:使用擴(kuò)展標(biāo)識(shí)符

Bit 1:遠(yuǎn)程發(fā)送請(qǐng)求

0:數(shù)據(jù)幀

1:遠(yuǎn)程幀

Bit 0:發(fā)送數(shù)據(jù)請(qǐng)求,由軟件對(duì)其置1,來(lái)請(qǐng)求發(fā)送郵箱的數(shù)據(jù)。當(dāng)數(shù)據(jù)發(fā)送完成,郵箱為空時(shí),硬件對(duì)其清0

18.2.12 發(fā)送郵箱數(shù)據(jù)長(zhǎng)度和時(shí)間戳寄存器:CAN_TDTxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TIME[15:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- TGT - DLC[3:0]

Bit 31~Bit 16:報(bào)文時(shí)間戳,該域包含了,在發(fā)送該報(bào)文SOF的時(shí)刻,16位定時(shí)器的值

Bit 8:發(fā)送時(shí)間戳(只有在CAN處于時(shí)間觸發(fā)通信模式才有效)

0:不發(fā)送時(shí)間戳TIME[15:0]

1:發(fā)送時(shí)間戳TIME[15:0]

注:在長(zhǎng)度為8的報(bào)文中,時(shí)間戳TIME[15:0]是最后2個(gè)發(fā)送的字節(jié):TIME[7:0]作為第7個(gè)字節(jié),TIME[15:8]為第8個(gè)字節(jié),替換了寫入CAN_TDHxR[31:16]的數(shù)據(jù)。為了把時(shí)間戳的2個(gè)字節(jié)發(fā)送出去,DLC必須編程為8。

Bit 3~Bit 0:發(fā)送數(shù)據(jù)長(zhǎng)度,指定數(shù)據(jù)報(bào)文的數(shù)據(jù)長(zhǎng)度或者遠(yuǎn)程幀請(qǐng)求的數(shù)據(jù)長(zhǎng)度

18.2.13 發(fā)送郵箱低字節(jié)數(shù)據(jù)寄存器:CAN_TDLxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA3[7:0] DATA2[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA1[7:0] DATA0[7:0]

Bit 31~Bit 24:數(shù)據(jù)字節(jié)3

Bit 23~Bit 16:數(shù)據(jù)字節(jié)2

Bit 15~Bit 8:數(shù)據(jù)字節(jié)1

Bit 7~Bit 0:數(shù)據(jù)字節(jié)0

18.2.14 發(fā)送郵箱高字節(jié)數(shù)據(jù)寄存器:CAN_TDHxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA7[7:0] DATA6[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA5[7:0] DATA4[7:0]

Bit 31~Bit 24:數(shù)據(jù)字節(jié)7

Bit 23~Bit 16:數(shù)據(jù)字節(jié)6

Bit 15~Bit 8:數(shù)據(jù)字節(jié)5

Bit 7~Bit 0:數(shù)據(jù)字節(jié)4

18.2.15 接收郵箱標(biāo)識(shí)符寄存器:CAN_RIxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
STID[10:0]/EXID[28:18] EXID[17:13]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXID[12:0] IDE RTR -

Bit 31~Bit 21:標(biāo)準(zhǔn)標(biāo)識(shí)符或擴(kuò)展標(biāo)識(shí)符,依據(jù)IDE位的內(nèi)容,這些位或是標(biāo)準(zhǔn)標(biāo)識(shí)符,或是擴(kuò)展身份標(biāo)識(shí)的高字節(jié)

Bit 20~Bit 3:擴(kuò)展標(biāo)識(shí)符,擴(kuò)展身份標(biāo)識(shí)的低字節(jié)

Bit 2:標(biāo)識(shí)符選擇

0:使用標(biāo)準(zhǔn)標(biāo)識(shí)符

1:使用擴(kuò)展標(biāo)識(shí)符

Bit 1:遠(yuǎn)程發(fā)送請(qǐng)求

0:數(shù)據(jù)幀

1:遠(yuǎn)程幀

18.2.16 接收郵箱數(shù)據(jù)長(zhǎng)度和時(shí)間戳寄存器:CAN_RDTxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TIME[15:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FMI[7:0] - DLC[3:0]

Bit 31~Bit 16:報(bào)文時(shí)間戳,該域包含了,在接收該報(bào)文SOF的時(shí)刻,16位定時(shí)器的值

Bit 15~Bit 8:過(guò)濾器匹配序號(hào)

Bit 3~Bit 0:接收數(shù)據(jù)長(zhǎng)度

18.2.17 接收郵箱低字節(jié)數(shù)據(jù)寄存器:CAN_RDLxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA3[7:0] DATA2[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA1[7:0] DATA0[7:0]

Bit 31~Bit 24:數(shù)據(jù)字節(jié)3

Bit 23~Bit 16:數(shù)據(jù)字節(jié)2

Bit 15~Bit 8:數(shù)據(jù)字節(jié)1

Bit 7~Bit 0:數(shù)據(jù)字節(jié)0

18.2.18 接收郵箱高字節(jié)數(shù)據(jù)寄存器:CAN_RDHxR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA7[7:0] DATA6[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA5[7:0] DATA4[7:0]

Bit 31~Bit 24:數(shù)據(jù)字節(jié)7

Bit 23~Bit 16:數(shù)據(jù)字節(jié)6

Bit 15~Bit 8:數(shù)據(jù)字節(jié)5

Bit 7~Bit 0:數(shù)據(jù)字節(jié)4

18.3 實(shí)驗(yàn)例程

實(shí)驗(yàn)內(nèi)容:利用CAN的回環(huán)模式進(jìn)行數(shù)據(jù)收發(fā)測(cè)試,通信速率500Kbps。

(1)創(chuàng)建can.h文件,并輸入以下代碼。

/*********************************************************************************************************
            CAN    通    信    驅(qū)    動(dòng)    文    件
*********************************************************************************************************/
#ifndef _CAN_H_
#define _CAN_H_


#include "sys.h"                
/*********************************************************************************************************
                  函    數(shù)    列    表
*********************************************************************************************************/
u8 CAN_Init( u8 tsjw, u8 tbs2, u8 tbs1, u16 brp, u8 mode ) ;                      //CAN初始化
u8 CAN_Tx_Msg( u32 id, u8 ide, u8 rtr, u8 len, u8 *dat ) ;                        //CAN發(fā)送數(shù)據(jù)
void CAN_Rx_Msg( u8 fifox, u32 *id, u8 *ide, u8 *rtr, u8 *len, u8 *dat ) ;                //CAN接收數(shù)據(jù)


#endif

(2)創(chuàng)建can.c文件,并輸入以下代碼。

/*********************************************************************************************************
            CAN    通    信    驅(qū)    動(dòng)    程    序
*********************************************************************************************************/
#include "can.h"
/*******************************************************
Name    :CAN_Mode_Init
Function  :CAN初始化
Paramater  :
      tsjw:重新同步跳躍時(shí)間單元.范圍:1~3
      tbs2:時(shí)間段2的時(shí)間單元.范圍:1~8
      tbs1:時(shí)間段1的時(shí)間單元.范圍:1~16
      brp:波特率分頻器.范圍:1~1024
      mode:工作模式
        0:普通模式
        1:回環(huán)模式
Return    :
      0:成功
      其他:失敗
*******************************************************/
u8 CAN_Init( u8 tsjw, u8 tbs2, u8 tbs1, u16 brp, u8 mode )
{
  u16 i=0;
   if( ( tsjw==0 )||( tbs2==0 )||( tbs1==0 )||( brp==0 ) )
    return 1 ;
  //先減去1.再用于設(shè)置
  tsjw -= 1 ;
  tbs2 -= 1 ;
  tbs1 -= 1 ;
  brp -= 1 ;


  RCC->APB2ENR |= 1<<2 ;                                        //使能PA時(shí)鐘
  GPIOA->CRH &= 0xFFF00FFF ;
  GPIOA->CRH |= 0x000B8000 ;
    GPIOA->ODR |= 3<<11 ;
  RCC->APB1ENR |= 1<<25 ;                                        //使能CAN時(shí)鐘
  CAN1->MCR = 0x0000 ;                                        //退出睡眠模式
  CAN1->MCR |= 1<<0 ;                                          //請(qǐng)求CAN進(jìn)入初始化模式
  while( ( CAN1->MSR&0x01 )==0 )
  {
    i ++ ;
    if( i>100 )
      return 2 ;                                          //進(jìn)入初始化模式失敗
  }
  CAN1->MCR |= 0<<7 ;                                          //非時(shí)間觸發(fā)通信模式
  CAN1->MCR |= 0<<6 ;                                          //軟件自動(dòng)離線管理
  CAN1->MCR |= 0<<5 ;                                          //睡眠模式通過(guò)軟件喚醒
  CAN1->MCR |= 1<<4 ;                                          //禁止報(bào)文自動(dòng)傳送
  CAN1->MCR |= 0<<3 ;                                          //報(bào)文不鎖定,新的覆蓋舊的
  CAN1->MCR |= 0<<2 ;                                          //優(yōu)先級(jí)由報(bào)文標(biāo)識(shí)符決定
  CAN1->BTR = 0x00000000 ;                                      //清除原來(lái)的設(shè)置
  CAN1->BTR |= mode<<30 ;                                        //模式設(shè)置
  CAN1->BTR |= tsjw<<24 ;                                        //重新同步跳躍寬度(Tsjw)為tsjw+1個(gè)時(shí)間單位
  CAN1->BTR |= tbs2<<20 ;                                        //Tbs2=tbs2+1個(gè)時(shí)間單位
  CAN1->BTR |= tbs1<<16 ;                                        //Tbs1=tbs1+1個(gè)時(shí)間單位
  CAN1->BTR |= brp<<0 ;                                        //分頻系數(shù)(Fdiv)為brp+1
  CAN1->MCR &= ~( 1<<0 ) ;                                      //請(qǐng)求CAN退出初始化模式
  while( ( CAN1->MSR&0x01 )!=0 )
  {
    i ++ ;
    if( i>0xFFF0 )
      return 3 ;                                          //退出初始化模式失敗
  }
  //過(guò)濾器初始化
  CAN1->FMR |= 1<<0 ;                                          //過(guò)濾器組工作在初始化模式
  CAN1->FA1R &= ~( 1<<0 ) ;                                      //過(guò)濾器0不激活
  CAN1->FS1R |= 1<<0 ;                                        //過(guò)濾器位寬為32位
  CAN1->FM1R |= 0<<0 ;                                        //過(guò)濾器0工作在標(biāo)識(shí)符屏蔽位模式
  CAN1->FFA1R |= 0<<0 ;                                        //過(guò)濾器0關(guān)聯(lián)到FIFO0
  CAN1->sFilterRegister[ 0 ].FR1 = 0x00000000 ;                            //32位ID
  CAN1->sFilterRegister[ 0 ].FR2 = 0x00000000 ;                            //32位MASK
  CAN1->FA1R |= 1<<0 ;                                        //激活過(guò)濾器0
  CAN1->FMR &= 0<<0 ;                                          //過(guò)濾器組進(jìn)入正常模式
  return 0 ;
}
/*******************************************************
Name    :CAN_Tx_Msg
Function  :CAN發(fā)送數(shù)據(jù)
Paramater  :
      id:標(biāo)準(zhǔn)ID(11位)/擴(kuò)展ID(11位+18位)
      ide:ID類型
        0:標(biāo)準(zhǔn)幀
        1:擴(kuò)展幀
      rtr:數(shù)據(jù)類型
        0:數(shù)據(jù)幀
        1:遠(yuǎn)程幀
      len:要發(fā)送的數(shù)據(jù)長(zhǎng)度
      *dat:數(shù)據(jù)指針
Return    :
      0~3:郵箱編號(hào)
      0xFF:無(wú)有效郵箱
*******************************************************/
u8 CAN_Tx_Msg( u32 id, u8 ide, u8 rtr, u8 len, u8 *dat )
{
  u16 i;
  u8 mbox, sta=0 ;
  //郵箱0為空
  if( CAN1->TSR&( 1<<26 ) )
    mbox = 0 ;
  //郵箱1為空
  else if( CAN1->TSR&( 1<<27 ) )
    mbox = 1 ;
  //郵箱2為空
  else if( CAN1->TSR&( 1<<28 ) )
    mbox = 2 ;
  //無(wú)空郵箱,無(wú)法發(fā)送
  else
    return 0xFF ;
  CAN1->sTxMailBox[ mbox ].TIR = 0 ;                                  //清除之前的設(shè)置
  //標(biāo)準(zhǔn)幀
  if( ide==0 )
  {
    id &= 0x7FF ;                                          //取低11位stdid
    id <<= 21 ;
  }
  //擴(kuò)展幀
  else
  {
    id &= 0x1FFFFFFF ;                                        //取低32位extid
    id <<= 3 ;
  }
  CAN1->sTxMailBox[ mbox ].TIR |= id ;
  CAN1->sTxMailBox[ mbox ].TIR |= ide<<2 ;
  CAN1->sTxMailBox[ mbox ].TIR |= rtr<<1 ;
  len &= 0x0F ;                                            //得到低四位
  CAN1->sTxMailBox[ mbox ].TDTR &= 0xFFFFFFF0 ;
  CAN1->sTxMailBox[ mbox ].TDTR |= len ;                                //設(shè)置DLC
  //待發(fā)送數(shù)據(jù)存入郵箱
  CAN1->sTxMailBox[ mbox ].TDHR = ( ( (u32)dat[7]<<24 )|( (u32)dat[6]<<16 )|( (u32)dat[5]<<8 )|( (u32)dat[4] ) ) ;
  CAN1->sTxMailBox[ mbox ].TDLR = ( ( (u32)dat[3]<<24 )|( (u32)dat[2]<<16 )|( (u32)dat[1]<<8 )|( (u32)dat[0] ) ) ;
  CAN1->sTxMailBox[ mbox ].TIR |= 1<<0 ;                                //請(qǐng)求發(fā)送郵箱數(shù)據(jù)
  //獲取發(fā)送狀態(tài)
  while( ( sta!=0x07 )&&( i<0xFFF ) )
  {
    i ++ ;
    switch( mbox )
    {
      //郵箱0
      case 0:
        sta |= CAN1->TSR&( 1<<0 ) ;                                //RQCP0
        sta |= CAN1->TSR&( 1<<1 ) ;                                //TXOK0
        sta |= CAN1->TSR&( 1<<26 )>>24 ;                            //TME0
        break;
      //郵箱1
      case 1:
        sta |= CAN1->TSR&( 1<<8 )>>8 ;                              //RQCP1
        sta |= CAN1->TSR&( 1<<9 )>>8 ;                              //TXOK1
        sta |= CAN1->TSR&( 1<<27 )>>25 ;                            //TME1
        break;
      //郵箱2
      case 2:
        sta |= CAN1->TSR&( 1<<16 )>>16 ;                            //RQCP2
        sta |= CAN1->TSR&( 1<<17 )>>16 ;                            //TXOK2
        sta |= CAN1->TSR&( 1<<28 )>>26 ;                            //TME2
        break;
      //郵箱號(hào)不對(duì)
      default:
        sta = 0x05 ;
      break ;
    }
  }
  if( i==0xFFF )
    mbox = 0xFF ;
  return mbox ;
}
/*******************************************************
Name    :CAN_Rx_Msg
Function  :CAN接收數(shù)據(jù)
Paramater  :
      fifox:郵箱號(hào)
      id:標(biāo)準(zhǔn)ID(11位)/擴(kuò)展ID(11位+18位)
      ide:ID類型
        0:標(biāo)準(zhǔn)幀
        1:擴(kuò)展幀
      rtr:數(shù)據(jù)類型
        0:數(shù)據(jù)幀
        1:遠(yuǎn)程幀
      len:要發(fā)送的數(shù)據(jù)長(zhǎng)度
      *dat:數(shù)據(jù)指針
Return    :None
*******************************************************/
void CAN_Rx_Msg( u8 fifox, u32 *id, u8 *ide, u8 *rtr, u8 *len, u8 *dat )
{
  if( ( fifox==0 )&&( ( CAN1->RF0R&0x03 )==0 ) )
    len = 0 ;
  else if( ( fifox==1 )&&( ( CAN1->RF1R&0x03 )==0 ) )
    len = 0 ;
  else
  {
    //接收數(shù)據(jù)
    *ide = CAN1->sFIFOMailBox[ fifox ].RIR&0x04 ;                          //得到標(biāo)識(shí)符選擇位的值
    if( *ide==0 )
      *id = CAN1->sFIFOMailBox[ fifox ].RIR>>21 ;                          //標(biāo)準(zhǔn)標(biāo)識(shí)符
    else
      *id = CAN1->sFIFOMailBox[ fifox ].RIR>>3 ;                          //擴(kuò)展標(biāo)識(shí)符
    *rtr = CAN1->sFIFOMailBox[ fifox ].RIR&0x02 ;                          //得到遠(yuǎn)程發(fā)送請(qǐng)求值
    *len = CAN1->sFIFOMailBox[ fifox ].RDTR&0x0F ;                          //得到DLC
    dat[ 0 ] = CAN1->sFIFOMailBox[ fifox ].RDLR&0xFF ;
    dat[ 1 ] = ( CAN1->sFIFOMailBox[ fifox ].RDLR>>8 )&0xFF ;
    dat[ 2 ] = ( CAN1->sFIFOMailBox[ fifox ].RDLR>>16 )&0xFF ;
    dat[ 3 ] = ( CAN1->sFIFOMailBox[ fifox ].RDLR>>24 )&0xFF ;
    dat[ 4 ] = CAN1->sFIFOMailBox[ fifox ].RDHR&0xFF ;
    dat[ 5 ] = ( CAN1->sFIFOMailBox[ fifox ].RDHR>>8 )&0xFF ;
    dat[ 6 ] = ( CAN1->sFIFOMailBox[ fifox ].RDHR>>16 )&0xFF ;
    dat[ 7 ] = ( CAN1->sFIFOMailBox[ fifox ].RDHR>>24 )&0xFF ;
    if( fifox==0 )
      CAN1->RF0R |= 0x20 ;                                    //釋放FIFO0郵箱
    else if( fifox==1 )
      CAN1->RF1R |= 0x20 ;                                    //釋放FIFO1郵箱
  }
}

(3)創(chuàng)建1.c文件,并輸入以下代碼。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "can.h"


int main()
{
  u32 id;
  u8 ide, rtr, len, canbuf[ 8 ] ;
  STM32_Clock_Init( 9 ) ;                                        //STM32時(shí)鐘初始化
  SysTick_Init( 72 ) ;                                        //SysTick初始化
  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200
  CAN_Init( 1, 8, 9, 4, 1 ) ;                                      //CAN初始化
  CAN_Tx_Msg( 0x12, 0, 0, 8, "CAN Test" ) ;                              //發(fā)送8個(gè)字節(jié)
  while( 1 )
  {
    CAN_Rx_Msg( 0, &id, &ide, &rtr, &len, canbuf ) ;                        //讀取數(shù)據(jù)
  }
}
聲明:本文內(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

    文章

    1037

    瀏覽量

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

    關(guān)注

    57

    文章

    2920

    瀏覽量

    467857
  • 工業(yè)自動(dòng)化

    關(guān)注

    17

    文章

    2743

    瀏覽量

    68356
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【GD32F303紅楓派開發(fā)板使用手冊(cè)】第三十講 CAN -CAN通信實(shí)驗(yàn)

    CAN 是 Controller Area Network 的縮寫,是由德國(guó)BOSCH公司開發(fā)的,已成為ISO 國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。其主要應(yīng)用場(chǎng)合為汽車和工業(yè)控制。 CAN具有傳輸距離長(zhǎng),傳輸
    的頭像 發(fā)表于 07-05 11:13 ?4678次閱讀
    【GD32F303紅楓派開發(fā)板使用手冊(cè)】第三十講 <b class='flag-5'>CAN</b> -<b class='flag-5'>CAN</b><b class='flag-5'>通信實(shí)驗(yàn)</b>

    【NUCLEO-F412ZG試用體驗(yàn)】之————07 CAN通信實(shí)驗(yàn)

    關(guān)于CAN通信的問(wèn)題由于不熟悉,試了好幾天,現(xiàn)在終于解決了,先記下來(lái)?yè)?dān)心時(shí)間長(zhǎng)了又忘記了。一、硬件設(shè)置1.1 要進(jìn)行CAN通信首先要建立通信
    發(fā)表于 01-06 15:53

    請(qǐng)問(wèn)CAN收發(fā)實(shí)驗(yàn)怎么用esp8266在電腦上查看發(fā)送的數(shù)據(jù)?

    在用stm32f1戰(zhàn)艦v3做CAN通信實(shí)驗(yàn),資料里有完整的代碼,挺好的。但是要求用ESP8266 WiFi模塊,能在電腦上用網(wǎng)絡(luò)助手可以查看我用CAN發(fā)送的數(shù)據(jù)。也就是說(shuō)我用CAN發(fā)
    發(fā)表于 05-09 06:35

    基于STM32F429HAL庫(kù)的CAN通信代碼分享

    基于STM32F429HAL庫(kù)的CAN通信代碼* 最近在學(xué)正點(diǎn)原子阿波羅STM32F429開發(fā)板的CAN通信章節(jié),例程里只提供了查詢方式實(shí)現(xiàn)的CAN
    發(fā)表于 02-08 07:00

    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次下載

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

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

    正點(diǎn)原子開拓者FPGA Qsys視頻:CAN通信實(shí)驗(yàn)

    CAN總線采用了多主競(jìng)爭(zhēng)式總線結(jié)構(gòu),具有多主站運(yùn)行和分散仲裁的串行總線以及廣播通信的特點(diǎn)。CAN總線上任意節(jié)點(diǎn)可在任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò)上其它節(jié)點(diǎn)發(fā)送信息而不分主次,因此可在各節(jié)點(diǎn)之間實(shí)現(xiàn)自由
    的頭像 發(fā)表于 09-18 07:06 ?3351次閱讀
    正點(diǎn)原子開拓者FPGA Qsys視頻:<b class='flag-5'>CAN</b><b class='flag-5'>通信實(shí)驗(yàn)</b>

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

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

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

    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 ?2232次閱讀
    STM32入門學(xué)習(xí)筆記之<b class='flag-5'>CAN</b><b class='flag-5'>通信實(shí)驗(yàn)</b>1

    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 ?2127次閱讀

    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 ?1125次閱讀

    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 ?1311次閱讀