波多野结衣无码一区,久久久噜噜噜久久中文免费,亚洲性爱一区二区免费看,久久国产国内精品国语对白

首頁(yè)
產(chǎn)品
卓越 ? 易用 ? 可靠
視頻
讓中國(guó)物聯(lián)網(wǎng)領(lǐng)先世界
搜索
歷史搜索
搜索發(fā)現(xiàn)

「干貨」串口通信常見(jiàn)問(wèn)題及解決方法

2022-11-08 10:39:20| 來(lái)源:聚英電子| | 0

  什么是串口通信?

  串口,一般指異步串行接口(Serial port),主要用于串行式逐位數(shù)據(jù)傳輸。串口對(duì)于處于嵌入式行業(yè)的我們來(lái)說(shuō),是必不可缺的一部分,在剛開(kāi)始學(xué)習(xí)單片機(jī)時(shí),我們最先學(xué)習(xí)的通信接口就是USART(Universal Synchronous/Asynchronous Receiver/Transmitter)——通用同/異步串行接收/發(fā)送器。其中最常見(jiàn)的串口通信的時(shí)序如下圖:

  

串口通信的時(shí)序


  于是在串口通信就有了起始位、數(shù)據(jù)位、校驗(yàn)位、停止位、波特率這幾個(gè)參數(shù)。

  另外,串口通信主要分為RS232、RS422、RS485三種通信方式,之前有系統(tǒng)地講解過(guò),小編這里就不再進(jìn)行詳細(xì)地介紹了。

  二、串口通信常見(jiàn)問(wèn)題及解決

  如上所述,串口作為我們?nèi)粘i_(kāi)發(fā)時(shí)的非常重要的一個(gè)角色,我們也時(shí)常會(huì)碰到很多問(wèn)題,深受各種折磨,接下來(lái)我們就來(lái)說(shuō)說(shuō)平時(shí)串口通信中常見(jiàn)的問(wèn)題以及解決方法。

  

串口通信中常見(jiàn)的問(wèn)題


  通常我們調(diào)試串口通信碰到問(wèn)題時(shí),需要用到一個(gè)USB轉(zhuǎn)TTL、杜邦線(導(dǎo)線)等工具,首先我們應(yīng)當(dāng)保證自己的工具是正常的,可以通過(guò)以下方法自測(cè):

  1、將USB轉(zhuǎn)TTL中的TX、RX使用杜邦線或是跳線帽短接,打開(kāi)串口調(diào)試工具,例如XCOM、SSCOM等,將波特率、停止位、校驗(yàn)位等參數(shù)調(diào)至即將需要通信的模塊的參數(shù),再去隨意發(fā)送一些數(shù)據(jù),通常筆者是更傾向于使用16進(jìn)制發(fā)送和接收,以此來(lái)保證數(shù)據(jù)中間或者結(jié)尾出現(xiàn)一些不可使用ASCII值直觀看到的數(shù)據(jù),例如數(shù)據(jù)的結(jié)尾多了0x00,0x0a等。若確保自己的工具以及導(dǎo)線沒(méi)有問(wèn)題后,即可繼續(xù)排查通信問(wèn)題

  2、發(fā)現(xiàn)使用USB轉(zhuǎn)TTL與模塊之間明明已經(jīng)反接了TX、RX,發(fā)指令給模塊之后卻沒(méi)有任何反應(yīng)。

  解決方法:當(dāng)碰到如上問(wèn)題時(shí),應(yīng)當(dāng)首先自檢工具,再檢查是否雙方共地,GND提供了一個(gè)基準(zhǔn)0電平,如果沒(méi)有共地的話,那極有可能會(huì)出問(wèn)題,其次是檢查雙方的串口參數(shù)是否一致,串口通信是一個(gè)易于開(kāi)發(fā)并且速度可調(diào)的一個(gè)的通信協(xié)議,其中我們大部分都會(huì)使用UART——通用異步傳輸接收/發(fā)送器,串口異步通信也可稱(chēng)為起止式異步通信,是直接以字符為單位進(jìn)行傳輸?shù)模址g沒(méi)有固定的時(shí)間要求,每個(gè)字符中的每一位以固定的時(shí)間傳送。這就意味著,如果你使用一個(gè)較為高的波特率的速度去與一個(gè)較為低的波特率的速度去通信的話,那極大可能會(huì)導(dǎo)致低波特率設(shè)備無(wú)法讀取到通信時(shí)的空閑信號(hào)的跳變信息。在這里我用一個(gè)比較極端例子進(jìn)行說(shuō)明:

  當(dāng)雙方串口的參數(shù)的數(shù)據(jù)位都為8bit,停止位為1bit,校驗(yàn)位為0bit時(shí),但是A設(shè)備的波特率為9600,B設(shè)備為921600,就會(huì)出現(xiàn)以下情況:

  當(dāng)B設(shè)備向A設(shè)備發(fā)送一個(gè)字節(jié)的數(shù)據(jù)時(shí),B設(shè)備從發(fā)送到結(jié)束所需用的時(shí)間為1/921600*(8+1+1)=10.8us,而相同的A設(shè)備發(fā)送/接收一個(gè)字節(jié)的時(shí)間為(8+1+1)/9600=1.04ms,試問(wèn),像這種相差數(shù)倍的時(shí)間,當(dāng)高波特率發(fā)送給低波特率設(shè)備時(shí),很有可能低波特率設(shè)備壓根就不會(huì)認(rèn)為發(fā)送過(guò)來(lái)的數(shù)據(jù)流是一串?dāng)?shù)據(jù),因?yàn)閴焊鶝](méi)法解析到。

  因此串口通信一定要保證雙方波特率、停止位等參數(shù)一致。反之,低波率向高波特率發(fā)送數(shù)據(jù)就會(huì)被認(rèn)為是錯(cuò)誤的數(shù)據(jù),也就是所謂的亂碼。

  3、發(fā)現(xiàn)雙方已經(jīng)使用了相同的參數(shù)進(jìn)行通信,但是依舊通信有問(wèn)題,例如收到亂碼等。

  解決方法:首先應(yīng)該降低波特率先確保模塊與USB轉(zhuǎn)TLL均無(wú)問(wèn)題,也要確保模塊沒(méi)有處于透?jìng)鞯忍厥馇闆r下,也可以使用邏輯分析儀等工具進(jìn)行排查,現(xiàn)在的很多邏輯分析儀是自帶數(shù)據(jù)分析的,可以由此來(lái)確保模塊正常。其實(shí)大部分碰到這種問(wèn)題的時(shí)候,更建議優(yōu)先查看USB轉(zhuǎn)TLL是否支持當(dāng)前的工作模式。

  4、串口通信的弱點(diǎn)?

  1)信號(hào)干擾的問(wèn)題建議使用帶屏蔽線,接線要嚴(yán)格,比如要接地。有些485通信上,還考慮接上終端電阻來(lái)匹配。如果是232,盡量不要讓線太長(zhǎng)。通信協(xié)議上盡量避免長(zhǎng)報(bào)文的數(shù)據(jù)通信。

  2)波特率匹配的問(wèn)題因?yàn)橛行┰O(shè)備的計(jì)算的波特率是存在誤差的,特別是一些控制器,由于使用的晶振不一樣。因此在一些波特率比如9600波特率就存在誤差。存在誤差帶來(lái)的影響是什么呢。因?yàn)榻邮辗绞峭ㄟ^(guò)時(shí)間來(lái)計(jì)算一個(gè)位的。那么如果一個(gè)報(bào)文過(guò)長(zhǎng),就會(huì)存在誤差積累的問(wèn)題,算著算著就偏了。所以,這也是串口通信不穩(wěn)定的一些地方,在使用上應(yīng)注意避免發(fā)送太長(zhǎng)數(shù)據(jù)的包。

  3)在一些可能會(huì)存在干擾的情況,可以考慮使用奇校驗(yàn)或者偶校驗(yàn)因?yàn)殡m說(shuō)出現(xiàn)錯(cuò)誤的可能性不大,但既然存在干擾,如果加了校驗(yàn),至少可以把錯(cuò)誤的報(bào)文過(guò)濾掉??偤帽葲](méi)有校驗(yàn)然后通信數(shù)據(jù)錯(cuò)了不知道?;蛘弑M量使用一些帶校驗(yàn)的協(xié)議,防止數(shù)據(jù)出錯(cuò)。

  4)串口通信本來(lái)就比較慢,請(qǐng)降低對(duì)數(shù)據(jù)響應(yīng)的要求因?yàn)榇谕ㄐ疟旧砭捅纫蕴W(wǎng)慢。而且,串口通信并不是能像CPU那樣多線程處理。因?yàn)榫鸵粋€(gè)口一個(gè)線數(shù)據(jù)出去,即便你應(yīng)用到程序再怎么用多線程處理數(shù)據(jù),但是最底下也只有一個(gè)口出去,一次也只能傳一個(gè)位,一個(gè)字節(jié)過(guò)去。因?yàn)橛锌蛻?hù)在使用9600的波特率通信,但是又希望多少的數(shù)據(jù)可以在多少毫秒內(nèi)得到響應(yīng)。

  但是串口通信還是要實(shí)事求是,所以正確認(rèn)識(shí)串口通信對(duì)應(yīng)用,對(duì)開(kāi)發(fā),對(duì)溝通都有著很大的幫助的。

  5、為什么不用同步通信?

  剛才提到,同步通信需要依賴(lài)于時(shí)鐘信號(hào)。這就存在一個(gè)問(wèn)題,這個(gè)時(shí)鐘信號(hào)是誰(shuí)來(lái)發(fā)起呢。在同步通信中,往往需要一個(gè)主設(shè)備發(fā)起時(shí)鐘信號(hào)讀從模塊的數(shù)據(jù)。在實(shí)際中,有屏讀PLC,有屏讀屏的數(shù)據(jù)。而單純地從異步串口通信來(lái)說(shuō),是沒(méi)有主從之說(shuō),雙方都是平等的角色,都可以互發(fā)信息,互收信息。而同步通信一般是應(yīng)用于CPU讀一些模塊,由CPU發(fā)起時(shí)鐘信號(hào),比如讀SD卡模塊,就可以通過(guò)SPI方式,還有一些傳感器模塊。


聯(lián)系銷(xiāo)售
銷(xiāo)售王經(jīng)理微信 銷(xiāo)售王經(jīng)理
微信公眾號(hào) 微信公眾號(hào)
服務(wù)熱線
400-6688-400