CAN是Controller Area Network的縮寫(以下稱為CAN),它的設計目標是以最小的CPU負荷來高效處理大量的報文。 1986年德國電氣商BOSCH公司開發出面向汽車的CAN通信協議。 此后,CAN通過ISO11898及ISO11519進行了標準化,現在在歐洲已是汽車網絡的標準協議。 現在,CAN的高性能和可靠性已被認同,并被廣泛地應用于工業自動化、船舶、醫療設備、工業設備等方面。
CAN協議特點:
多主控制:
在總線空閑時,所有節點均可發送信息。 如果出現兩個及以上節點同時開始發送信息時,總線會根據標識符(Identifier以下稱為ID)進行仲裁,ID越小則優先級高,則仲裁優勝,仲裁優勝的節點繼續發送,仲裁失利的節點立即轉入接收狀態。 需注意,ID并不是表示節點地址,而是指示所發送的報文的優先級。
系統的靈活性:
如上所述,與CAN總線的各節點沒有類似于“地址”的信息。 因此在總線上增減節點時,連接在總線上的其它節點的軟硬件設計均不受影響。
高可靠性:
CAN協議具有錯誤檢測、錯誤通知、故障封閉和錯誤恢復功能。 CAN總線上的任意節點均可檢測錯誤(錯誤檢測); 檢測到錯誤后向總線發送錯誤幀以通知其他節點(錯誤通知); 同時每個節點內部有一個錯誤計數功能,每次檢測到錯誤之后,錯誤計數值累加,當某節點持續錯誤導致計數連續累加,直到大于256后,此故障節點從總線上斷開,避免影響其他節點(故障封閉)。 且發送節點如果在發送信息的過程中檢測到錯誤,待錯誤結束后會自動重發此信息直到成功發送(錯誤恢復)。
通信速度較快,通信距離遠:
最高1Mbps(距離小于40m),最遠可達10km(速率低于5Kbps)。
可連接節點多:
CAN總線是可同時連接多個節點。 節點數量理論上是沒有限制的。 但實際上節點數量受總線時間延遲及電氣負載的限制。 降低通信速度,可連接的節點數增加; 提高通信速度,則可連接的節點數減少。
正是因為CAN協議的這些特點,使得CAN特別適合工業過程監控設備的互連,因此,越來越受到工業界的重視,并已公認為最有前途的現場總線之一。 CAN協議經過ISO標準化后有兩個標準:ISO11898標準和ISO11519-2標準。 其中ISO11898是針對通信速率為125Kbps~1Mbps的高速通信標準,而ISO11519-2是針對通信速率為125Kbps以下的低速通信標準。 本文例程使用的是1Mbps的通信速率,使用的是ISO11898標準。
CAN協議介紹
本章主要介紹CAN的網絡拓撲結構、總線物理層特性、幀類型、幀結構、位填充機制、位格式、同步機制、仲裁機制、錯誤處理機制等。 另外還有CAN協議的更多細節請參考BOSCH CAN協議,本文不再詳述。
CAN網絡拓撲結構
如下圖1:CAN總線由兩條差分線CANH和CANL組成,各個節點通過較短的支線接入CAN總線。 各節點從通信協議而言是沒有主從和地址區分的,每個節點均可以平等的收發數據。 另外,在CAN總線的兩端各有一個120Ω的終端電阻,來做阻抗匹配,以減少回波反射。
圖1 CAN網絡拓撲結構
CAN總線物理層特性
如下圖2:顯性電平對應邏輯“0”,CANH和CANL壓差2.5V左右。 而隱性電平對應邏輯“1”,CANH和CANL壓差為0V。 在總線上,顯性電平具有優先權,只要有一個節點輸出顯性電平,總線上即為顯性電平。 而隱形電平則具有包容的意味,只有所有的節點都輸出隱性電平,總線上才為隱性電平。
圖2 CAN總線電平特性
幀類型
如下表1,CAN包含了以下5種幀類型。 其中數據幀和遠程幀由用戶控制收發; 錯誤幀、過載幀和間隔幀是CAN總線上各節點硬件根據對應狀態發送,用戶不能也無需控制。
表1 CAN幀類型
如下圖3,包含了各類型幀結構示意。
圖3 CAN各幀類型
幀結構
本文僅對標準數據幀進行詳細介紹,其他幀類型可參考圖3與標準數據幀進行對比理解。
一幀標準數據幀包含如下部分:
幀起始:為1bit顯性位。 由于CAN總線空閑時是隱性電平,幀起始的顯性位用于提示總線上的節點“一幀信息傳輸開始了”。
仲裁段:表示該幀優先級的段,包含標識符和幀類型(數據/遠程幀)。
控制段:表示數據的字節數、標識符類型(標準/擴展標識符)及保留位的段。
數據段:數據,一幀可發送0~8個字節的數據(數據長度根據控制段的DLC決定)。
CRC段:發送節點將CRC計算區域(不包含填充位)進行CRC計算后放入CRC段發送。 接收節點也對CRC計算區域進行CRC計算,并與收到的CRC域進行對比,若CRC對比結果有誤則向總線發送錯誤幀,若對比結果正確則隨后發送應答。
ACK段:含應答位(ACK SLOT)和應答間隔符(ACK DELIMITER)。 發送節點在ACK段均發送隱性電平; 接收節點如果在接收過程中沒有檢測到錯誤,則在應答位輸出1bit顯性電平,以通知發送節點“這幀數據被正確的接收了”。
幀結束:表示數據幀結束的段,為7bit隱性電平。
圖4 CAN標準數據幀
位填充
由于CAN總線只有CANH/CANL兩條差分線,沒有CLK線來做同步,所以CAN是直接通過數據流中間的跳變沿來做同步的(參考下文同步機制)。 而為了避免數據流中出現大段沒有跳變沿的情況,CAN加入了“位填充”機制。
即發送器只要檢測到位流里有5個連續相同值的位,便自動在位流里插入一相反電平的填充位。 例如,原始數據流為“0000000111110001…”,經過位填充后實際輸出到CAN總線的數據流為“000001001111100001…”,加下劃線的位即為填充位。
位填充的范圍為幀起始(SOF)~CRC域(不含CRC間隔符),參考上圖4。
位格式
AT32的CAN一個bit可分為3段:
同步段(SYNC_SEG)
位段1(BIT SEGMENT 1),包括CAN標準里的PROP_SEG和PHASE_SEG1,記為BSEG1。
位段2(BIT SEGMENT 2),即CAN標準里的PHASE_SEG2,記為BSEG2。
這些段又由Time Quantum(以下稱為Tq)的最小時間單位構成。
1位分為3個段,每個段又由若干個Tq構成,這稱為位時序。
1位由多少個Tq構成、每個段又由多少個Tq構成等,可以任意設定位時序。 用戶通過設定位時序和Tq長度來設定CAN的波特率和采樣點。 關于波特率和采樣點設置,后文詳細介紹。
各段作用及AT32的CAN可配置的Tq數見下表2:
表2 位的各段的作用
如下圖5,同步段、位段1和位段2組成一個bit。 BSEG1和BSEG2段交界處為采樣點,即接收節點采樣的時間點。
圖5 位時序
同步機制
硬同步(HARD SYHCHRONIZATION):
硬同步后,內部的位時間從同步段重新開始。 因此,硬同步強迫由硬同步引起的沿處于重新開始的位時間同步段之內。 即下圖6的理想跳變沿情況。
重新同步跳轉寬度(RESYHCHRONIZATION JUMP WIDTH):
重新同步的結果,使位段1增長,或使位段2縮短。 位段增長或縮短的數量有一個上限,此上限由重新同步跳轉寬度給定。 重新同步跳轉寬度應設置于1~4Tq之間。
如下圖6:
當在BSEG1段檢測到下降沿,則BSEG1段增長Tdelay,當前bit整體增長Tdelay,其中Tdelay<=重新同步跳轉寬度。
當在BSEG2段檢測到下降沿,則BSEG2段縮短Tadvance,當前bit整體縮短Tadvance,其中Tadvance<=重新同步跳轉寬度。
圖6 重同步跳躍
仲裁機制
只要總線空閑,任何單元都可以開始發送報文。 如果2個或2個以上的單元同時開始傳送報文,那么就會有總線訪問沖突。 通過對ID進行逐位仲裁可以解決這個沖突。 仲裁的機制確保了報文和時間均不損失。 當具有相同ID的數據幀和遠程幀同時初始化時,數據幀優先于遠程幀。 仲裁期間,每一個發送節點都對發送位的電平與被監控的總線電平進行比較。 如果電平相同,則這個節點可以繼續發送。 如果發送的是一“隱性”電平而監測到是一“顯性”電平(見總線電平),那么該節點就失去了仲裁,必須立即退出發送狀態并轉入接收狀態。
例如下圖7,節點1和節點2同時發送一幀數據,ID段前幾bit相同。 直到紅色處,節點1發送隱性電平“1”,節點2發送顯性電平“0”。 此時節點2仲裁優勝,繼續發送,總線電平和節點2發送值一致; 而節點1仲裁失利,在下一bit轉入接收,后續節點1的發送引腳保持隱性電平。
圖7 仲裁機制
錯誤處理機制
錯誤類型
CAN協議定義了以下5種不同的錯誤類型:
位錯誤(Bit Error)
單元在發送位的同時也對總線進行監視。 如果所發送的位值與所監視的位值不相符合,則在此位時間里檢測到一個位錯誤。 AT32將位錯誤細分為顯性位錯誤(發送顯性位但檢測到隱性位)和隱性位錯誤(發送隱性位但檢測到顯性位)。 CAN節點在發送狀態會出現此類錯誤。
但是在仲裁場(ARBITRATION FIELD)的填充位流期間或應答間隙(ACK SLOT)發送一“隱性”位的情況是例外的——此時,當監視到一“顯性”位時,不會發出位錯誤。 當發送器發送一個被動錯誤標志但檢測到“顯性”位時,也不視為位錯誤。
位填充錯誤(Stuff Error)
如果在使用一幀報文的位填充區域(參考圖4的“位填充區域”)檢測到6個連續相同的位電平時,將檢測到一個位填充錯誤。 CAN節點在接收狀態會出現此類錯誤。
CRC錯誤(CRC Error)
CRC序列包括發送器的CRC計算結果。 接收器計算CRC的方法與發送器相同。 如果計算結果與接收到CRC序列的結果不相符,則檢測到一個CRC錯誤。 CAN節點在接收狀態會出現此類錯誤。
格式錯誤(Form Error)
當一個固定形式的位場含有1個或多個非法位,則檢測到一個格式錯誤。 例如在CRC間隔符/ACK間隔符的位場檢測到顯性位,則會檢測到格式錯誤。 例外:接收器的幀末尾最后一位期間的顯性位不被當作幀錯誤。 CAN節點在接收狀態會出現此類錯誤。
應答錯誤(Acknowledgment Error)
只要在應答位(ACK SLOT)期間所監測的位不為“顯性”,則發送器會檢測到一個應答錯誤。 CAN節點在發送狀態會出現此類錯誤。
錯誤狀態
CAN節點檢測到錯誤之后,根據不同狀態和錯誤類型會對發送錯誤計數器(TEC[7:0])/接收錯誤計數器(REC[7:0])進行加1或加8(具體增加規則請參考BOSCH CAN協議),每正確的發送/接收一幀數據后,發送/接收錯誤計數器減1。 因此發送/接收錯誤計數器值表明了CAN節點和網絡的穩定程度。 根據發送/接收錯誤計數器值,一個節點的狀態會處于以下三種之一:
錯誤主動
“錯誤主動”的節點可以正常地參與總線通訊并在錯誤被檢測到時發出主動錯誤標志(6個顯性位)。 見下圖8,TEC<128且REC<128即為錯誤主動狀態。
錯誤被動
“錯誤被動”的節點可參與總線接收和發送數據/遠程幀。 但檢測到錯誤時只能發送錯誤被動標志(6個隱形位)。 見下圖8,255≥TEC>128且255≥REC>128即為錯誤被動狀態。
離線
“離線”的節點相當于直接從CAN總線斷開,不能收/發任何信息。 見下圖8,TEC>255即為離線狀態。
AT32離線管理:AT32 CAN從離線狀態恢復分兩種情況:
1)當CAN主控制寄存器(CAN_MCTRL)AEBOEN位為‘0’時,需要軟件請求進入凍結模式,再請求退出凍結模式,然后在通信模式下等待CAN節點RX檢測到128次11個連續隱性位,隨后該節點會從離線狀態恢復。
2)當AEBOEN位為‘1’時,通信模式下CAN節點RX檢測到128次11個連續隱性位,就自動從離線狀態恢復。
圖8 錯誤狀態
AT32的CAN
AT32的CAN支持標準CAN協議2.0A和2.0B。 且在兼容標準CAN協議的基礎上增加了一些功能和可配置選項。 其中CAN 2.0A和2.0B的主要差別在于:CAN 2.0A僅支持11bit ID,即只支持標準幀; CAN 2.0B支持11bit/29bit ID,即支持標準幀和擴展幀。
本章節主要介紹AT32 CAN的主要設計結構和使用,介紹了AT32 CAN的正常通信流程,包括發送流程、接收流程、報文過濾、波特率及采樣點設置等。 其他AT32 CAN相關設計,例如錯誤管理、中斷管理等,請參考RM相關章節。
整體功能介紹
隨著CAN網絡節點和報文數量的增加,需要一個增強的過濾機制處理各種類型的報文,減少接收報文的處理時間,采用FIFO的方案,使得CPU可以長時間處理應用層任務而不會丟失報文。 同時發送報文由硬件控制發送優先級順序。 基于以上考慮,CAN控制器提供28組位寬可配置的標識符過濾器組,2個接收FIFO,每個FIFO都可以存放3個完整的報文。 共有3個發送郵箱,發送調度器決定發送優先級順序。 整個收發過程完全由硬件管理,無需占用CPU資源。
圖9 AT32 CAN整體功能介紹
CAN發送流程
CAN發送流程見下圖10和以下的步驟:
用戶使用時只需操作1)~3)。 4)~7)由硬件自動完成,無需用戶代碼參與,不占用CPU資源。
1)程序選擇1個空置的郵箱(發送郵箱空標志TMxEF=1)
2)將需要發送的報文寫入對應的空郵箱。 報文內容包含:ID、幀類型、數據長度和發送數據等
3)請求發送:將CAN_TMIx的TMSR位置1
4)郵箱掛號(等待成為最高優先級)
5)預定發送(等待總線空閑)
6)發送
7)郵箱空置
注:以上步驟1)~7)只簡單介紹正常發送流程,下圖10中還包含取消發送、發送失敗、自動/不自動重傳等情況,可參考RM文件報文發送一節,這里不再詳述。
下圖10中標志位和操作位說明如下:
TMxTCF:請求完成標志位(發送/中止請求)
TMxTSF:發送成功標志位
TMxEF:發送郵箱空標志位
TMSR:請求發送
TMxCT:中止發送
PRSFEN:禁止自動重傳(PRSFEN=1時,禁止自動重傳; PRSFEN=0時,自動重傳直到發送成功)
圖10 CAN發送流程
CAN接收流程
CAN常用接收流程如下,即下圖11的“空”和“掛號_1”兩個狀態間循環:
1)FIFO空
2)收到有效報文
3)進入“掛號_1”狀態(FIFO內有1條有效報文的狀態)
4)讀取有效報文:讀取接收郵箱寄存器(CAN_RFIx,CAN_RFCx,CAN_RFDTLx,
CAN_RFDTHx)。
5)釋放郵箱:CAN_RFx寄存器RFxR位置1。
注:用戶使用時只需操作4)~5)。 1)~3)由硬件自動完成,無需用戶代碼參與,不占用CPU資源。
有效報文:
當報文被正確接收(直到EOF域的最后一位都沒有錯誤),且通過了標識符過濾,那么該報文被認為是有效報文。 過濾器相關介紹見下一節。
而如果接收過程中用戶不參與操作(即不去讀取有效報文和釋放郵箱),硬件流程如下:
1)收到有效報文
2)進入“掛號_1”狀態(FIFO內有1條有效報文的狀態)
3)收到有效報文
4)進入“掛號_2”狀態(FIFO內有2條有效報文的狀態)
5)收到有效報文
6)進入“掛號_3”狀態(FIFO內有3條有效報文的狀態)
7)收到有效報文
8)進入“溢出”狀態(FIFO內有3條有效報文,丟失了一條報文,溢出標志置起)
下圖11中標志位和操作位說明如下:
RFxMN:FIFO內有效報文數量(取值0~3)
RFxOF:溢出標志位
RFxR:釋放郵箱
圖11 CAN接收流程
過濾器
在CAN協議里,報文的ID不代表節點的地址,而是跟報文的內容相關的。 因此,發送者以廣播的形式把報文發送給所有的接收者。 節點在接收報文時,根據ID的值決定軟件是否需要該報文; 如果需要,就存到接收FIFO里,用戶可通過軟件讀取接收郵箱寄存器獲取該報文; 如果不需要,報文就被丟棄且無需軟件的干預。
為滿足這一需求,AT32 CAN控制器為應用程序提供了28個硬件過濾器組(AT32F435系列有28個過濾器組,027;但AT32F403A等系列只有14個過濾器組,013。 具體請參考相應型號的RM),以便只接收那些軟件需要的報文。 用戶配置好需要的ID后,整個過濾過程無需軟件參與,不占用CPU資源。
過濾器的位寬
每個過濾器組由2個32bit的寄存器,CAN_FiFB1和CAN_FiFB2組成。 通過配置CAN_FBWCFG寄存器的FBWSELx位,可以設置2個16位寬或者1個32位寬的過濾器。
32位寬的過濾器寄存器CAN_FiFBx包括:一組SID[10:0]、EID[17:0]、IDT和RTR位。
16位寬的過濾器寄存器CAN_FiFBx包括:兩組SID[10:0]、IDT、RTR和EID[17:15]位。
過濾器模式
通過設置CAN_FMCFG寄存器的FMSELx位可以設置過濾器寄存器工作在標識符掩碼模式或者標識符列表模式,掩碼模式用來指定ID的哪些位需要與預設ID相同,哪些位無需比較,列表模式表示ID的每個位都必須與預設ID一致。
兩種模式與過濾器位寬配合使用,可以有以下四種過濾方式:
圖12 32位寬標識符掩碼模式
圖13 32位寬標識符列表模式
圖14 16位寬標識符掩碼模式
圖15 16位寬標識符列表模式
更多CAN過濾器說明,例如CAN過濾器匹配序號,優先級規則等可參考RM文件報文過濾一節,這里不再詳述。 過濾器配置流程見后文案例介紹--CAN接收過濾器使用。
CAN波特率及采樣點計算
如前文CAN位格式一節所述,CAN的一個bit被分為幾段。 其中第一段同步段(SYNC_SEG)固定為1Tq,1Tq的長度由CAN位時序寄存器(CAN_BTMG)的分頻系數BRDIV[11:0]位定義; 位段1(BSEG1)通過配置CAN位時序寄存器的BTS1[3:0]位,可設定為116Tq; 位段2(BSEG2)通過配置CAN位時序寄存器的BTS2[2:0]位,可設定為18Tq。 用戶通過配置CAN時序寄存器,可設置CAN波特率和采樣點,整個CAN總線上各節點的波特率和采樣點一致最佳,不過由于各節點主頻可能不一樣,所以比較難保證波特率和采樣點均一致。 用戶使用時應首先保證波特率一致,采樣點盡量保持在較小的偏差范圍內,這樣CAN總線可以支持更多的節點和更長的線路。
波特率計算公式
其中
例如,bsp例程projectat_start_f437examplescancommunication_mode:
APB時鐘:APB1_CLK=144MHZ
CAN分頻系數:BRDIV=12
此時1Tq=1/(144MHZ/12)=(1/12)us
同步段:SYNC_SEG=1Tq(固定不變,無需用戶配置)
位段1:BSEG1=8Tq(BTS1[3:0]=7)
位段2:BSEG2=3Tq(BTS2[2:0]=2)
此時Nomal Bit Timimg=1Tq*(SYNC本身+BSEG1+BSEG12)=1us
此時波特率=1/(Nomal Bit Timimg)=1/1us=1*M*bps
采樣點計算公式
采樣點=(SYNC_SEG+BSEG1)/(SYNC_SEG+BSEG1+BSEG12)
舉例同上:
此時sample point=(1+8)/(1+8+3)=75%
關于采樣點設置,CAN協議并沒有明確規定,但根據各廠商CAN設備使用習慣,采樣點設置建議如下
表3:
表3 采樣點設置建議
波特率計算工具
為方便用戶波特率設定,本文介紹一個AT專用波特率計算工具:
使用步驟如下:
1)波特率設定:高速CAN波特率最大為1M,各廠商CAN設備常用波特率為125K、250K、333K、500K、1M等。 用戶可根據需要設定波特率。 參考下圖16“波特率(Kbit/S)”。
2)CAN時鐘源頻率設定:參考下圖16“PCLK1(MHZ)”。
3)采樣位置設置:設置完波特率后,計算工具會自動填入一個推薦的采樣位置值。 若實際項目中無具體限定,可保持默認設定; 若項目中有具體限定,根據需求更改即可。 參考下圖16“采樣位置(%)”。
4)波特率偏差設定:建議在不勾選“允許波特率偏差”項,僅在沒有符合要求的計算結果時,再勾選此項。 由于同一CAN網絡的節點波特率有誤差會增大通信錯誤幾率,建議“偏差”值設置盡量小。 參考下圖16“允許波特率偏差”和“偏差”。
5) **波特率配置結果選擇** :根據以上設定即可計算出多組結果。 在頁面左下角選擇一項計算結果,即會在頁面右下角顯示對應軟件代碼配置,點擊“復制全部”即可獲得對應代碼。
圖16 波特率配置工具
案例1 CAN正常通信-normal模式
注:所有project都是基于keil 5而建立,若用戶需要在其他編譯環境上使用,請參考**AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各種編譯環境(例如IAR6/7,keil 4/5)進行簡單修改即可。
功能簡介
實現兩個CAN節點之間收發通信。
資源準備
硬件環境:
兩套對應產品型號的AT-START BOARD+CAN電平轉化器
程序設計以bsp demo為例:
CAN1_TX(PB9)連接電平轉換器的TXD;
CAN1_RX(PB8)連接電平轉換器的RXD;
兩個CAN節點的電平轉換器的CANH和CANL分別相連。
CAN電平轉換器硬件設計可參考下圖:
圖17 CAN電平轉換器硬件設計
軟件環境:
projectat_start_f435examplescancommunication_mode
軟件設計
配置流程
配置CAN1 TX和RX pin對應的GPIO引腳
配置CAN基礎選項
配置CAN波特率
配置CAN過濾器
放置 CAN 中斷
代碼介紹
main函數代碼描述
CAN配置函數代碼描述
CAN發送函數代碼描述
CAN接收中斷函數代碼描述
GPIO配置函數代碼描述
實驗效果
如若數據傳輸無誤,兩塊AT-START BOARD的LED2均會閃爍以指示收到ID=0x400的標準幀數據; LED4會持續閃爍以指示程序正常運行。
案例2 CAN接收過濾器使用
注:所有project都是基于keil 5而建立,若用戶需要在其他編譯環境上使用,請參考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各種編譯環境(例如IAR6/7,keil 4/5)進行簡單修改即可。
功能簡介
實現報文過濾:接收需要的報文,丟棄不需要的報文。
資源準備
硬件環境:
兩套對應產品型號的AT-START BOARD+CAN電平轉化器
程序設計以bsp demo為例:
CAN1_TX(PB9)連接電平轉換器的TXD;
CAN1_RX(PB8)連接電平轉換器的RXD;
兩個CAN節點的電平轉換器的CANH和CANL分別相連。
CAN電平轉換器硬件設計可參考下圖:
圖18 CAN電平轉換器硬件設計
軟件環境:
projectat_start_f435examplescanfilter
軟件設計
配置流程
配置CAN1 TX和RX pin對應的GPIO引腳
配置CAN基礎選項
配置CAN波特率
配置CAN過濾器
放置 CAN 中斷
代碼介紹
設定可通過過濾的ID
main函數代碼描述
CAN配置函數代碼描述
CAN發送函數代碼描述
CAN接收中斷函數代碼描述
GPIO配置函數代碼描述
實驗效果
如若數據傳輸無誤,AT-START BOARD的LED2/3/4會翻轉一次,以指示收到ID=FILTER_EXT_ID1,FILTER_EXT_ID2,FILTER_STD_ID1,FILTER_STD_ID2的4幀數據。
案例3 CAN調試-loopback模式
注:所有project都是基于keil 5而建立,若用戶需要在其他編譯環境上使用,請參考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各種編譯環境(例如IAR6/7,keil 4/5)進行簡單修改即可。
功能簡介
實現單板的環回模式通信。
環回模式(loopback mode):
環回模式可用于自測試。 在環回模式下,CAN在內部把TX輸出回饋到RX輸入上,而完全忽略CAN_RX引腳的實際狀態。 因此此模式下CAN對應的GPIO引腳可以不配置,而如果對應的GPIO引腳配置了,發送的報文可以在CAN_TX引腳上檢測到。 見下圖19。 另外,為了避免外部的影響,在環回模式下CAN內核忽略確認錯誤(在數據/遠程幀的確認位時刻,不檢測是否有顯性位)。
平轉換器硬件設計可參考下圖:
圖19 CAN loopback模式
資源準備
硬件環境:
一塊對應產品型號的AT-START BOARD
軟件環境:
projectat_start_f435examplescanloopback_mode
軟件設計
配置流程
配置CAN1 TX和RX pin對應GPIO(loopback模式下,此項可忽略不配置)
配置CAN基礎選項
配置CAN波特率
配置CAN過濾器
放置 CAN 中斷
代碼介紹
main函數代碼描述
CAN配置函數代碼描述
CAN發送函數代碼描述
CAN接收中斷函數代碼描述
GPIO配置函數代碼描述
實驗效果
AT-START BOARD的LED2會閃爍以指示收到自己發送的ID=0x400的標準幀數據; LED4會持續閃爍以指示程序正常運行。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17171瀏覽量
351439 -
CAN總線
+關注
關注
145文章
1952瀏覽量
130811 -
CAN
+關注
關注
57文章
2756瀏覽量
463829 -
總線
+關注
關注
10文章
2888瀏覽量
88133 -
AT32
+關注
關注
1文章
113瀏覽量
2103
原文標題:AT32講堂044 | AT32 MCU CAN入門指南
文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論