STM32 CAN通訊的基本知識(shí)及硬件設(shè)計(jì)


原標(biāo)題:STM32 CAN通訊的基本知識(shí)及硬件設(shè)計(jì)
一、STM32 CAN通訊的基本知識(shí)
1. CAN通訊概述
CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))是一種國(guó)際標(biāo)準(zhǔn)的串行通信協(xié)議,由德國(guó)BOSCH公司開(kāi)發(fā),并最終成為國(guó)際標(biāo)準(zhǔn)(ISO11519以及ISO11898)。它是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一,具有高可靠性和多主控制等特點(diǎn),廣泛應(yīng)用于汽車電子、工業(yè)自動(dòng)化等領(lǐng)域。
2. CAN協(xié)議幀類型
CAN協(xié)議定義了多種類型的幀,其中數(shù)據(jù)幀是最常用且復(fù)雜的幀類型。數(shù)據(jù)幀一般由7個(gè)段構(gòu)成,包括幀起始、仲裁段、控制段、數(shù)據(jù)段、CRC段、應(yīng)答段和幀結(jié)束。具體說(shuō)明如下:
* **幀起始(SOF)**:1bit,顯性信號(hào),表示數(shù)據(jù)幀(或遠(yuǎn)程幀)的開(kāi)始。 * **仲裁段**:包括標(biāo)識(shí)符位(Identifier field-ID)和遠(yuǎn)程發(fā)送請(qǐng)求位(Remote TransferRequest,RTR)。標(biāo)準(zhǔn)幀的ID位是11位,范圍是0x000~0x7FF;而擴(kuò)展幀的ID是29位。ID決定報(bào)文的優(yōu)先級(jí)高低,也決定拓?fù)浣Y(jié)構(gòu)的節(jié)點(diǎn)是否接收此ID的幀數(shù)據(jù)。遠(yuǎn)程發(fā)送請(qǐng)求位用于區(qū)分該幀是數(shù)據(jù)幀還是遠(yuǎn)程幀,顯性信號(hào)(0)代表數(shù)據(jù)幀,隱性信號(hào)(1)代表遠(yuǎn)程幀。 * **控制段**:標(biāo)準(zhǔn)幀中由擴(kuò)展標(biāo)識(shí)符位(Identifier Extension bit-IDE,1bit)、保留位0(Reseved bit0-r0,1bit)、數(shù)據(jù)長(zhǎng)度編碼位(Data Length Code-DLC,4bits)組成;擴(kuò)展幀由兩個(gè)保留位(Reseved bit,2bit)、數(shù)據(jù)長(zhǎng)度編碼位(Data Length Code-DLC,4bits)組成。 * **數(shù)據(jù)段**:發(fā)送數(shù)據(jù)的內(nèi)容,最多8個(gè)字節(jié)(64bit),實(shí)際長(zhǎng)度會(huì)寫到前面的數(shù)據(jù)長(zhǎng)度編碼位DLC里。 * **循環(huán)校驗(yàn)段(CRC Field)**:包括循環(huán)校驗(yàn)序列和界定符。循環(huán)校驗(yàn)序列用于校驗(yàn)傳輸是否正確。 * **確認(rèn)段(ACK Field)**:包括確認(rèn)位和界定符。確認(rèn)位在節(jié)點(diǎn)收到正確的CRC序列時(shí),發(fā)送端的ACK位被置位。 * **幀結(jié)束(End of Frame-EOF)**:7位長(zhǎng)度,隱性信號(hào),表示幀的結(jié)束。
3. CAN通訊物理層
CAN總線物理層主要有兩種形式:
* 一種是遵循ISO11898標(biāo)準(zhǔn)的高速、短距離“閉環(huán)網(wǎng)絡(luò)”,總線最大長(zhǎng)度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個(gè)“120歐”的電阻。 * 另一種是遵循ISO11519-2標(biāo)準(zhǔn)的低速、遠(yuǎn)距離“開(kāi)環(huán)網(wǎng)絡(luò)”,最大傳輸距離為1km,最高通訊速率為125kbps,兩根總線是獨(dú)立的、不形成閉環(huán),要求每根總線上各串聯(lián)有一個(gè)“2.2千歐”的電阻。
4. CAN通訊節(jié)點(diǎn)組成
CAN通訊節(jié)點(diǎn)由一個(gè)CAN控制器及CAN收發(fā)器組成。控制器與收發(fā)器之間通過(guò)CAN_Tx及CAN_Rx信號(hào)線相連,收發(fā)器與CAN總線之間使用CAN_High及CAN_Low信號(hào)線相連。這種差分信號(hào)傳輸方式具有抗干擾能力強(qiáng)、能有效抑制電磁干擾、時(shí)序定位精確等優(yōu)點(diǎn)。
5. STM32 CAN控制器簡(jiǎn)介
STM32系列微控制器內(nèi)置了CAN控制器,支持CAN 2.0A和CAN 2.0B Active版本協(xié)議。其中,CAN 2.0A只能處理標(biāo)準(zhǔn)數(shù)據(jù)幀,擴(kuò)展幀的內(nèi)容會(huì)識(shí)別為錯(cuò)誤;CAN 2.0B Active則可以處理標(biāo)準(zhǔn)數(shù)據(jù)幀和擴(kuò)展數(shù)據(jù)幀。STM32的CAN控制器通過(guò)硬件自動(dòng)處理幀格式、錯(cuò)誤檢測(cè)、自動(dòng)重傳等功能,降低了CPU處理CAN通信的開(kāi)銷。
二、STM32 CAN通訊的硬件設(shè)計(jì)
1. 硬件電路設(shè)計(jì)
在進(jìn)行STM32 CAN通訊的硬件設(shè)計(jì)時(shí),需要考慮CAN控制器的引腳配置、時(shí)鐘開(kāi)啟等前置工作。此外,還需要根據(jù)應(yīng)用需求選擇合適的CAN收發(fā)器,并將其與STM32的CAN控制器正確連接。同時(shí),在CAN總線的兩端需要接入120歐的終端電阻,以匹配總線阻抗,減少回波反射,提高數(shù)據(jù)通信的抗干擾能力以及可靠性。
2. 波特率配置
波特率是指每秒傳輸?shù)奈粩?shù),是CAN通訊中的一個(gè)重要參數(shù)。在STM32中,可以通過(guò)設(shè)置位時(shí)序參數(shù)(如同步段、傳播段、相位緩沖段等)來(lái)確定合適的波特率。這些參數(shù)的設(shè)置會(huì)影響到CAN通訊的可靠性和實(shí)時(shí)性,因此需要根據(jù)具體的應(yīng)用需求進(jìn)行配置。
3. 過(guò)濾器配置
STM32的CAN控制器提供了多個(gè)可配置的過(guò)濾器組,用于篩選接收到的報(bào)文。通過(guò)配置過(guò)濾器的模式、位寬、標(biāo)識(shí)符等參數(shù),可以確定哪些報(bào)文可以被接收,哪些報(bào)文需要被忽略。這有助于減少CPU處理CAN通信的開(kāi)銷,并提高系統(tǒng)的實(shí)時(shí)性。
4. 發(fā)送和接收流程
在STM32中進(jìn)行CAN通訊時(shí),發(fā)送和接收流程是關(guān)鍵的部分。發(fā)送流程包括選擇一個(gè)空置的郵箱、設(shè)置報(bào)文的ID、數(shù)據(jù)長(zhǎng)度以及要發(fā)送的數(shù)據(jù)、請(qǐng)求發(fā)送等步驟。接收流程則包括配置過(guò)濾器、等待接收中斷或輪詢接收FIFO的狀態(tài)、讀取接收到的報(bào)文等步驟。
綜上所述,STM32 CAN通訊的基本知識(shí)及硬件設(shè)計(jì)涉及多個(gè)方面,包括CAN協(xié)議幀類型、物理層特性、通訊節(jié)點(diǎn)組成、STM32 CAN控制器簡(jiǎn)介以及硬件電路設(shè)計(jì)、波特率配置、過(guò)濾器配置和發(fā)送接收流程等。在實(shí)際應(yīng)用中,需要根據(jù)具體的需求和場(chǎng)景進(jìn)行選擇和配置。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開(kāi)資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。