vb串口接收的數(shù)據(jù)丟失了嗎?Stm32串口中斷丟失數(shù)據(jù),MAX485通訊串口丟失數(shù)據(jù),51單片機串口通訊主機丟失數(shù)據(jù),VB串口通訊丟失數(shù)據(jù)一般都是寫在ONCOM上。如果有丟失的數(shù)據(jù),可以考慮字節(jié)寬度為1來接收,我以前就是這么做的,你加一根線,休眠(500)到串行數(shù)據(jù)到達事件的第一行;讓串口完全接受數(shù)據(jù)后再讀取,然后試試沒有這種阻塞的串口的響應(yīng)速度。
這是正常的,就是處理中斷需要時間,在快速發(fā)送的過程中并不總是成功的,因為串口處于中斷處理狀態(tài)時,不會接受新的中斷,所以無法完美解決?!救绻虢鉀Q問題,可以用倍頻時鐘來加快stm32的處理速度,這樣可接受的速度會有所提高。這取決于你使用的晶體振蕩器。8M的晶振看起來是最高的72M,但也夠用了??梢詽M足大部分要求。
你可以在發(fā)送和接收信號方面做些努力。不是上位機太快,而是你寫程序慢。兩個問題:1)接收中斷函數(shù)中怎么會有發(fā)送標(biāo)志位的判斷?刪除這句話:while(usart _ getflagstatus(usart 1,usart _ flag _ tc) reset) 2)你的串口使用方式不對。你每接收一條數(shù)據(jù)都需要中斷,其實接收所有數(shù)據(jù)都應(yīng)該是中斷。
單片機發(fā)出的字符串最好以一個特殊符號開始,比如!最后,用一個特殊的符號結(jié)束,比如$,數(shù)據(jù)在兩個標(biāo)簽里!n1n2n3n4..........$。接收端不需要中斷,而是在你的主程序的循環(huán)中查找mscomm1.input的值,讀取的值累加到一個變量中,那個變量中的標(biāo)記字符串就是單片機發(fā)送的所有值。嘗試在主程序循環(huán)中添加一個DoEvent。應(yīng)該能行。
3、MAX485通訊串口丟失數(shù)據(jù)的問題,請教高手!!波特率9600通訊不可靠?1.檢查下電腦板的晶振是否合適(不要用12.0000代替11.0592!),檢查下位機軟件的波特率設(shè)置。2.你的串口質(zhì)量怎么樣?有多遠(yuǎn)?3.用示波器抓取波形,看有無異常。\串行口線大約10米.\什么樣的電線?你最好拍照?!拔乙粋€人發(fā)數(shù)據(jù)的時候還好好的,但是一打包數(shù)據(jù)發(fā)完就出現(xiàn)了這個問題?!睓z查發(fā)送程序,并在字節(jié)之間添加空格。
4、51單片機串口通信上位機接收數(shù)據(jù)丟失,怎么解決不知道你說的是送損還是收損。好像沒遇到過數(shù)據(jù)丟失的問題。我看了你的節(jié)目。如果是送損,建議你不要在下面的節(jié)目中評論es0和es1前幾天我也遇到了發(fā)送中斷數(shù)據(jù)錯誤的問題。希望能幫到你if(flag1)//用查詢方法判斷是否進入了中斷{//es0;//串口中斷關(guān)閉,防止產(chǎn)生死循環(huán)flag0//清除延遲(100);法松(一);//es1;if(I > 4){ i0;}。
5、android串口通信丟失數(shù)據(jù)原因我現(xiàn)在在測試中也遇到過這個問題。我是按照android_serialport_api中的代碼做的,就是串口發(fā)送的數(shù)據(jù)在android端是不完整的,幾乎每次都只收到一部分?jǐn)?shù)據(jù),不知道另一部分去了哪里。你解決這個問題了嗎?串口通信數(shù)據(jù)丟失的很大一部分原因是:(mscomm的inputlen的設(shè)置有問題;解決方法:將mscomm的輸入設(shè)置為0(讀取整個緩沖區(qū)),讀取一次,嘗試清空緩沖區(qū)一次;
eeprom的速度太慢。增加緩沖區(qū)或使用閃存。中斷服務(wù)程序耗時太長,所以把EEPROM寫的程序放在外面。此外,您需要打開一個接收緩沖區(qū),否則您可能會丟失數(shù)據(jù)。沒有和串口助手握手,所以PC沒有太多時間等待,還沒收到你就丟了。6、C
你添加一個線程。休眠(500)到串行數(shù)據(jù)到達事件的第一行;讓串口完全接受數(shù)據(jù)后再讀取,然后試試沒有這種阻塞的串口的響應(yīng)速度。你嘗試改變SerialPort的握手設(shè)置,應(yīng)該是這個原因。我以前也遇到過這種情況,我發(fā)現(xiàn)就是這個原因。
7、VB串口通信丟數(shù)據(jù)數(shù)據(jù)接收一般用ONCOM編寫。如果有丟失的數(shù)據(jù),可以考慮字節(jié)寬度為1來接收,我以前就是這么做的。我覺得很有可能是你把接收到的數(shù)據(jù)和處理過的數(shù)據(jù)寫在一個函數(shù)或者進程里,這樣如果處理數(shù)據(jù)的工作量大,就會錯過接收到的數(shù)據(jù),建議接收的數(shù)據(jù)和處理的數(shù)據(jù)分兩個地方,接收屬于接收,處理屬于處理。即接收到串行字節(jié)并保存在數(shù)組中后,接收過程結(jié)束,接收過程盡量短。