當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]CAN協(xié)議具有良好的可靠性,在工業(yè)中應(yīng)用廣泛。這次就先熟悉CAN的基本功能。開發(fā)板有兩個CAN,每個CAN有8個信箱。這次內(nèi)容是從CAN0的信箱0發(fā)送數(shù)據(jù)到CAN1的信箱0。除本次使用的功能外,CAN還有遠(yuǎn)程幀、強(qiáng)大的錯誤處理

CAN協(xié)議具有良好的可靠性,在工業(yè)中應(yīng)用廣泛。這次就先熟悉CAN的基本功能。

開發(fā)板有兩個CAN,每個CAN有8個信箱。這次內(nèi)容是從CAN0的信箱0發(fā)送數(shù)據(jù)到CAN1的信箱0。

除本次使用的功能外,CAN還有遠(yuǎn)程幀、強(qiáng)大的錯誤處理功能。

一、電路

CAN總線上的邏輯數(shù)值是用顯性電平和隱性電平表示的?!帮@性”的意思是指在同時(shí)傳輸顯性電平和隱性電平時(shí),總線上呈現(xiàn)的是顯性電平。顯性電平表示邏輯“0”,隱性電平表示邏輯“1”。

在使用CAN的過程中,需要使用一個CAN收發(fā)器進(jìn)行電平的轉(zhuǎn)換與解釋。開發(fā)板使用的CAN收發(fā)器為SN65HVD234,其接線如下圖所示:

其中CANTXx和CANRXx引腳可以復(fù)用為CAN的外設(shè)。而在使用該收發(fā)器時(shí),需要將CANRXxEN驅(qū)動為高電平以啟用收發(fā)器的接收功能,將CANTXxRS驅(qū)動求低電平以啟用發(fā)送功能。

在實(shí)驗(yàn)的時(shí)候,需要將這兩個口(J13和J14)使用線纜連接起來。當(dāng)連接完成而未通電時(shí),可以測得CANH和CANL是短路狀態(tài)的。

二、CAN網(wǎng)絡(luò)參數(shù)及波特率

假設(shè)MCK為96 MHz,需要設(shè)置的CAN波特率為1000 Kbps。

CAN的波特率的設(shè)置不是那么的直接。CAN定義了一個名為“原子時(shí)間(TQ)”的最小時(shí)間單位;然后把一個比特的傳輸過程分為若干階段(同步段、傳播時(shí)間段、相位緩沖端1、相位緩沖段2),每個階段的時(shí)間均是由TQ的數(shù)量表示。

SAM4中,時(shí)間TQ用“CAN系統(tǒng)時(shí)鐘(CSC)”表示。波特率相關(guān)的參數(shù)均通過CAN波特率寄存器(CAN_BR)設(shè)置。

TQ(CSC)設(shè)置。組成每個位時(shí)間的TQ數(shù)量的范圍為8—25。為取整,這里將數(shù)量選擇為16。所以CAN系統(tǒng)時(shí)鐘的頻率為CAN波特率的16倍,即16 MHz。再所以需要將MCK進(jìn)行6分頻。根據(jù)BRP字段的作用方法,需要將BRP字段設(shè)置為5。

同時(shí),可以計(jì)算出每個TQ的長度為62.5 ns。

同步段固定為1 TQ。

傳播時(shí)間端PROP_SEG需要根據(jù)硬件相關(guān)的信息確定,用于吸收網(wǎng)絡(luò)的物理(發(fā)送單元、總線、接收單元)延遲。該段的時(shí)間需要為總物理延遲的2倍。在芯片手冊的示例中,該延遲為190 ns。所以該段的時(shí)長需要設(shè)置為380 ns,即約6 TQ。將PROPAG字段設(shè)置為5即可達(dá)到目的。

剩下的16-1-6=9 TQ,均用與相位緩沖段。在Atmel的CAN中,需要2 TQ確定總線的電平。因?yàn)椴蓸狱c(diǎn)位于相位緩沖段2的起始,所以它的長度不能少于2 TQ。這里使兩個階段盡量等長,所以讓相位緩沖段1設(shè)置為4 TQ,段2設(shè)置為5 TQ。將PHASE1和PHASE2分別設(shè)置為3和4即可。

再補(bǔ)償寬度。最小可配置為1 TQ,最多可配置為相位緩沖段1和4 TQ間的較小值。這里配置為4 TQ。將SJW段設(shè)置為3即可。

具體設(shè)置代碼如下:

12345678constuint32_t can_br = CAN_BR_BRP(5)| CAN_BR_PROPAG(5)| CAN_BR_PHASE1(3)| CAN_BR_PHASE2(4)| CAN_BR_SJW(3)| CAN_BR_SMP_ONCE;CAN0->CAN_BR = can_br;CAN1->CAN_BR = can_br;

三、CAN初始化

GPIO及PMC設(shè)置。注意將PE1和PE3驅(qū)動為高電平,PE0和PE2驅(qū)動為低電平。

網(wǎng)絡(luò)參數(shù)設(shè)置。在啟用CAN之前,需要設(shè)置好網(wǎng)絡(luò)參數(shù)。

啟用CAN。CAN使能后,需要和總線進(jìn)行同步。在連續(xù)檢測到11個隱性位時(shí),CAN進(jìn)入喚醒狀態(tài),且WAKEUP位置位:

1234CAN0->CAN_MR = CAN_MR_CANEN;CAN1->CAN_MR = CAN_MR_CANEN;while( ((CAN0->CAN_SR & CAN_SR_WAKEUP) == 0)|| ((CAN1->CAN_SR & CAN_SR_WAKEUP) == 0) );

信箱設(shè)置。通過設(shè)置CAN_MMR的MOT字段即可設(shè)置信箱的類型。由于這個設(shè)置是立即生效的,所以在設(shè)置這個字段時(shí),需要先(或同時(shí))完成其他相關(guān)信息的設(shè)置。同時(shí),在修改設(shè)置時(shí),應(yīng)該先關(guān)閉信箱。

發(fā)送信箱需要先設(shè)置好的只有優(yōu)先級:

123#define TX_MB (CAN0->CAN_MB + 0)TX_MB->CAN_MMR = CAN_MMR_PRIOR(0)| CAN_MMR_MOT_MB_TX;

接收信箱需要先設(shè)置好ID相關(guān)的信息。簡單起見,這里只使用標(biāo)準(zhǔn)格式的幀,即只指定MIDvA部分,同時(shí)MIDE位指定為0(默認(rèn))。由于符合接收條件的ID設(shè)置為1個,即需要比較接收ID所有的位,所以將CAN_MAM的MIDvA字段全部置1。

12345#define RX_MB (CAN1->CAN_MB + 0)#define CAN_COMM_ID 5RX_MB->CAN_MID = CAN_MID_MIDvA(CAN_COMM_ID);RX_MB->CAN_MAM = CAN_MAM_MIDvA(~(uint32_t)0);RX_MB->CAN_MMR = CAN_MMR_MOT_MB_RX;

四、數(shù)據(jù)傳輸

通過UART讀取一個數(shù)字:

12intnum;scanf("%d", &num);

通過信箱發(fā)送數(shù)據(jù)。

假設(shè)int為4字節(jié),則通過CAN_MDL即可表示所需信息。發(fā)送時(shí),在確定信箱可用后,需要指定好信息ID。然后向CAN_MCR寫入信息長度(用byte表示),同時(shí)寫入MTCR位以開始發(fā)送操作。最后,在發(fā)送完成后,CAN_MSR的MRDY位重新置位。

123456789// 等待信箱可用while(!(TX_MB->CAN_MSR & CAN_MSR_MRDY));TX_MB->CAN_MID = CAN_MID_MIDvA(CAN_COMM_ID); // IDTX_MB->CAN_MDL = num; // 低4字節(jié)數(shù)據(jù)TX_MB->CAN_MCR = CAN_MCR_MDLC(4) // 數(shù)據(jù)長度| CAN_MCR_MTCR; // 開始嘗試發(fā)送printf("-I- Sending message from TX mailbox...rn");// 等待發(fā)送完成while(!(TX_MB->CAN_MSR & CAN_MSR_MRDY));

通過信箱接收數(shù)據(jù)。

通過查詢CAN_MSR的MRDY位可以確定是否接收到了數(shù)據(jù),然后在CAN_MSR的MDLC字段可以確定信息長度。在完成數(shù)據(jù)接收后,需要向CAN_MCR寫入MTCR字段以完成本次接收,從而開始下一次信息接收工作。

123456789101112// 等待信息接收完成while(!(RX_MB->CAN_MSR & CAN_MSR_MRDY));// 檢查信息長度constintrec_len =(RX_MB->CAN_MSR & CAN_MSR_MDLC_Msk) >> CAN_MSR_MDLC_Pos;if(rec_len == 4) {// 讀取信息并打印printf("-I- Data read from RX mailbox: %d rn",(int)RX_MB->CAN_MDL);}// 開始下一次接收RX_MB->CAN_MCR =


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉