如何檢測串口連接正常
如何檢測串口連接正常
可以通過我的電腦——屬性——設(shè)備管理器——端口(COM)——USB SERIAL如果能再端口里面看到USB SERIAL,就說明串口與電腦連接正常。具體如下:串口與電腦連接時,可以看到端口(COM和LPT),里面有USB串口字樣就對了(全英文)串口連接移除后,端口就不見了。
如果串口連接了,缺看不到,可以這樣:下載驅(qū)動,安裝好驅(qū)動程序,重新連接一下電腦。
(安裝驅(qū)動的時候不能拔除串口連接)(要選擇正確的版本,有的驅(qū)動是XP的,有的是WIN7等)。換一條串口線。一般這樣就百科行了(STC12C5A60S2的USB轉(zhuǎn)串口的,一般串口也差不多)。
串口通訊中要發(fā)送字符型數(shù)據(jù)接收時怎樣判斷接收完畢
你之前用的隊列結(jié)構(gòu)是完全可行的。有幾個問題你必須清楚:1.讀取txt文件中的數(shù)據(jù),txt中數(shù)據(jù)是*的,也就是說讀取過程叫做—-數(shù)據(jù)回放2.讀取實際信息的數(shù)據(jù),數(shù)據(jù)是活的,通常可以叫做—動態(tài)數(shù)據(jù)采集(實時采集)針對**點來說:數(shù)據(jù)回放,是指要求你把已經(jīng)有的數(shù)據(jù),按不同的時間段進(jìn)行回放,這需要你對txt文件中的數(shù)據(jù)的格式,怎么回放,回放時間間隔把握好。
這個我建議你先不要做,因為數(shù)據(jù)回放就是把數(shù)據(jù)一個個拿出來,再按時間排列去一個個顯示出去,不如實時采集來的直接。
第二點,實時采集,也就是說,數(shù)據(jù)來源可以有兩種:1.真實數(shù)據(jù)。2.模擬數(shù)據(jù)。在你之前的范例程序中,也就是“基礎(chǔ)隊列.vi”中,在循環(huán)內(nèi)部的隨機數(shù)模塊,就是模擬數(shù)據(jù)。也就是說,是人為做的一個循環(huán)隨機數(shù)。
而真實數(shù)據(jù),就是實際采集到的數(shù)據(jù)(替換模擬數(shù)據(jù))。真實數(shù)據(jù)來源有很多種,比如,串口通訊,接收到的不停變換的數(shù)據(jù)(動態(tài)數(shù)據(jù))。在最初做這個項目的時候,我的建議是,如果不了解真實數(shù)據(jù)(板卡數(shù)據(jù)采集/通訊等),那么就使用模擬數(shù)據(jù),在labview中有很多可以模擬的子VI,比如正玄波發(fā)生器等等。
或者,人為造信號,比如之前的“基礎(chǔ)隊列.vi”中,范例造的隨機數(shù)信號。這里就涉及到你之前問的一個問題,數(shù)—字符串。(這些是計算機基礎(chǔ)知識)字符在c語言中是char類型,在數(shù)據(jù)的傳遞中,字符串是以ASCII碼形式傳輸?shù)?,說白了也是數(shù)只不過比如“s”對應(yīng)的ASC碼數(shù)是“78”(沒查表只是舉例)。
在內(nèi)存中占1個字節(jié)。所以,當(dāng)以字符串傳遞數(shù)據(jù)的時候,數(shù)的表現(xiàn)形式往往是人看不懂的,因為是ASC碼所以,你傳遞整數(shù),傳遞字符串,其道理是一樣的,只是如何能讓人來讀懂這些數(shù)。所以“基礎(chǔ)隊列.vi”中的隨機數(shù)vi是以double雙精度數(shù)傳遞的一個數(shù),而你所要做的就是把這個隨機數(shù)vi換成字符串的輸出形式。
labview查找數(shù)組轉(zhuǎn)字符串這個vi或字符串轉(zhuǎn)8位數(shù)組這個vi,然后查看如何使用,可以幫助你,而demo的“基礎(chǔ)隊列.vi”程序可以保留,你所要做的就是以上說的這些基礎(chǔ)。
vb 判斷串口是否接收完成問題,謝謝
?Private?Sub?MSComm1_OnComm()?\’……?If?MSComm1.CommEvent?=?2?Then?Cheng=0?\’……?End?IfEnd?Sub
Modbus通信協(xié)議的數(shù)據(jù)接收 程序中,如何判斷一次數(shù)據(jù)接受已經(jīng)完畢?
無需關(guān)心數(shù)據(jù)是否接收完畢,只要有數(shù)據(jù)發(fā)過來,都收到自己的緩沖區(qū)當(dāng)中。
在應(yīng)用層,打開一個任務(wù)以定期掃描緩沖區(qū)中的新數(shù)據(jù)。
如果有新數(shù)據(jù),確定其是否為必需的協(xié)議幀。
通過幀頭幀尾標(biāo)識符還有校驗等判斷接收幀的正確性,如果正確再處理,不正確丟棄。
Modbus沒有固定的幀頭標(biāo)記,長度也沒有固定。 判斷時,首先查找具有正確地址的字符,然后找出后續(xù)功能代碼是否正確。 根據(jù)功能代碼,確定后續(xù)數(shù)據(jù)有多長并進(jìn)行校驗。
如果驗證正確,則說明幀是正確的。
擴展資料:
舉例說明如下:
從站地址03,從0開始讀取10個寄存器,則接收到的幀為03 03 00 00 00 0a xx xx,查找從站地址03的字節(jié),找到后,以下功能碼為03,符合功能碼范圍。
該功能碼的數(shù)據(jù)包括固定為8個字節(jié)的校驗和,然后在其后沒有8個字節(jié)時,表示其已被沒收,然后在關(guān)閉后進(jìn)行判斷。
如果正確,則可以在應(yīng)用層中正確處理該幀。
問題1:stm32怎么判斷串口接收完成 問題2:使用串口調(diào)試發(fā)數(shù)據(jù),為什么單片機發(fā)回來的數(shù)據(jù)偶爾會出現(xiàn)亂碼
你要搞清楚ascii符號和數(shù)字的差別:ascii符號“0”~“9”的編碼是0x30~0x39,換成10進(jìn)制就是48~57。數(shù)字就是0~9。
如果要將“0”~“9”轉(zhuǎn)換為數(shù)字,減去0x30就可以了。
如果你用串口發(fā)送數(shù)字0~9,那就要勾選“十六進(jìn)制發(fā)送“,這樣就對了。
stm32串口如果沒有接受結(jié)束判斷會怎樣,會有什么情況
不會的。pc端只管發(fā)數(shù)據(jù),而不會去理會接收端是否全部接收。
所以對接收端的要求就是串口參數(shù)配置要一樣,處理速度跟得上。
stm32端的串口接收一般怎么做?最常見的就是使用串口接收中斷,在接收中斷里將數(shù)據(jù)依次寫入數(shù)組,然后在主函數(shù)中處理接收到的數(shù)據(jù)。如果想判斷數(shù)據(jù)接受完成,可以再開一個定時器中斷,比如volatile int timeOut;在串口接收中斷中將這個timeOut設(shè)為0,在定時器中斷中執(zhí)行++操作。當(dāng)timeOut大于一個值,比如說5ms,則說明在5ms時間內(nèi)串口中斷沒有收到數(shù)據(jù),認(rèn)為數(shù)據(jù)接收完成。還一種方法是使用串口空閑中斷+DMA實現(xiàn)。
這個可以在上面那個方法不能適用的情況下使用,百度一下吧,要說的太多,不詳述了。**一點,需要注意的是寫入接收數(shù)組時,注意溢出的情況。