欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Can波特率自動(dòng)匹配的方法

文檔序號(hào):8474945閱讀:1282來(lái)源:國(guó)知局
Can波特率自動(dòng)匹配的方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及工業(yè)自動(dòng)控制領(lǐng)域,特別是CAN波特率自動(dòng)匹配的方法。
【背景技術(shù)】
[0002]CAN的高性能和可靠性已被認(rèn)同,并被廣泛地應(yīng)用于工業(yè)自動(dòng)化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等方面;現(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng);它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時(shí)、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。
[0003]在使用同一條CAN總線通信的設(shè)備,所有的設(shè)備的CAN通信波特率必須一致;在CAN總線上,采用主從通信方式時(shí),一臺(tái)主機(jī),連接多從站;主機(jī)與從站通信主要依靠從站ID號(hào)來(lái)標(biāo)識(shí),使主站與相應(yīng)的從站進(jìn)行數(shù)據(jù)交換。而主站與從站通信的前提是,主站與從站通信的波特率要一致,現(xiàn)有的技術(shù)主要采用撥碼開(kāi)關(guān)來(lái)設(shè)置每臺(tái)從站的波特率或通過(guò)軟件來(lái)設(shè)置從站的波特率,在使用時(shí)只要主站的波特發(fā)生更改,就要通過(guò)撥碼開(kāi)關(guān)或軟件對(duì)通信總線上設(shè)備就要每臺(tái)設(shè)置波特率,使用起來(lái)很不方便;特別在整個(gè)系統(tǒng)運(yùn)行起來(lái)以后通信不穩(wěn)定,需要改變總線的波特率時(shí),所需要的時(shí)間較長(zhǎng)嚴(yán)重的影響系統(tǒng)的使用。

【發(fā)明內(nèi)容】

[0004]本發(fā)明的目的是提供一種CAN波特率自動(dòng)匹配的方法。
[0005]本發(fā)明是通過(guò)以下技術(shù)方案予以實(shí)現(xiàn)的:
CAN波特率自動(dòng)匹配的方法,主從站約定了幾種常用的波特率,可根據(jù)需要而改變;主站可根據(jù)約定而改變整個(gè)總線上的通信波特率,主站更改波特率時(shí),從站自動(dòng)與主站波特率進(jìn)行匹配,從而實(shí)現(xiàn)主從正確通信;
①.從站上電時(shí)設(shè)置CAN口的波特率為默認(rèn)的波特率,等待接收總線上的CAN 口報(bào)文,如果連續(xù)5次接收到的報(bào)文為錯(cuò)誤報(bào)文就重新設(shè)置CAN 口波特率為主從站越好的下一個(gè)波特率,直到正確接收到CAN 口報(bào)文時(shí),就以這波特率與主站通信;
②.在正常通信的情況下,主站更改了波特率,從站會(huì)實(shí)時(shí)檢測(cè)接收到的總線上的報(bào)文是否正確,如果連續(xù)5次接收到錯(cuò)誤報(bào)文,重復(fù)波特率匹配過(guò)程,直到接收正確報(bào)文;從站接收到的報(bào)文是否正確判斷依據(jù)讀取CPU的CAN通信接口相應(yīng)寄存即可。
【附圖說(shuō)明】
[0006]圖1是本發(fā)明的從站與主站波特率自動(dòng)匹配流程的示意圖。
【具體實(shí)施方式】
[0007]下面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例做進(jìn)一步描述:
如圖1所示的從站與主站波特率自動(dòng)匹配流程,如下代碼基于STM32F103芯片,調(diào)用了STM32F103的庫(kù),具體步驟如下: 1.設(shè)置CAN通信的波特率
void SetupCAN—Port(unsigned int Port, unsigned int BaudrateIndexj unsignedint Mode)
{
CAN—InitTypeDef CAN—InitStructure;
CAN—InitStructure.CAN—TTCM=DISABLE; //TTCAN modeCAN—InitStructure.CAN—ABOM=ENABLE; //Automatic bus-off managementCAN—InitStructure.CAN—AWUM=DISABLE;//Automatic wakeup modeCAN_InitStructure.CAN_NART=DISABLE;//ENABLE; //No automaticretransmiss1n
CAN—InitStructure.CAN—RFLM=DISABLE; //Receive FIFO locked Mode CAN—InitStructure.CAN—TXFP=DISABLE;//ENABLE; //Transmit FIFO pr1rity CAN—InitStructure.CAN—Mode=Mode; //CAN—Mode—LoopBack;//;
//250K
CAN_InitStructure.CAN_SJW=CAN_SJW_ltq;
CAN—InitStructure.CAN—BS1=CAN—BS1—13tq;
CAN—InitStructure.CAN—BS2=CAN—BS2—2tq;
CAN—InitStructure.CAN—Prescaler=8; switch (BaudrateIndex)
{
case 0: //5K
CAN_InitStructure.CAN_SJW=CAN_SJW_ltq;
CAN—InitStructure.CAN—BS1=CAN—BS1—13tq;
CAN—InitStructure.CAN—BS2=CAN—BS2—2tq;
CAN_InitStructure.CAN_Prescaler=400; break; case 1: //1K
CAN_InitStructure.CAN_SJW=CAN_SJW_ltq;
CAN—InitStructure.CAN—BS1=CAN—BS1—13tq;
CAN—InitStructure.CAN—BS2=CAN—BS2—2tq;
CAN_InitStructure.CAN_Prescaler=200; break; case 2: //20K
CAN_InitStructure.CAN_SJW=CAN_SJW_ltq;
CAN—InitStructure.CAN—BS1=CAN—BS1—13tq;
CAN—InitStructure.CAN—BS2=CAN—BS2—2tq;
CAN_InitStructure.CAN_Prescaler=100; break; case 3: //50KCN 1047%222 A i^sdt3/4 H
CANIInitstructure.CANlsjw=CANISJWIltq;
CANIInitstructure.CANIBSl=CANIBSl13tq;
CANIInitstructure.CANIBS2=CANIBS2l2tq;
CANIInitstructure.CANIPrescaler=40;break;case 4: //125K
CANIInitstructure.CANlsjw=CANISJWIltq;
CANIInitstructure.CANIBSl=CANIBSl13tq;
CANIInitstructure.CANIBS2=CANIBS2l2tq;
G>NIInitstructure.G>Nlprescaler=16;break;case 5: //2SK
CANIInitstructure.CANlsjw=CANISJWIltq;
CANIInitstructure.CANIBSl=CANIBSl13tq;
CANIInitstructure.CANIBS2=CANIBS2l2tq;
「AM Tn—l.tstrnrtllrp,「AN prpm?11pr=8.CANIInitstructure.CANlsjw=CANISJWIltq;CANIInitstructure.CANIBSI=CANIBSII5tq;CANIInitstructure.CANIBS2=CANIBS2l2tq;
G>NIInitstructure.G>Nlprescaler=8; break; case 7: //IM
CANIInitstructure.CANlsjw=CANISJWIltq;CANIInitstructure.CANIBSI=CANIBSII5tq;CANIInitstructure.CANIBS2=CANIBS2l2tq;CANIInitstructure.CANIPrescaler=4:;break;default://250K
CANIInitstructure.CANlsjw=CANISJWIltq;CANIInitstructure.CANIBSl=CANIBSl13tq;CANIInitstructure.CANIBS2=CANIBS2l2tq;
G>NIInitstructure.G>Nlprescaler=8;break;
}
#if CANOIENABLEDVOif (POrt==O)
I: CAN_Init(CAN1, &CAN_InitStructure); return;
}
#endif
#if CAN1_ENABLEDif (Port==I)
{
CAN_Init(CAN2, &CAN_InitStructure); return;
}
#endif
}
2.CAN接收中斷并判斷接收的CAN數(shù)據(jù)是否正確 extern CanRxMsg RxMessage;
void USB_LP_CANl_RXO_IRQHandler(void)
{
CanRxTimeout=O;
CAN—LEC—Cont=O;
if (CANl->BTR&0xc0000000) //接收到正確數(shù)據(jù)設(shè)置CAN為正常模式SetupCAN_Port (O, TryBps, CAN_Mode_Normal);
CAN_Receive(CANl, CAN_FIF00, &RxMessage); if(gllRQService[IRQ_SERVICE_CAN0_RX]!=nil) { gllRQService[IRQ_SERVICE_CANO_RX](); can_fIag=I; } }
3.錯(cuò)誤處理中斷并使CAN進(jìn)入監(jiān)聽(tīng)模式 void CANl_SCE_IRQHandler(void)
{
CAN_LEC_Cont++;if (CAN_LEC_Cont>10)
{
CAN_LEC_Cont=0; CanRxTimeout=0;
AutoBpsTry(0);
}
CAN_ClearITPendingBit(CAN1, CAN_IT_ERR);
CAN_ClearITPendingBit(CAN1, CAN_IT_LEC); }
4.調(diào)整CAN波特率 void AutoBpsTry(unsigned char cPort){ TryBps++; if (TryBps>7) TryBps=2; CANO_Reset();
SetupCAN_Port(0, TryBps, CAN_Mode_Silent); }
【主權(quán)項(xiàng)】
1.CAN波特率自動(dòng)匹配的方法,主從站約定了幾種常用的波特率,可根據(jù)需要而改變;主站可根據(jù)約定而改變整個(gè)總線上的通信波特率,主站更改波特率時(shí),從站自動(dòng)與主站波特率進(jìn)行匹配,從而實(shí)現(xiàn)主從正確通信; ①.從站上電時(shí)設(shè)置CAN口的波特率為默認(rèn)的波特率,等待接收總線上的CAN 口報(bào)文,如果連續(xù)5次接收到的報(bào)文為錯(cuò)誤報(bào)文就重新設(shè)置CAN 口波特率為主從站越好的下一個(gè)波特率,直到正確接收到CAN 口報(bào)文時(shí),就以這波特率與主站通信; ②.在正常通信的情況下,主站更改了波特率,從站會(huì)實(shí)時(shí)檢測(cè)接收到的總線上的報(bào)文是否正確,如果連續(xù)5次接收到錯(cuò)誤報(bào)文,重復(fù)波特率匹配過(guò)程,直到接收正確報(bào)文;從站接收到的報(bào)文是否正確判斷依據(jù)讀取CPU的CAN通信接口相應(yīng)寄存即可。
【專(zhuān)利摘要】本發(fā)明公開(kāi)了CAN波特率自動(dòng)匹配的方法,CAN波特率自動(dòng)匹配的方法,主從站約定了幾種常用的波特率,可根據(jù)需要而改變;主站可根據(jù)約定而改變整個(gè)總線上的通信波特率,主站更改波特率時(shí),從站自動(dòng)與主站波特率進(jìn)行匹配,從而實(shí)現(xiàn)主從正確通信,本發(fā)明提供的方法可在不影響系統(tǒng)的情況下方便的更改波特率。
【IPC分類(lèi)】H04L1-00
【公開(kāi)號(hào)】CN104796222
【申請(qǐng)?zhí)枴緾N201410668694
【發(fā)明人】周曉峰, 胡炎良, 鄧君
【申請(qǐng)人】湖南先步信息股份有限公司
【公開(kāi)日】2015年7月22日
【申請(qǐng)日】2014年11月21日
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阳新县| 虹口区| 巴楚县| 曲沃县| 宁陕县| 宣汉县| 乐亭县| 班玛县| 额尔古纳市| 大关县| 霍林郭勒市| 望江县| 尤溪县| 皮山县| 海宁市| 石嘴山市| 白水县| 常德市| 比如县| 台江县| 运城市| 颍上县| 柘城县| 天台县| 天长市| 墨玉县| 资源县| 绥棱县| 浙江省| 敦煌市| 永济市| 防城港市| 天柱县| 南丰县| 原平市| 蒙城县| 衡阳县| 永城市| 绥滨县| 河西区| 丹凤县|