法,其特征在于所述步驟S3中的識(shí)別數(shù) 據(jù)幀中各段電平的時(shí)間寬度,包括如下步驟: (1) 將串口接收引腳連接與處理器的帶有中斷功能的通用輸入/輸出引腳連接; (2) 利用處理器的中斷功能捕捉上升沿和下降沿,用時(shí)鐘的內(nèi)部寄存器值來(lái)記錄中斷 的時(shí)間點(diǎn); (3) 設(shè)定另一個(gè)時(shí)鐘來(lái)檢測(cè)一幀數(shù)據(jù)是否發(fā)完。4. 根據(jù)權(quán)利要求3所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的識(shí)別數(shù)據(jù)幀中各 段電平的時(shí)間寬度為利用處理器的時(shí)間計(jì)數(shù)器寄存器實(shí)現(xiàn)。5. 根據(jù)權(quán)利要求1所述的一種串口自動(dòng)識(shí)別方法,其特征在于步驟S4所述選定波特率 的值包括如下步驟: (1) 接收方準(zhǔn)備好備選波特率; (2) 與S3中識(shí)別的最小的電平時(shí)間寬度進(jìn)行比較; (3) 將所有備選波特率的值與(2)中的最小的電平時(shí)間寬度值的差為排序標(biāo)準(zhǔn)做升序 排列,選出差值最小時(shí)所對(duì)應(yīng)的波特率的值,將此值作為時(shí)間基數(shù)base。6. 根據(jù)權(quán)利要求6所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的備選波特率包 括串口通信常用的115200、57600、38400、18200和9600,所對(duì)應(yīng)的時(shí)間寬度的列表bv為 1677、833、417、278 和 139。7. 根據(jù)權(quán)利要求1所述的一種串口自動(dòng)識(shí)別方法,其特征在于步驟S5所述確定停止位 的位數(shù)包括如下步驟: (1) 計(jì)算數(shù)據(jù)幀總位數(shù)num ; (2) 依據(jù)算式 NI= (num+sbn)/ (Ql+N2+sbn)和 R= (2* (num+sbn))% (2* (Ql+N2+sbn)), 以及停止位位數(shù)sbn的備選值,選取R最小時(shí)sbn對(duì)應(yīng)的值作為停止位的位數(shù),其中NI為 數(shù)據(jù)幀的全部字符個(gè)數(shù),Ql為起始位位數(shù),N2為數(shù)據(jù)位位數(shù),R為指示變量。8. 根據(jù)權(quán)利要求7所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述停止位位數(shù)sbn的 備選值為1、1.5或2。9. 根據(jù)權(quán)利要求1所述的一種串口自動(dòng)識(shí)別方法,其特征在于步驟S6所述校驗(yàn)包括如 下步驟: (1) 遍歷數(shù)據(jù)幀內(nèi)所有的電平,求得在以時(shí)間基數(shù)為基礎(chǔ)偏移15%范圍內(nèi)的最大值作 為偏移標(biāo)準(zhǔn)電平寬度值; (2) 遍歷數(shù)據(jù)幀內(nèi)所有電平,在偏移標(biāo)準(zhǔn)電平寬度值范圍內(nèi),求取奇數(shù)位電平時(shí)間基數(shù) base^^P偶數(shù)位電平時(shí)間基數(shù)basapi, (3) 接收方根據(jù)事先約定的特征字串、數(shù)據(jù)位數(shù)以及S5中確定的停止位位數(shù)自動(dòng)生成 數(shù)組exp [i],數(shù)組exp [i]內(nèi)的各元素依次表示特征字串在數(shù)據(jù)幀中各電平所占用的位數(shù); (4) 接收方遍歷接收到的數(shù)據(jù)幀,產(chǎn)生相應(yīng)的數(shù)組exp' [i],數(shù)組exp' [i]內(nèi)的各元素 依次表示接收到的發(fā)送方發(fā)送的數(shù)據(jù)在數(shù)據(jù)幀中各電平所占用的位寬度; (5) 根據(jù)奇數(shù)位電平時(shí)間基數(shù)base^P偶數(shù)位電平時(shí)間基數(shù)base{s的大小,判斷數(shù)據(jù)幀 是否包含特征字串; (6) 若校驗(yàn)成功,就繼續(xù)完成下一步驟S7 ;如果校驗(yàn)失敗就進(jìn)入下一幀監(jiān)聽(tīng)狀態(tài)。10. 根據(jù)權(quán)利要求9所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的求取奇數(shù)位電 平時(shí)間基數(shù)base^^P偶數(shù)位電平時(shí)間基數(shù)basapi,包括如下步驟: I) 用數(shù)據(jù)幀范圍內(nèi)的每一個(gè)電平的時(shí)間寬度除以時(shí)間基數(shù)base,分別提取出整數(shù)部分 和余數(shù)部分; II) 判斷每個(gè)電平各包含多少個(gè)數(shù)據(jù)位:判斷余數(shù)部分,與時(shí)間基數(shù)base的比值大于 50%就認(rèn)為還有一個(gè)數(shù)據(jù)位,在相對(duì)應(yīng)的整數(shù)部分加1 ;與時(shí)間基數(shù)base的比值小于50%就 認(rèn)為沒(méi)有數(shù)據(jù)位,相對(duì)應(yīng)的整數(shù)部分不動(dòng);如果比值等于50%,則無(wú)法判斷,丟棄本串?dāng)?shù)據(jù), 進(jìn)入下一次監(jiān)聽(tīng); III) 依據(jù)II)中的結(jié)果,記錄電平的序號(hào)值,并且記錄各序號(hào)所對(duì)應(yīng)的電平寬度的值: 記錄電平的規(guī)則為:含有奇數(shù)個(gè)"位"的電平除了第一個(gè)(或最后一個(gè))外,其他電平的時(shí)間 寬度都取時(shí)間基數(shù)base,剩下的寬度就是這個(gè)第一個(gè)(或最后一個(gè))的電平的時(shí)間寬度;含 有偶數(shù)個(gè)"位"的電平,取該電平的時(shí)間寬度的平均值; IV) 所有奇數(shù)位電平的電平時(shí)間相加,并除以奇數(shù)位電平所占的位數(shù),得到奇數(shù)位電平 時(shí)間基數(shù)base#;所有偶數(shù)位電平的電平時(shí)間相加,并除以偶數(shù)位電平所占的位數(shù),得到偶 數(shù)位電平時(shí)間基數(shù)base偶。11. 根據(jù)權(quán)利要求9所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的判斷數(shù)據(jù)幀是 否包含特征字串,采用以下五個(gè)算式進(jìn)行判斷,其中符號(hào)表示乘法運(yùn)算: 1?若base#>base偶,且exp'[i]中元素相對(duì)應(yīng)的電平為偶數(shù)位電平,則判定exp'[i] 是否滿足:(base* (exp [i]-1) +(base-offset) *0.5)〈 exp' [i]〈 (base* exp [i] *1.3); 2?若base奇〉base偶,且exp'[i]中元素相對(duì)應(yīng)的電平為奇數(shù)位電平,則判定exp' [i] 是否滿足:(base*( exp[i]-l) + (base+offset)*1.5)> exp' [i]> (base* exp[i]*0.7);3.若base#〈base偶,且exp'[i]中元素相對(duì)應(yīng)的電平為偶數(shù)位電平,則判定exp' [i] 是否滿足:〇3886*(6叉卩[;[]-1) + 〇3&86+0打861:)*1.5)>6叉卩'[;[]>〇3&86*6叉卩[;[]*0.7); 4?若base奇〈base偶,且exp'[i]中元素相對(duì)應(yīng)的電平為奇數(shù)位電平,則判定exp' [i] 是否滿足:(base* (exp [i]-I)+ (base-offset) *0.5)〈 exp' [i]〈(base* exp [i] *1.3);5.若base# Zbasaffl,則無(wú)論exp' [i]中元素相對(duì)應(yīng)的電平為奇數(shù)位電平或偶數(shù)位電 平,均判定 exp'[i]是否滿足:(base*( exp[i]-0.5) )〈 exp'[i]〈(base*( exp[i]+0.5) )〇12. 根據(jù)權(quán)利要求2所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的識(shí)別整個(gè)數(shù)據(jù) 幀,包括如下步驟: (1) 采用小循環(huán)遍歷目標(biāo)電平; (2) 獲取目標(biāo)電平所占的位數(shù); (3) 在小循環(huán)中的判斷目標(biāo)電平的位數(shù)的過(guò)程中,對(duì)每一位進(jìn)行判斷,如果出現(xiàn)明顯 錯(cuò)誤,則丟棄該數(shù)據(jù)幀,繼續(xù)監(jiān)聽(tīng)下一幀;若無(wú)明顯錯(cuò)誤,就記錄數(shù)據(jù)位,并繼續(xù)辨識(shí)下一電 平,直至所有電平辨識(shí)完成; (4) 方法完成,得到最終的識(shí)別到的數(shù)據(jù)幀。13. 根據(jù)權(quán)利要求12所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的采用小循環(huán)遍 歷目標(biāo)電平,包括如下步驟: 依據(jù)權(quán)利要求10中的奇數(shù)位電平時(shí)間基數(shù)base^^P偶數(shù)位電平時(shí)間基數(shù)base^!的大 小,判斷目標(biāo)電平的位數(shù),其中符號(hào)" "表示乘法運(yùn)算:1. 若base# >baSete,且目標(biāo)電平為奇數(shù)位電平,則判定目標(biāo)電平的時(shí)間寬度T是否滿 足:((base+offset)*1. 5)>T>base*0. 7;2. 若base# >baseft,且目標(biāo)電平為偶數(shù)位電平,則判定目標(biāo)電平的時(shí)間寬度T是否滿 足:((base-offset)*0? 5)<T〈base*l. 3;3. 若base# <baseft,且目標(biāo)電平為奇數(shù)位電平,則判定目標(biāo)電平的時(shí)間寬度T是否滿 足:((base-offset)*0? 5)<T〈base*l. 3;4. 若base# <baseft,且目標(biāo)電平為偶數(shù)位電平,則判定目標(biāo)電平的時(shí)間寬度T是否滿 足:((base+offset)*1. 5)>T>base*0. 7;5. 若base# =baseft,則無(wú)論目標(biāo)電平為偶數(shù)位電平或奇數(shù)位電平,均判定目標(biāo)電平的 時(shí)間寬度T是否滿足:base*0. 5〈T〈base*l. 5。14. 根據(jù)權(quán)利要求12所述的一種串口自動(dòng)識(shí)別方法,其特征在于所述的獲取目標(biāo)電平 所占的位數(shù),包括如下步驟: (1) 目標(biāo)電平的位數(shù)N初始化為0 ;時(shí)間寬度值M初始化為目標(biāo)電平的時(shí)間寬度; (2) 依據(jù)權(quán)利要求14中所述的判斷目標(biāo)電平的位數(shù)的公式對(duì)時(shí)間寬度值M進(jìn)行判斷: 1) 若判斷通過(guò),則目標(biāo)電平的位數(shù)值為N+1,結(jié)束判斷; 2) 若判斷不通過(guò)且M比相應(yīng)的判斷公式中的下限值小,則結(jié)束算法,進(jìn)行下一次監(jiān)聽(tīng); 3) 若判斷不通過(guò)且M比相應(yīng)的判斷公式中的上限值大,則目標(biāo)電平的位數(shù)N增加1,時(shí) 間寬度值M減去時(shí)間基數(shù)base ; 4) 重復(fù)步驟(2)的判斷,直至判斷結(jié)束; (3 )判斷結(jié)束,獲取目標(biāo)電平的位數(shù)。15. 根據(jù)權(quán)利要求1所述的串口自動(dòng)識(shí)別方法,其特征在于所述的數(shù)據(jù)位數(shù)為8位。
【專利摘要】一種串口自動(dòng)識(shí)別方法,步驟包括通信雙方約定特征字串和數(shù)據(jù)位數(shù),發(fā)送方按照通信雙方的約定發(fā)送一幀數(shù)據(jù)幀,接收方識(shí)別數(shù)據(jù)幀中各段電平的時(shí)間寬度,在備選波特率中選定波特率值,計(jì)算停止位的位數(shù),校驗(yàn)數(shù)據(jù)幀中的特征字串波形,再識(shí)別整個(gè)數(shù)據(jù)幀。本發(fā)明僅需發(fā)送方發(fā)送一次特征字串或者特征字串開(kāi)頭的數(shù)據(jù)幀,就能完成發(fā)送方和接收方的串口檢測(cè)和識(shí)別過(guò)程,適用于所有的串口通信識(shí)別和配對(duì),特別適用于某些具有固定幀頭的串口通信協(xié)議,而且在第一次發(fā)送數(shù)據(jù)幀識(shí)別和匹配時(shí)就能在數(shù)據(jù)幀內(nèi)包含命令或其他數(shù)據(jù)信息,相比現(xiàn)有技術(shù)需要單純發(fā)送一幀純粹的識(shí)別幀而言,節(jié)約了配對(duì)和識(shí)別時(shí)間。
【IPC分類】G06F13/42
【公開(kāi)號(hào)】CN105068966
【申請(qǐng)?zhí)枴緾N201510510053
【發(fā)明人】范律, 裴瑞博, 孫煦, 龍波, 劉連義
【申請(qǐng)人】長(zhǎng)沙威勝信息技術(shù)有限公司
【公開(kāi)日】2015年11月18日
【申請(qǐng)日】2015年8月19日