版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué) ARM 從 STM32 開(kāi)始STM32 開(kāi)發(fā)板庫(kù)函數(shù)-實(shí)戰(zhàn)篇:http: HYPERLINK http:/z/ http:/z:http課堂: HYPERLINK http:/s/ http:/s第 1 頁(yè) 共 26 頁(yè):4.10 STM32 CAN 通訊原理及實(shí)驗(yàn)4.10.1 概述CAN 概念控制器局域網(wǎng)總線(CAN,Controller Area Network)是一種用于實(shí)時(shí)應(yīng)用的串行通訊協(xié)議總線,它可以使絞線來(lái)傳輸信號(hào),是世界上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。CAN 協(xié)議由德國(guó)的 Robertch 公司開(kāi)發(fā),用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協(xié)議的健壯性使
2、其用途延伸到其他自動(dòng)化和工業(yè)應(yīng)用。CAN 協(xié)議的特性包括完整性的串行數(shù)據(jù)通訊、提供實(shí)時(shí)支持、傳輸速率高達(dá) 1Mb/s、同時(shí)具有 11 位的尋址以及檢錯(cuò)能力。CAN 總線是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率,電子干擾性,并且能夠檢測(cè)出產(chǎn)生的任何錯(cuò)誤。CAN 總線可以應(yīng)用于汽車電控制系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)測(cè)系統(tǒng)、醫(yī)療儀器、紡織機(jī)械、船舶等領(lǐng)域。 CAN 總線的特點(diǎn)1、具有實(shí)時(shí)性強(qiáng)、傳輸距離較遠(yuǎn)、抗電磁干擾能力強(qiáng)、成本優(yōu)點(diǎn);2、采線串行通信方式,檢錯(cuò)能力強(qiáng),可在高噪聲干擾環(huán)境中工作;3、具有優(yōu)先權(quán)和仲裁功能,多個(gè)控制模塊通過(guò) CAN 控制器掛到CAN-bus 上,形成多主機(jī)
3、局部網(wǎng)絡(luò);4、可根據(jù)報(bào)文的ID 決定接收或該報(bào)文;5、可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制;第 2 頁(yè) 共 26 頁(yè):6、發(fā)送的信息遭到破壞后,可自動(dòng)重發(fā);7、節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)退出總線的功能;8、報(bào)文不包含源地址或目標(biāo)地址,僅用標(biāo)志符來(lái)指示功能信息、優(yōu)先級(jí)信息。 CAN 總線的工作原理CAN 總線使用串行數(shù)據(jù)傳輸方式,可以 1Mb/s 的速率在 40m 的雙絞線上運(yùn)行,也可以使用光纜連接,而且在這種總線上總線協(xié)議支持多主控制器。CAN 與I2C 總線的許多細(xì)節(jié)很類似,但也有一些明顯的區(qū)別。當(dāng)CAN 總線上的一個(gè)節(jié)點(diǎn)(站)發(fā)送數(shù)據(jù)時(shí),它以報(bào)文形式廣播給網(wǎng)絡(luò)中所有節(jié)點(diǎn)。對(duì)每個(gè)節(jié)點(diǎn)來(lái)說(shuō),無(wú)論數(shù)據(jù)是
4、否是發(fā)給自己的,都對(duì)其進(jìn)行接收。每組報(bào)文開(kāi)頭的 11 位字符為標(biāo)識(shí)符,定義了報(bào)文的優(yōu)先級(jí),這種報(bào)文格式稱為面向內(nèi)容的編址方案。在同一系統(tǒng)中標(biāo)識(shí)符是唯一的,不可能有兩個(gè)站發(fā)送具有相同標(biāo)識(shí)符的報(bào)文。當(dāng)幾個(gè)站同時(shí)競(jìng)爭(zhēng)總線時(shí),這種配置十分重要。當(dāng)一個(gè)站要向其它站發(fā)送數(shù)據(jù)時(shí),該站的 CPU 將要發(fā)送的數(shù)據(jù)和自己的標(biāo)識(shí)符傳送給本站的CAN,并處于準(zhǔn)備狀態(tài);當(dāng)它收到總線分配時(shí),轉(zhuǎn)為發(fā)送報(bào)文狀態(tài)。CAN將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報(bào)文格式發(fā)出,這時(shí)網(wǎng)上的其它站處于接收狀態(tài)。每個(gè)處于接收狀態(tài)的站對(duì)接收到的報(bào)文進(jìn)行檢測(cè),判斷這些報(bào)文是否是發(fā)給自己的,以確定是否接收它。由于CAN 總線是一種面向內(nèi)容的編址方案,因此很
5、容易建立高水準(zhǔn)的控制系統(tǒng)并靈活地進(jìn)行配置可以很容易地在CAN 總線中加進(jìn)一些新站而無(wú)需在硬件或上進(jìn)行修改。當(dāng)所提供的新站是純數(shù)據(jù)接收設(shè)備時(shí),數(shù)據(jù)第 3 頁(yè) 共 26 頁(yè):傳輸協(xié)議不要求獨(dú)立的部分有物理目的地址。它允許分布過(guò)程同步化,即總線上控制器需要測(cè)量數(shù)據(jù)時(shí),可由網(wǎng)上獲得,而無(wú)須每個(gè)控制器都有自己獨(dú)立的傳感器。CAN 總線的應(yīng)用CAN 總線在組網(wǎng)和通信功能上的優(yōu)點(diǎn)以及其高性價(jià)比據(jù)定了它在許多領(lǐng)域有廣闊的應(yīng)用前景和發(fā)展?jié)摿Α_@些應(yīng)用有些共同之處:CAN 實(shí)際就是在現(xiàn)場(chǎng)起一個(gè)總線拓?fù)涞挠?jì)算機(jī)局域網(wǎng)的作用。不管在什么場(chǎng)合,它負(fù)擔(dān)的是任一節(jié)點(diǎn)之間的實(shí)時(shí)通信,但是它具備結(jié)構(gòu)簡(jiǎn)單、高速、可靠、價(jià)位優(yōu)勢(shì)。
6、CAN 總線最初是為汽車的電子控制系統(tǒng)而設(shè)計(jì)的,目前在歐洲生產(chǎn)的汽車中CAN 的應(yīng)用已非常普遍,不僅如此,這項(xiàng)技術(shù)已推廣到火車、輪船等交通工具中。1、汽車制造中的應(yīng)用2、大型儀器設(shè)備中的應(yīng)用3、工業(yè)控制中的應(yīng)用隨著計(jì)算機(jī)技術(shù)、通信技術(shù)和控制技術(shù)的發(fā)展,傳統(tǒng)的工業(yè)控制領(lǐng)域正經(jīng)歷著一場(chǎng)前所未有的,而工業(yè)控制的網(wǎng)絡(luò)化,更拓展了工業(yè)控制領(lǐng)域的發(fā)展空間,帶來(lái)新的發(fā)展機(jī)遇。在廣泛的工業(yè)領(lǐng)域,CAN 總線可作為現(xiàn)場(chǎng)設(shè)備級(jí)的通信總線,而且與其他的總線相比,具有很高的可靠性和性能價(jià)格比。這將是CAN 技術(shù)開(kāi)發(fā)應(yīng)用的一個(gè)主要的方向。第 4 頁(yè) 共 26 頁(yè):4、智能家庭和生活小區(qū)管理中的應(yīng)用5、機(jī)器人網(wǎng)絡(luò)互聯(lián)中的
7、應(yīng)用4.10.2 STM bxCAN 主要特點(diǎn)STM bxCAN 在CAN 的基礎(chǔ)上增加了一些新的特色,功能更豐富一些,主要特點(diǎn):支持CAN 協(xié)議 2.0A 和 2.0B 主動(dòng)模式波特率最高可達(dá) 1 兆位/秒支持時(shí)間觸發(fā)通信功能發(fā)送3 個(gè)發(fā)送郵箱發(fā)送報(bào)文的優(yōu)先級(jí)特性可配置發(fā)送SOF 時(shí)刻的時(shí)間戳接收第 5 頁(yè) 共 26 頁(yè):3 級(jí)深度的 2 個(gè)接收 FIFO可變的過(guò)濾器組:在互聯(lián)網(wǎng)產(chǎn)品中,CAN1 和CAN228 個(gè)過(guò)濾器組,其它的STM32F103xx 系列產(chǎn)品中有 14 個(gè)過(guò)濾器組標(biāo)識(shí)符列表接收SOF 時(shí)刻的時(shí)間戳?xí)r間觸發(fā)通信模式自動(dòng)重傳模式16 位運(yùn)行定時(shí)器可在最后 2 個(gè)數(shù)據(jù)字節(jié)發(fā)送時(shí)
8、間戳管理中斷可以4.10.3 STM bxCAN 初學(xué)者需要關(guān)注的幾個(gè)重點(diǎn)1、隱性位與顯性位CAN 總線為“隱性”(邏輯 1)時(shí),CAN_H 和CAN_L 的電平為 2.5V(電位差為 0V);CAN 總線為“顯性”(邏輯 0)時(shí),CAN_H 和CAN_L 的電平為 3.5V 和 1.5V(電位差為 2.5V);2、數(shù)據(jù)幀類型(1)標(biāo)準(zhǔn)數(shù)據(jù)幀由這幾部分組成:12 位沖裁字段、6 位控制字段、數(shù)據(jù)字段(8N)、16 位CRC 校驗(yàn)字段、7 位幀結(jié)束。第 6 頁(yè) 共 26 頁(yè):(2)擴(kuò)展數(shù)據(jù)幀由這幾部分組成:32 位沖裁字段、6 位控制字段、數(shù)據(jù)字段(8N)、16 位CRC 校驗(yàn)字段、7 位幀結(jié)束
9、。(3)標(biāo)準(zhǔn)幀由這幾部分組成:16 位沖裁字段、6 位控制字段、16 位CRC校驗(yàn)字段、7 位幀結(jié)束。(4)標(biāo)準(zhǔn)幀由這幾部分組成:32 位沖裁字段、6 位控制字段、16 位CRC校驗(yàn)字段、7 位幀結(jié)束。第 7 頁(yè) 共 26 頁(yè):4.10.4 STM bxCAN 控制和狀態(tài)寄存器 CAN 主控制寄存器(CAN_MCR)CAN 主控制寄存器是一個(gè) 32 位的寄存器。地址偏移量:0 x00復(fù)位值:0 x0001000228313029272625242322212019181716rwrwrwrwrw位詳細(xì)說(shuō)明第 8 頁(yè) 共26 頁(yè):位 31LOW2:郵箱 2 最低優(yōu)先級(jí)標(biāo)志(Lowest prio
10、rity flag forbox 2)當(dāng)多個(gè)郵箱在等待發(fā)送報(bào)文,且郵箱 2 的優(yōu)先級(jí)最低時(shí),硬件對(duì)該位置1。位 30LOW1:郵箱 1 最低優(yōu)先級(jí)標(biāo)志(Lowest priority flag forbox 1)當(dāng)多個(gè)郵箱在等待發(fā)送報(bào)文,且郵箱 1 的優(yōu)先級(jí)最低時(shí),硬件對(duì)該位置1。位 29LOW0:郵箱 0 最低優(yōu)先級(jí)標(biāo)志(Lowest priority flag forbox 0)當(dāng)多個(gè)郵箱在等待發(fā)送報(bào)文,且郵箱 0 的優(yōu)先級(jí)最低時(shí),硬件對(duì)該位置1。注:當(dāng)有 1 個(gè)郵箱在等待,則 LOW2:0被清0。位 28TME2:發(fā)送郵箱 2 空(Transmilbox 2 empty)當(dāng)郵箱 2 中沒(méi)
11、有等待發(fā)送的報(bào)文時(shí),硬件對(duì)該位置1。位 27TME1:發(fā)送郵箱 1 空(Transmilbox 1 empty)當(dāng)郵箱 1 中沒(méi)有等待發(fā)送的報(bào)文時(shí),硬件對(duì)該位置1。位 26TME0:發(fā)送郵箱 0 空(Transmilbox 0 empty)當(dāng)郵箱 0 中沒(méi)有等待發(fā)送的報(bào)文時(shí),硬件對(duì)該位置1。位 25:24CODE1:0:郵箱號(hào)(box code)當(dāng)有至少 1 個(gè)發(fā)送郵箱為空時(shí),這 2 位表示下一個(gè)空的發(fā)送郵箱號(hào)。當(dāng)所有的發(fā)送郵箱都為空時(shí),這 2 位表示優(yōu)先級(jí)最低的那個(gè)發(fā)送郵箱號(hào)。位 23ABRQ2:郵箱 2 終止發(fā)送(Abort request forbox 2)對(duì)該位置1,可以終止郵箱 2
12、的發(fā)送請(qǐng)求,當(dāng)郵箱 2 的發(fā)送報(bào)文被清除時(shí)硬件對(duì)該0。如果郵箱 2 中沒(méi)有等待發(fā)送的報(bào)文,則對(duì)該位置1沒(méi)有任何效果。位 22:20保留位,硬件強(qiáng)制其值為 0位 19TERR2:郵箱 2 發(fā)送失?。═ransmilserror ofbox 2)當(dāng)郵箱 2 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 18ALST2:郵箱 2 仲裁丟失(Arbitration lost forbox 2)當(dāng)郵箱 2 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 17TXOK2:郵箱 2 發(fā)送成功(TransmilsOK ofbox 2)每次在郵箱 2 進(jìn)行發(fā)送嘗試后,硬件對(duì)該位進(jìn)行更新:RES ET保留TIC MABO
13、MAWU MNAR TRFL MTXF PSLE EPTXR Q保留DBF CAN 接收FIFO 0 寄存器(CAN_RF0R)地址偏移量:0 x0C第 9 頁(yè) 共 26 頁(yè):0:上次發(fā)送嘗試失敗1:上次發(fā)送嘗試成功當(dāng)郵箱 2 進(jìn)行發(fā)送請(qǐng)求被成功完成后,硬件對(duì)該位置1。位 16RQCP2:郵箱 2 請(qǐng)求完成(Reqompletedbox 2)當(dāng)上次對(duì)郵箱 2 的請(qǐng)求(發(fā)送或終止)完成后,硬件對(duì)該位置1。對(duì)該位寫(xiě)1也可以對(duì)其清0;當(dāng)硬件接收到發(fā)送請(qǐng)求時(shí)也對(duì)該0。該位被清0時(shí),郵箱 2 的其它發(fā)送狀態(tài)位(TXOK2、ALST2 和 TERR2)也被清0位 15ABRQ1:郵箱 1 終止發(fā)送(Abo
14、rt request forbox 1)對(duì)該位置1,可以終止郵箱 1 的發(fā)送請(qǐng)求,當(dāng)郵箱 1 的發(fā)送報(bào)文被清除時(shí)硬件對(duì)該0。如果郵箱 1 中沒(méi)有等待發(fā)送的報(bào)文,則對(duì)該位置1沒(méi)有任何效果。位 14:12保留位,硬件強(qiáng)制其值為 0位 11TERR1:郵箱 1 發(fā)送失?。═ransmilserror ofbox 1)當(dāng)郵箱 1 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 10ALST1:郵箱 1 仲裁丟失(Arbitration lost forbox 1)當(dāng)郵箱 1 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 9TXOK1:郵箱 1 發(fā)送成功(TransmilsOK ofbox 1)每次在郵箱 1 進(jìn)
15、行發(fā)送嘗試后,硬件對(duì)該位進(jìn)行更新:0:上次發(fā)送嘗試失敗1:上次發(fā)送嘗試成功當(dāng)郵箱 1 進(jìn)行發(fā)送請(qǐng)求被成功完成后,硬件對(duì)該位置1。位 8RQCP1:郵箱 1 請(qǐng)求完成(Reqompletedbox 1)當(dāng)上次對(duì)郵箱 1 的請(qǐng)求(發(fā)送或終止)完成后,硬件對(duì)該位置1。對(duì)該位寫(xiě)1也可以對(duì)其清0;當(dāng)硬件接收到發(fā)送請(qǐng)求時(shí)也對(duì)該0。該位被清0時(shí),郵箱 1 的其它發(fā)送狀態(tài)位(TXOK1、ALST1 和 TERR1)也被清0位 7ABRQ0:郵箱 0 終止發(fā)送(Abort request forbox 0)對(duì)該位置1,可以終止郵箱 0 的發(fā)送請(qǐng)求,當(dāng)郵箱 0 的發(fā)送報(bào)文被清除時(shí)硬件對(duì)該0。如果郵箱 0 中沒(méi)有等
16、待發(fā)送的報(bào)文,則對(duì)該位置1沒(méi)有任何效果。位 6:4保留位,硬件強(qiáng)制其值為 0位 3TERR0:郵箱 0 發(fā)送失?。═ransmilserror ofbox 0)當(dāng)郵箱 0 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 2ALST0:郵箱 0 仲裁丟失(Arbitration lost forbox 0)當(dāng)郵箱 0 因?yàn)槌鲥e(cuò)而導(dǎo)致發(fā)送失敗時(shí),對(duì)該位置1。位 1TXOK0:郵箱 0 發(fā)送成功(TransmilsOK ofbox 0)每次在郵箱 0 進(jìn)行發(fā)送嘗試后,硬件對(duì)該位進(jìn)行更新:0:上次發(fā)送嘗試失敗1:上次發(fā)送嘗試成功當(dāng)郵箱 0 進(jìn)行發(fā)送請(qǐng)求被成功完成后,硬件對(duì)該位置1。位 0RQCP0:郵箱 0
17、 請(qǐng)求完成(Reqompletedbox 0)當(dāng)上次對(duì)郵箱 0 的請(qǐng)求(發(fā)送或終止)完成后,硬件對(duì)該位置1。對(duì)該位寫(xiě)1也可以對(duì)其清0;當(dāng)硬件接收到發(fā)送請(qǐng)求時(shí)也對(duì)該0。該位被清0時(shí),郵箱 0 的其它發(fā)送狀態(tài)位(TXOK1、ALST1 和 TERR1)也被清0復(fù)位值:0 x0031302928272625242322212019181716resrsrcw1rcw1rr位詳細(xì)說(shuō)明CAN 接收FIFO1 寄存器(CAN_RF1R)地址偏移量:0 x10復(fù)位值:0 x0031302928272625242322212019181716resrsrcw1rc w1rr位詳細(xì)說(shuō)明1026 頁(yè)第頁(yè) 共:位
18、31:6保留位,硬件強(qiáng)制其值為 0位 5RFOM1:接收 FIFO 1 輸出郵箱(Release FIFO 1 outputbox)通過(guò)對(duì)該位置1來(lái)接收 FIFO 的輸出郵箱,如果 FIFO 接收為空,那么對(duì)該保留RFO M1ROV R1FUL L1保留FMP11:0保留位 31:6保留位,硬件強(qiáng)制其值為 0位 5RFOM0:接收 FIFO 0 輸出郵箱(Release FIFO 0 outputbox)通過(guò)對(duì)該位置1來(lái) 接收 FIFO 的輸出郵箱,如果 FIFO 接收為空,那么對(duì)該位置1沒(méi)有任何效果。即只有當(dāng) FIFO 中有報(bào)文時(shí)對(duì)該位置1才有意義。如果 FIFO中有 2 個(gè)以上的報(bào)文,由于
19、當(dāng)輸出郵箱被 時(shí),硬件對(duì)該位置0。位 4FOVR0:FIFO 0 溢出(FIFO 0 overrrun)當(dāng) FIFO 0 已滿,又收到新的報(bào)文且報(bào)文符合過(guò)濾條件,硬件對(duì)該位置1。該位由清0。位 3FULL0:FIFO 0 滿(FIFO 0 full)當(dāng) FIFO 0 中有 3 個(gè)報(bào)文時(shí),硬件對(duì)該位置1。該位由清0。位 2保留位,硬件強(qiáng)制其值為 0位 1:0FMP01:0:FIFO 0 報(bào)文數(shù)目(FIFO 0 message pending)FIFO 0 報(bào)文數(shù)目,這兩位反映了當(dāng)前接收 FIFO 0 中存放的報(bào)文數(shù)目。每當(dāng) 1 個(gè)新的報(bào)文被存入接收 FIFO 0,硬件就對(duì) FMP0 加 1。每當(dāng)
20、對(duì) RFOM0 位寫(xiě)1來(lái)輸出郵箱,F(xiàn)MP0 就被減 1,直到其為 0。保留RFO M0ROV R0FUL LO保留FMP01:0保留 CAN 發(fā)送郵箱標(biāo)識(shí)符寄存器(CAN_TIxR)(x=0.2)地址偏移量:0 x108復(fù)位值:00 x190 0 x1A0,X=未定義位(除了第 0 位,復(fù)位時(shí) TXRQ=0)31302928272625242322212019181716rwrwrwrwrwrwrwrwrwrwrwrwrw位詳細(xì)說(shuō)明 CAN地址偏移量:0 x10C時(shí)序寄存器(CAN_BTR)第 11 頁(yè) 共 26 頁(yè):位 31:21STID10:0/EXID28:18:標(biāo)準(zhǔn)標(biāo)識(shí)符或擴(kuò)展標(biāo)識(shí)符(
21、Standard identifier or extended identifier)依據(jù) IDE 位的內(nèi)容,這些位或是標(biāo)準(zhǔn)標(biāo)識(shí)符,或是擴(kuò)展標(biāo)識(shí)的高字節(jié)。位 20:3EXID17:0:擴(kuò)展標(biāo)識(shí)符(Extended identifier)擴(kuò)展標(biāo)識(shí)的低字節(jié)。位 2IDE:標(biāo)識(shí)符選擇(identifier exten)該位決定發(fā)送郵箱中報(bào)文私用的標(biāo)識(shí)符類型 0:使用標(biāo)準(zhǔn)標(biāo)識(shí)符1:使用擴(kuò)展標(biāo)識(shí)符位 1RTR:發(fā)送請(qǐng)求(Remote transmisrequest) 0:數(shù)據(jù)幀1:幀位 0TXRQ:發(fā)送數(shù)據(jù)請(qǐng)求(Transmitbox request)由對(duì)其置1,來(lái)請(qǐng)求發(fā)送郵箱的數(shù)據(jù)。當(dāng)數(shù)據(jù)發(fā)送完成,郵
22、箱為空時(shí),硬件對(duì)其清0。EXID12:0IDERTRTXR QSTID10:0/EXID28:18EXID17:13位置1沒(méi)有任何效果。即只有當(dāng) FIFO 中有報(bào)文時(shí)對(duì)該位置1才有意義。如果 FIFO中有 2 個(gè)以上的報(bào)文,由于當(dāng)輸出郵箱被時(shí),硬件對(duì)該位置0。位 4FOVR1:FIFO 1 溢出(FIFO 1 overrrun)當(dāng) FIFO 1 已滿,又收到新的報(bào)文且報(bào)文符合過(guò)濾條件,硬件對(duì)該位置1。該位由清0。位 3FULL1:FIFO 1 滿(FIFO 0 full)當(dāng) FIFO 0 中有 3 個(gè)報(bào)文時(shí),硬件對(duì)該位置1。該位由清0。位 2保留位,硬件強(qiáng)制其值為 0位 1:0FMP11:0:
23、FIFO 1 報(bào)文數(shù)目(FIFO 1 message pending)FIFO 1 報(bào)文數(shù)目,這兩位反映了當(dāng)前接收 FIFO 1 中存放的報(bào)文數(shù)目。每當(dāng) 1 個(gè)新的報(bào)文被存入接收 FIFO 1,硬件就對(duì) FMP1 加 1。每當(dāng)對(duì) RFOM1 位寫(xiě)1來(lái)輸出郵箱,F(xiàn)MP1 就被減 1,直到其為 0。復(fù)位值:0 x01230000 ,注釋:當(dāng) CAN 處于初始化模式時(shí),該寄存器只能由31302928272625242322212019181716rwrwresrwrwresrwrwrwrwrwrwrwresrwrwrwrwrwrwrwrwrwrw位詳細(xì)說(shuō)明CAN 波特率計(jì)算公式CAN 波特率=系統(tǒng)時(shí)
24、鐘/分頻數(shù)/(1*tq+tBS1+tBS2)其中tBS1=tq*(TS13:0+1)tBS2=tq*(TS22:0+1)Tq=(BRP9:0+1)*tPCLKTq 表示一個(gè)時(shí)間單元第 12 頁(yè) 共 26 頁(yè):位 31SILM:靜默模式(用于調(diào)試) 0:正常狀態(tài);1:允許環(huán)回模式。位 30LBKM:環(huán)回模式(用于調(diào)試) 0:環(huán)回模式;1:允許環(huán)回模式。位 29:26保留位,硬件強(qiáng)制為 0。位 25:24SJW2:0:重新同步跳躍寬度(Resynchronization jump width)為了重新同步,該位域定義了CAN 硬件在每位中可以延長(zhǎng)或縮短多少個(gè)時(shí)間單元的上限。 Trjw=tcan *
25、 (sjw1:0+1)位 23保留位,硬件強(qiáng)制為 0。位 22:20TS22:0:時(shí)間段 2(Time segment 2)該位域定義了時(shí)間段 2 占用了多少個(gè)時(shí)間單元 Tbs2=tcan * (ts22:0+1)位 19:16TS13:0:時(shí)間段 1(Time segment 2)該位域定義了時(shí)間段 1 占用了多少個(gè)時(shí)間單元Tbs1=tcan * (ts13:0+1),關(guān)于位時(shí)間特性的詳細(xì)信息,請(qǐng)參考參考手冊(cè)位 15:10保留位,硬件強(qiáng)制為 0。位 9:0BRP9:0:波特率分頻器(Band rate prescaler)該位域定義了時(shí)間單元(tq)的時(shí)間長(zhǎng)度 Tq=(brq9:0+1)*t
26、pclkBRP9:0SIL MLBK MSJW1:0TS22:0TS13:0tPCLK=APB 時(shí)鐘的時(shí)間周期BPR9:0,TS13:0和TS22:0在CAN_BTR 寄存器中定義總體配置保持tBS1=tBS2,tBS2=1 個(gè)CAN 時(shí)鐘周期,tBS2=2tSJW計(jì)算波特率要遵循以上的方式和規(guī)定,公式看起來(lái)比較晦澀難懂,要仔細(xì)品味才能逐漸理解,不過(guò)在編寫(xiě)程序的時(shí)候也有一些簡(jiǎn)便的方法,先做出來(lái)了波特率設(shè)置表格,把常用的波特率(16 種)設(shè)置參數(shù)都詳細(xì)的列出來(lái),大家可以采用查表的方式很容易的查閱和應(yīng)用。波特率設(shè)置第 13 頁(yè) 共 26 頁(yè):CAN 波特率參數(shù)設(shè)置50KBPSCAN_SJW=CAN
27、_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=120;62.5KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=96;80KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=75;100KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2
28、=CAN_BS2_2tq; CAN_Prescaler=60;125KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=48;200KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=30;250KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=24; CAN濾波功能
29、1、位模式在位模式下,標(biāo)識(shí)符寄存器和寄存器一起,指定報(bào)文標(biāo)識(shí)符的任何一位,應(yīng)該按照“必須匹配”或者“不用關(guān)心”處理。2、標(biāo)識(shí)符列表模式在標(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í)符相同。為了過(guò)濾出一組標(biāo)識(shí)符,應(yīng)該設(shè)置過(guò)濾器組工作在位模式。為了過(guò)濾出一個(gè)標(biāo)識(shí)符,應(yīng)該設(shè)置過(guò)濾器組工作在標(biāo)識(shí)符列表模式。第 14 頁(yè) 共 26 頁(yè):400KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_5tq; CAN_BS2=CAN_BS2_2tq; CAN_Presc
30、aler=10;500KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_3tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=12;800KBPSCAN_SJW=CAN_SJW_1tq; CAN_BS1=CAN_BS1_5tq; CAN_BS2=CAN_BS2_2tq; CAN_Prescaler=5; bxCAN 工作模式bxCAN 有 3 種主要工作模式:初始化、正常和睡眠模式。還包括:測(cè)試模式、靜默模式、環(huán)回模式、環(huán)回靜默模式。當(dāng)上電復(fù)位時(shí)處于睡眠模式,處于低功耗工作;設(shè)置成進(jìn)入初始化模式,程序初始化;接著就進(jìn)入正常工作模式,處于
31、滿負(fù)荷工作狀態(tài)。這三種模式相互之間都可以直接轉(zhuǎn)換,不需要按照順序執(zhí)行,這就取決于編寫(xiě)程第 15 頁(yè) 共 26 頁(yè):序的設(shè)計(jì)。4.10.5 實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)編寫(xiě)CAN 程序,熟悉各種寄存器的使用和程序模塊設(shè)計(jì),初步了解CAN 總線的功能。通過(guò)本公司的USB-CAN 轉(zhuǎn)接器把開(kāi)發(fā)板上的數(shù)據(jù)通過(guò)CAN通道傳送到PC 機(jī)上顯示。4.10.6 硬件設(shè)計(jì)利用實(shí)驗(yàn)板上的CAN 通訊電路,可以很方便的實(shí)現(xiàn)這個(gè)功能。圖一CAN 通訊應(yīng)用電路4.10.7 CAN 總線通訊設(shè)計(jì)1、打開(kāi)CAN 時(shí)鐘;2、編寫(xiě)端口函數(shù);3、配置CAN 相關(guān)設(shè)置參數(shù) STM32 庫(kù)函數(shù)文件第 16 頁(yè) 共 26 頁(yè):stm32f10 x_g
32、pio.c stm32f10 x_rcc.cMisc.c/ 中斷控制字(優(yōu)先級(jí)設(shè)置)庫(kù)函數(shù) stm32f10 x_can.c/ CAN 通訊函數(shù)本節(jié)實(shí)驗(yàn)及以后的實(shí)驗(yàn)都是用到庫(kù)文件,其中 stm32f10 x_gpio.h頭文件包含了GPIO 端口的定義。stm32f10 x_rcc.h 頭文件包含了系統(tǒng)時(shí)鐘配置函數(shù)以及相關(guān)的外設(shè)時(shí)鐘使能函數(shù),所以要把這兩個(gè)頭文件對(duì)應(yīng)的stm32f10 x_gpio.c 和stm32f10 x_rcc.c 加到工程中;Misc.c 庫(kù)函數(shù)主要包含了中斷優(yōu)先級(jí)的設(shè)置,tm32f10 x_can.c 庫(kù)函數(shù)主要包含CAN 通訊設(shè)置,這些函數(shù)也要添加到函數(shù)庫(kù)中。以上庫(kù)
33、文件包含了本次實(shí)驗(yàn)所有要用到的函數(shù)使用功能。 自定義頭文件同時(shí)自己也創(chuàng)建了兩個(gè)公共的文件,這兩個(gè)文件主要存放自定義的公共函數(shù)和全局變量,以方便以后每個(gè)功能模塊之間傳遞參數(shù)。pbdata.h 文件里的內(nèi)容是語(yǔ)句#ifndef、#endif 是為了防止pbdata.h 文件被多個(gè)文件調(diào)用時(shí)出現(xiàn)錯(cuò)誤提示。如果不加這兩條語(yǔ)句,當(dāng)兩個(gè)文件同時(shí)調(diào)用pbdata 文件時(shí),第 17 頁(yè) 共 26 頁(yè):#ifndef _pbdata_H #define _pbdata_H#include stm32f10 x.h #include misc.h#include stm32f10 x_exti.h #includ
34、e stm32f10 x_tim.h #include stm32f10 x_can.h #include sttdio.hvoid RCC_HSE_Configuration(void); /定義函數(shù) void delay(u32 nCount);void delay_us(u32 nus); void delay_ms(u16 nms);#endifpbdata.h pbd會(huì)提示重復(fù)調(diào)用錯(cuò)誤。pbd文件里的內(nèi)容是第 18 頁(yè) 共 26頁(yè):#include pbdata.h /很重要,這個(gè)頭文件void RCC_HSE_Configuration(void) /HSE 作為 PLL 時(shí)鐘,P
35、LL 作為 SYSCLKRCC_DeInit(); /*將外設(shè) RCC 寄存器重設(shè)為缺省值 */ RCC_HSEConfig(RCC_HSE_ON);/*設(shè)置外部高速晶振(HSE) HSE 晶振打開(kāi)(ON)*/if(RCC_WaitForHSEStartUp() = SUCS) /*等待 HSE 起振,SUCS:HSE 晶振穩(wěn)定且就緒*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*設(shè)置 AHB 時(shí)鐘(HCLK)RCC_SYSCLK_Div1 AHB 時(shí)鐘 = 系統(tǒng)時(shí)*/RCC_PCLK2Config(RCC_HCLK_Div1); /*設(shè)置高速AHB 時(shí)鐘(PCLK2)
36、RCC_HCLK_Div1 APB2 時(shí)鐘 = HCLK*/RCC_PCLK1Config(RCC_HCLK_Div2); /*設(shè)置低速AHB 時(shí)鐘(PCLK1)RCC_HCLK_Div2 APB1 時(shí)鐘 = HCLK / 2*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/*設(shè)置PLL 時(shí)鐘源及倍頻系數(shù)*/RCC_PLLCmd(ENABLE);/*使能 PLL */while(RCC_GetFlagSus(RCC_FLAG_PLLRDY) = RESET) ; /*檢查指定的 RCC 標(biāo)志位(PLL 準(zhǔn)備好標(biāo)志)設(shè)置與否*/RCC_
37、SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*設(shè)置系統(tǒng)時(shí)鐘(SYSCLK) */ while(RCC_GetSYSCLKSource() != 0 x08);/*0 x08:PLL 作為系統(tǒng)時(shí)鐘 */void delay(u32 nCount)for(;nCount!=0;nCount-);/*名稱:delay_us(u32 nus)功能:微秒延時(shí)函數(shù)參數(shù):u32nus出口參數(shù):無(wú)說(shuō)明:調(diào)用方法:無(wú)*/ void delay_us(u32 nus)4.10.8 STM32 系統(tǒng)時(shí)鐘配置SystemInit()每個(gè)工程都必須在開(kāi)始時(shí)配置并啟動(dòng)STM32 系統(tǒng)時(shí)鐘
38、。4.10.9 GPIO 引腳時(shí)鐘使能第 19 頁(yè) 共 26 頁(yè):RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/功能復(fù)用 IO 時(shí)鐘使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);/CAN 總線時(shí)鐘使能u32 temp;SysTick-LOAD = 9*nus;SysTick-VAL=0X00;/清空計(jì)數(shù)器SysTick-CTRL=0X01;/使能,減到零是無(wú)動(dòng)作,采用外部
39、時(shí)鐘源 dotemp=SysTick-CTRL;/當(dāng)前倒計(jì)數(shù)值while(temp&0 x01)&(!(temp&(1CTRL=0 x00; /關(guān)閉計(jì)數(shù)器 SysTick-VAL =0X00; /清空計(jì)數(shù)器/*名稱:delay_ms(u16 nms)功能:毫秒延時(shí)函數(shù)參數(shù):u16 nms出口參數(shù):無(wú)說(shuō)明:調(diào)用方法:無(wú)*/ void delay_ms(u16 nms)u32 temp;SysTick-LOAD = 9000*nms; SysTick-VAL=0X00;/清空計(jì)數(shù)器SysTick-CTRL=0X01;/使能,減到零是無(wú)動(dòng)作,采用外部時(shí)鐘源 dotemp=SysTick-CTRL;/
40、當(dāng)前倒計(jì)數(shù)值while(temp&0 x01)&(!(temp&(1CTRL=0 x00; /關(guān)閉計(jì)數(shù)器SysTick-VAL =0X00; /清空計(jì)數(shù)器本節(jié)實(shí)驗(yàn)用到了PB 端口,所以要把PB 端口的時(shí)鐘打開(kāi);4.10.10 GPIO 管腳電平控制函數(shù)在主程序中采用while(1)循環(huán)語(yǔ)句,等待CAN 通訊中斷的到來(lái)。4.10.11 stm32f10 x_it.c 文件里的內(nèi)容是第 20 頁(yè) 共 26 頁(yè):#include stm32f10 x_it.h #include stm32f10 x_rcc.h #include misc.h#include pbdata.hvoid USB_LP_
41、CAN1_RX0_IRQHandler(void)while(1);/TxMessage.StdId=0 xFE005;/TxMessage.ExtId=0;/TxMessage.IDE=CAN_ID_STD; TxMessage.StdId=0; TxMessage.ExtId=0 xFF3;TxMessage.IDE=CAN_ID_EXT;/數(shù)據(jù)幀 TxMessage.RTR=CAN_RTR_DATA;/幀 TxMessage.RTR=CAN_RTR_REMOTE; TxMessage.DLC=8;TxMessage.Data0=0 x11; TxMessage.Data1=0 x22;
42、TxMessage.Data2=0 x33; TxMessage.Data3=0 x44; TxMessage.Data4=0 x55; TxMessage.Data5=0 x66; TxMessage.Data6=0 x77; TxMessage.Data7=0 x88;/CAN 發(fā)送數(shù)據(jù) CAN_Transmit(CAN1,&TxMessage); delay_ms(1000);4.10.12main.c 文件里的內(nèi)容是第 21 頁(yè) 共26 頁(yè):#include pbdata.hvoid RCC_Configuration(void); void GPIO_Configuration(vo
43、id); void NVIC_Configuration(void); void CAN_Configuration(void);main(void)CanTxMsg TxMessage;RCC_Configuration(); /系統(tǒng)時(shí)鐘初始化 GPIO_Configuration();/端口初始化 NVIC_Configuration(); CAN_Configuration();/CAN 總線初始化while(1);CanRxMsg RxMessage; CanTxMsg TxMessage;/CAN 接收 CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);T
44、xMessage.StdId=RxMessage.StdId; TxMessage.ExtId=RxMessage.ExtId; TxMessage.IDE=RxMessage.IDE; TxMessage.RTR=RxMessage.RTR; TxMessage.DLC=RxMessage.DLC;TxMessage.Data0=RxMessage.Data0; TxMessage.Data1=RxMessage.Data1; TxMessage.Data2=RxMessage.Data2; TxMessage.Data3=RxMessage.Data3; TxMessage.Data4=R
45、xMessage.Data4; TxMessage.Data5=RxMessage.Data5; TxMessage.Data6=RxMessage.Data6; TxMessage.Data7=RxMessage.Data7;/CAN 發(fā)送數(shù)據(jù) CAN_Transmit(CAN1,&TxMessage);第 22 頁(yè) 共 26 頁(yè):/TxMessage.StdId=0 xFE005;/TxMessage.ExtId=0;/TxMessage.IDE=CAN_ID_STD; TxMessage.StdId=0; TxMessage.ExtId=0 xFF3;TxMessage.IDE=CAN_
46、ID_EXT;/數(shù)據(jù)幀 TxMessage.RTR=CAN_RTR_DATA;/幀 TxMessage.RTR=CAN_RTR_REMOTE; TxMessage.DLC=8;TxMessage.Data0=0 x11; TxMessage.Data1=0 x22; TxMessage.Data2=0 x33; TxMessage.Data3=0 x44; TxMessage.Data4=0 x55; TxMessage.Data5=0 x66; TxMessage.Data6=0 x77; TxMessage.Data7=0 x88;/CAN 發(fā)送數(shù)據(jù) CAN_Transmit(CAN1,&
47、TxMessage); delay_ms(1000);void RCC_Configuration(void)SystemInit();/72m RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/端口 GP
48、IO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);GPIO_InitStructure.GPIO_PIO_Pin_8;/RX第 23 頁(yè) 共 26 頁(yè):GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_PIO_Pin_9;/TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_
49、AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; /設(shè)置 CAN中斷優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);void CAN_Configuration(void)/重點(diǎn)CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure;CAN_DeInit(CAN1);CAN_StructInit(&CAN_InitStructure);/關(guān)閉時(shí)間觸發(fā)模式 CAN_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村宅基地房屋轉(zhuǎn)讓合同
- 2025年度農(nóng)機(jī)設(shè)備委托管理與信息化平臺(tái)建設(shè)合同2篇
- 二零二五年度全新教育機(jī)構(gòu)兼職教師教學(xué)資料保密合同3篇
- 2025年度高級(jí)月嫂服務(wù)協(xié)議合同3篇
- 二零二五年度文化場(chǎng)館安保服務(wù)合同范本3篇
- 公墓墓位買賣及后期維護(hù)服務(wù)協(xié)議書(shū)3篇
- 2025年度洗衣機(jī)租賃與售后服務(wù)合同范本5篇
- 2024年沈陽(yáng)市安寧醫(yī)院皇姑分院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024年中國(guó)水泥去除劑市場(chǎng)調(diào)查研究報(bào)告
- 2025年度水電安裝勞務(wù)分包合同范本(含合同解除條件)3篇
- 【MOOC期末】《電子技術(shù)實(shí)習(xí)SPOC》(北京科技大學(xué))期末慕課答案
- 新媒體技術(shù)基礎(chǔ)知識(shí)單選題100道及答案解析
- 2025蛇年帶橫批春聯(lián)對(duì)聯(lián)200副帶橫批
- 互聯(lián)網(wǎng)+創(chuàng)新商業(yè)模式考核試卷
- 江蘇省揚(yáng)州市梅嶺中學(xué)2023-2024學(xué)年七年級(jí)上學(xué)期期末地理試題(含答案)
- 克羅恩病病例分析
- 《冠心病》課件(完整版)
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- Lesson-1.-spring-festival(雙語(yǔ)課件-春節(jié))
- 一年級(jí)必背古詩(shī)(拼音版)
- 電氣設(shè)備事故處理規(guī)程
評(píng)論
0/150
提交評(píng)論