如何一步一步建立CAN通訊
CAN通訊的優(yōu)點(diǎn)在此就不多說(shuō)了,10公里,5Kb/s的速度是能保證的。第一步:硬件環(huán)境的建立。這里采用的是SJA1000作為總線(xiàn)控制器,CTM8251模塊作為總線(xiàn)驅(qū)動(dòng)器。MCU采用的是MEGA16:利用I/O口模擬數(shù)據(jù)總線(xiàn),當(dāng)然也可以使用有總線(xiàn)的MCU:MCS-51,MEGA8515等。原理圖如下:第二步:SJA1000的控制首先閱讀下SJA1000的手冊(cè),基本了解下SJA1000的結(jié)構(gòu),主要是寄存器方面的。還要了解下CAN總線(xiàn)方面的東西:BasicCAN,Peli CAN,遠(yuǎn)程幀,數(shù)據(jù)幀等等……SJA1000工作之前需要配置一下,才能正常工作,沒(méi)有經(jīng)過(guò)配置的SJA1000回拉壞總線(xiàn)的:組成網(wǎng)絡(luò)的時(shí)候,如果其中有的SJA1000沒(méi)有正確配置,這個(gè)設(shè)備會(huì)干擾總線(xiàn),使其它設(shè)備的數(shù)據(jù)發(fā)送不出去。怎么才能控制SJA1000呢,請(qǐng)看下面的SJA1000讀寫(xiě)的時(shí)序圖:寫(xiě)的時(shí)序根據(jù)時(shí)序要求,可以利用I/O口模擬總線(xiàn)了://**************************讀SJA1000*************************//uint Read_SJA1000(uint address){uchar data;asm("nop");ALE_off;WR_on;RD_on;CAN_cs_on;DDRA=0xff; //數(shù)據(jù)口為輸出PORTA=address; //輸出數(shù)據(jù)的地址asm("nop");//delay5us(1);ALE_on;asm("nop");//delay5us(1);//DDRA=0xff; //數(shù)據(jù)口為輸出PORTA=address; //輸出數(shù)據(jù)的地址 //再次輸出地址,確保一致。asm("nop");//delay5us(1);ALE_off;//delay5us(1);CAN_cs_off;RD_off;asm("nop");//delay5us(2);asm("nop");DDRA=0x00; //數(shù)據(jù)口為輸入PORTA=0xff; //上拉asm("nop");data=PINA; //獲得數(shù)據(jù)asm("nop");//delay5us(1);RD_on;CAN_cs_on;asm("nop");//delay5us(2);//dog();return data;}//**************************寫(xiě)SJA10000*************************//void Write_SJA1000(uint address,uint data){ asm("nop");//uint temp1,temp2;DDRA=0xff; //數(shù)據(jù)口為輸出PORTA=address; //輸出數(shù)據(jù)的地址CAN_cs_on;ALE_off;WR_on;RD_on;asm("nop");//delay5us(1);ALE_on;asm("nop");//delay5us(1);//DDRA=0xff; //數(shù)據(jù)口為輸出PORTA=address; //輸出數(shù)據(jù)的地址 再次輸出地址,確保數(shù)據(jù)準(zhǔn)確asm("nop");//delay5us(1);ALE_off;//delay5us(1);CAN_cs_off;WR_off;asm("nop");//delay5us(1);asm("nop");//DDRA=0xff;PORTA=data; //輸出數(shù)據(jù)asm("nop");//delay5us(2);WR_on;PORTA=data; //再次輸出數(shù)據(jù),取保一致CAN_cs_on;asm("nop");//delay5us(2);asm("nop");//dog();}現(xiàn)在可以讀寫(xiě)SJA1000了。配置SJA1000需要使SJA1000進(jìn)入復(fù)位模式,然后對(duì)一些寄存器寫(xiě)入數(shù)據(jù)。在這里,CAN使用Pelican模式,速率為5K,雙濾波工作,//*************************CAN復(fù)位初始化********************//void CAN_Init(void){ uchar i_temp=0,j_temp=0;CLI();//Read_SJA1000(CAN_IR); //讀中斷寄存器,清除中斷位Write_SJA1000(CAN_MOD,0x01);while(!(Read_SJA1000(CAN_MOD)&0x01))//保證進(jìn)入復(fù)位模式,bit0.0不為1,再寫(xiě)CAN_MOD{Write_SJA1000(CAN_MOD,0x01);dog();}Write_SJA1000(CAN_CDR,0xc8); //配置時(shí)鐘分頻寄存器-Pelican,CBP=1,//關(guān)閉TX1中斷與時(shí)鐘輸出Write_SJA1000(CAN_AMR0,0xff); //配置驗(yàn)收屏蔽AMR0=0FFHWrite_SJA1000(CAN_AMR1,0x00); //配置驗(yàn)收屏蔽AMR1=000HWrite_SJA1000(CAN_AMR2,0xff); //配置驗(yàn)收屏蔽AMR2=0FFHWrite_SJA1000(CAN_AMR3,0x00); //配置驗(yàn)收屏蔽AMR3=000HWrite_SJA1000(CAN_ACR1,0x00); //配置驗(yàn)收代碼ACR1=0:廣播Write_SJA1000(CAN_ACR3,addr); //配置驗(yàn)收代碼ACR3=地址Write_SJA1000(CAN_BTR0,0x7f); //配置總線(xiàn)定時(shí)--5kbpsWrite_SJA1000(CAN_BTR1,0xff);Write_SJA1000(CAN_OCR,0x1a); //配置輸出控制Write_SJA1000(CAN_EWLR,0xff); //配置錯(cuò)誤報(bào)警限制為255do{Write_SJA1000(CAN_MOD,0x00); //進(jìn)入工作模式雙濾波dog();}while((Read_SJA1000(CAN_MOD))&0x01); // 確認(rèn)復(fù)位標(biāo)志是否被刪除Write_SJA1000(CAN_TXB+4,ID3); //配置發(fā)送緩沖區(qū)的ID3-Write_SJA1000(CAN_IER,0x07); //配置SJA10000中斷-錯(cuò)誤報(bào)警/發(fā)送/接收中斷SEI();}在這之前,需要獲取設(shè)備的地址,就是讀取撥碼開(kāi)關(guān)各個(gè)腳的電平。需要注意的是,SJA1000使用的是雙濾波模式,響應(yīng)地址有:廣播的:0x00,還有自己的地址:0x**。為什么要這么做呢,一個(gè)系統(tǒng)中,主機(jī)的地址一般是0X00,從機(jī)地址從0X01開(kāi)始,這里面如果有兩個(gè)從機(jī)的地址一樣,就很可能產(chǎn)生一些混亂。從機(jī)一旦多了起來(lái),查找地址相同的設(shè)備就有些麻煩了。在程序的初始化的時(shí)候,進(jìn)行SJA1000的配置。第三部:工作程序接下來(lái),做的工作就是CAN試發(fā)送,別小看這個(gè)試發(fā)送,這可是解決地址重復(fù)的問(wèn)題的哦,還能檢測(cè)CAN網(wǎng)絡(luò)是否正常。//****************CAN第一次發(fā)送 通訊地址測(cè)試2e*****************//void CAN_first_send(void){ //uchar add_temp=0;uchar a_temp=0;uchar SR_temp;asm("nop"); //延時(shí)NET_LED_on; //打開(kāi)網(wǎng)絡(luò)燈do{a_temp=Read_SJA1000(CAN_SR);//讀CAN_SR,直到SR.2=1:CPU可以發(fā)送數(shù)據(jù)dog();}while(!(a_temp&0x04))CLI(); //關(guān)CAN中斷,即總中斷Write_SJA1000(CAN_TXB+0,0xc0); //發(fā)送遠(yuǎn)程幀0xc0Write_SJA1000(CAN_TXB+1,0x00); //發(fā)送轉(zhuǎn)接器地址Write_SJA1000(CAN_TXB+2,addr); //發(fā)送傳感器地址Write_SJA1000(CAN_TXB+3,0x2e); //發(fā)送命令碼0x2eWrite_SJA1000(CAN_TXB+4,ID3); //發(fā)送ID3Write_SJA1000(CAN_CMR,0x01); //啟動(dòng)發(fā)送,//網(wǎng)絡(luò)故障錯(cuò)誤在中斷中處理,短接H、L,按復(fù)位,先亮綠燈,后黃燈亮asm("nop");//SEI();}SJA1000的中斷引腳接到MEGA16的INT1上,需要在程序初始化的時(shí)候,配置一些INT1,使MCU能響應(yīng)SJA1000的中斷。數(shù)據(jù)發(fā)送前,點(diǎn)亮網(wǎng)絡(luò)指示燈,什么時(shí)候熄滅它呢,在發(fā)送中斷中熄滅它。下面看看MCU對(duì)SJA1000中斷的一些處理:在這里只處理:接收中斷、發(fā)送中斷、總線(xiàn)關(guān)閉中斷。#pragma interrupt_handler can_int:3void can_int(void){asm("nop");CAN_IR_temp=Read_SJA1000(CAN_IR); //讀取中斷寄存器if(CAN_IR_temp&0x01) //接收中斷{Get_RXB_temp();if(RxBuffer[0]==0x80) //地址測(cè)試數(shù)據(jù)幀{reload(); //數(shù)據(jù)幀中有和自己相同的地址}if(RxBuffer[0]==0xc0) // 遠(yuǎn)程幀則釋放接收緩沖區(qū){type=RxBuffer[3]; //讀命令碼//處理命令碼if(type==0x30){ if(type==0x34){CAN_now_value_send();type=0;} //傳瞬時(shí)值數(shù)據(jù)if (type==0x27){reload(); type=0;}//裝置復(fù)位if(type==0x2e){active();type=0;} //通訊地址測(cè)試}Write_SJA1000(CAN_CMR,0x04); //釋放接收緩沖區(qū)}if(CAN_IR_temp&0x02) //發(fā)送中斷{NET_LED_off; //關(guān)閉網(wǎng)絡(luò)燈ERR_LED_off; //關(guān)閉故障燈CANBE_JSQ=0; //復(fù)位總線(xiàn)關(guān)閉計(jì)數(shù)器asm("nop");}if(CAN_IR_temp&0x04) //錯(cuò)誤報(bào)警中斷(僅有總線(xiàn)關(guān)閉處理){ //讀狀態(tài)寄存器,SR.7總線(xiàn)關(guān)閉:CAN控制器不參與總線(xiàn)活動(dòng)CAN_SR_temp=Read_SJA1000(CAN_SR);if(CAN_SR_temp&0x80){CANBE_JSQ=CANBE_JSQ+1; //關(guān)閉次數(shù)加1if(CANBE_JSQ
關(guān)鍵詞: CAN通訊硬件環(huán)
您可能也感興趣:
今日熱點(diǎn)
為您推薦
貸款370萬(wàn)元買(mǎi)保險(xiǎn)?消費(fèi)者需當(dāng)心有人盯上你的保單
湖北省棉花“保險(xiǎn)+期貨”項(xiàng)目落地三縣市 5萬(wàn)棉農(nóng)將成為受益者
更多
- 普諾飛思基于與索尼的合作,推出全新基于事件的視覺(jué)評(píng)估套件
- OPPO攜手中國(guó)移動(dòng),全面支持5G新通話(huà)業(yè)務(wù)
- Mavenir和Aspire Technology依托歐洲實(shí)驗(yàn)室加速符合O-RAN規(guī)范的無(wú)線(xiàn)電測(cè)試
- 力積電新12英寸晶圓廠(chǎng)建成!
- 埃森哲榮膺HFS“能源服務(wù)合作伙伴”榜首
- Elektro-Automatik推出10000 系列增強(qiáng)性能、自動(dòng)量程、雙向...
- 如何在照片處理流程中使用線(xiàn)性 DNG 文件?
- 深圳:加速高端創(chuàng)新資源集聚 建設(shè)產(chǎn)業(yè)創(chuàng)新高地
更多
- 招商蛇口10億元債券將于4月14日付息
- 正榮地產(chǎn)ABS展期方案引多方博弈,管理人中山證券債券承銷(xiāo)業(yè)務(wù)...
- 23.5萬(wàn)億規(guī)模美債出現(xiàn)流動(dòng)性示警,2020年3月恐慌能否重演?
- 東吳證券:本月降息的可能較低
- 2022海南自貿(mào)港投資指南發(fā)布 分為“營(yíng)商海南”等三個(gè)篇章
- 俄羅斯債券成美俄角力點(diǎn),華爾街“火中取栗”狂攬財(cái)
- 東莞科創(chuàng)型企業(yè)發(fā)展欣欣向榮 15家企業(yè)獲得近3億元投融資
- 珠海華發(fā)投控10億元債券將于4月14日付息 利率3.60%
排行
- 廈門(mén)啟動(dòng)科普統(tǒng)計(jì)調(diào)查工作 將調(diào)查科普活動(dòng)等六大類(lèi)
- 全球5G發(fā)展步伐都在加速
- 全球首次發(fā)現(xiàn)三維翼龍胚胎
- 空間站菌株對(duì)宇航員健康存在影響
- 我國(guó)氣象現(xiàn)代化整體水平邁入世界先進(jìn)行列
- 這一年,科技待解的謎題一籮筐
- 北斗系統(tǒng)正式邁入全球時(shí)代
- 國(guó)產(chǎn)C919大飛機(jī)突破100余項(xiàng)關(guān)鍵技術(shù)
- 北京軌道交通推出電子定期票
- 仿真機(jī)器人現(xiàn)已“進(jìn)軍”考古界
最近更新
- 如何一步一步建立CAN通訊
- 自己動(dòng)手DIY制作LED顯示屏
- 無(wú)損檢測(cè)工藝概述
- ISim你不得不知的技巧
- avr單片機(jī)流水燈匯編程序及電路圖
- 酷比魔方U30GT雙核豌豆拆解
- 工信部:支持工業(yè)互聯(lián)網(wǎng)企業(yè)首次公開(kāi)發(fā)行證券并上市
- 廣鐵警方破獲一起販運(yùn)假冒偽劣香煙的非法經(jīng)營(yíng)案
- 國(guó)產(chǎn)原研1類(lèi)新藥安羅替尼獲批治療晚期等甲狀腺癌患者
- 中國(guó)藥企自主研發(fā)創(chuàng)新藥獲批 造福反流性食管炎患者
- 國(guó)常會(huì)連續(xù)兩周重磅定調(diào),降準(zhǔn)時(shí)點(diǎn)臨近了?
- 招商蛇口10億元債券將于4月14日付息
- 正榮地產(chǎn)ABS展期方案引多方博弈,管理人中山證券債券承銷(xiāo)業(yè)務(wù)...
- 人參泡酒用什么酒最好
- 人參和什么搭配泡酒最好
- 核酸檢測(cè)有效期怎么計(jì)算
- 2022年4月13日,昆明二環(huán)西路383號(hào)門(mén)口(鈺文美容養(yǎng)生會(huì)所旁...
- 為癌癥藥物研發(fā)帶來(lái)新契機(jī),上??茖W(xué)家發(fā)現(xiàn)前所未有的“受體...
- 時(shí)政深一度|人工智能會(huì)搶醫(yī)生“飯碗”嗎?
- 價(jià)位大降!4月20日周口開(kāi)始執(zhí)行
- (聚焦疫情防控)江蘇發(fā)布公鐵水空通道清單 保障產(chǎn)業(yè)鏈供應(yīng)...
- 盛唐遺址大明宮的春暖花開(kāi)
- 手繪三江源野生動(dòng)物:是誰(shuí)在雪山之巔唱著孤獨(dú)的歌?
- 云游嶗山:超多美圖來(lái)襲~海大櫻花,開(kāi)啦!
- 家居裝修,墻面應(yīng)該如何裝飾
- 重慶體育人 | 巴南鄧雅方:堅(jiān)持運(yùn)動(dòng)20余年,積極組織社區(qū)體育活動(dòng)
- 競(jìng)技體育改革發(fā)展 | 北碚:西大附中武術(shù)隊(duì)練就文武雙全真功夫
- 微評(píng)|“死店”被做活?/“暴汗服”減肥?/“堿性水”更健康?
- 解讀螺原體
- 鎮(zhèn)巴人社局赴陜西廣濟(jì)堂醫(yī)藥集團(tuán)股份有限公司開(kāi)展招商引資活動(dòng)