干貨!串口通信常見問題及解決方法
一、串口通信簡介
什么是串口通信?
串口,一般指異步串行接口(Serial port),主要用于串行式逐位數(shù)據(jù)傳輸。串口對于處于嵌入式行業(yè)的我們來說,是必不可缺的一部分,在剛開始學(xué)習(xí)單片機(jī)時,我們最先學(xué)習(xí)的通信接口就是USART(Universal Synchronous/Asynchronous Receiver/Transmitter)——通用同/異步串行接收/發(fā)送器。其中最常見的串口通信的時序如下圖:
于是在串口通信就有了起始位、數(shù)據(jù)位、校驗位、停止位、波特率這幾個參數(shù)。
另外,串口通信主要分為RS232、RS422、RS485三種通信方式,之前有系統(tǒng)地講解過(RS485/RS232/RS422串口通信接口簡介),小憶這里就不再進(jìn)行詳細(xì)地介紹了。
二、串口通信常見問題及解決
如上所述,串口作為我們?nèi)粘i_發(fā)時的非常重要的一個角色,我們也時常會碰到很多問題,深受各種折磨,接下來我們就來說說平時串口通信中常見的問題以及解決方法。
通常我們調(diào)試串口通信碰到問題時,需要用到一個USB轉(zhuǎn)TTL、杜邦線(導(dǎo)線)等工具,首先我們應(yīng)當(dāng)保證自己的工具是正常的,可以通過以下方法自測排查串口通信問題:
1、將USB轉(zhuǎn)TTL中的TX、RX使用杜邦線或是跳線帽短接,打開串口調(diào)試工具,例如XCOM、SSCOM等,將波特率、停止位、校驗位等參數(shù)調(diào)至即將需要通信的模塊的參數(shù),再去隨意發(fā)送一些數(shù)據(jù),通常筆者是更傾向于使用16進(jìn)制發(fā)送和接收,以此來保證數(shù)據(jù)中間或者結(jié)尾出現(xiàn)一些不可使用ASCII值直觀看到的數(shù)據(jù),例如數(shù)據(jù)的結(jié)尾多了0x00,0x0a等。若確保自己的工具以及導(dǎo)線沒有問題后,即可繼續(xù)排查通信問題
2、發(fā)現(xiàn)使用USB轉(zhuǎn)TTL與無線模塊之間明明已經(jīng)反接了TX、RX,發(fā)指令給模塊之后卻沒有任何反應(yīng)。
解決方法:當(dāng)碰到如上問題時,應(yīng)當(dāng)首先自檢工具,再檢查是否雙方共地,GND提供了一個基準(zhǔn)0電平,如果沒有共地的話,那極有可能會出問題,其次是檢查雙方的串口參數(shù)是否一致,串口通信是一個易于開發(fā)并且速度可調(diào)的一個的通信協(xié)議,其中我們大部分都會使用UART——通用異步傳輸接收/發(fā)送器,串口異步通信也可稱為起止式異步通信,是直接以字符為單位進(jìn)行傳輸?shù)模址g沒有固定的時間要求,每個字符中的每一位以固定的時間傳送。這就意味著,如果你使用一個較為高的波特率的速度去與一個較為低的波特率的速度去通信的話,那極大可能會導(dǎo)致低波特率設(shè)備無法讀取到通信時的空閑信號的跳變信息。在這里我用一個比較極端例子進(jìn)行說明:
當(dāng)雙方串口的參數(shù)的數(shù)據(jù)位都為8bit,停止位為1bit,校驗位為0bit時,但是A設(shè)備的波特率為9600,B設(shè)備為921600,就會出現(xiàn)以下情況:
當(dāng)B設(shè)備向A設(shè)備發(fā)送一個字節(jié)的數(shù)據(jù)時,B設(shè)備從發(fā)送到結(jié)束所需用的時間為1/921600*(8+1+1)=10.8us,而相同的A設(shè)備發(fā)送/接收一個字節(jié)的時間為(8+1+1)/9600=1.04ms,試問,像這種相差數(shù)倍的時間,當(dāng)高波特率發(fā)送給低波特率設(shè)備時,很有可能低波特率設(shè)備壓根就不會認(rèn)為發(fā)送過來的數(shù)據(jù)流是一串?dāng)?shù)據(jù),因為壓根沒法解析到。
因此串口通信一定要保證雙方波特率、停止位等參數(shù)一致。反之,低波率向高波特率發(fā)送數(shù)據(jù)就會被認(rèn)為是錯誤的數(shù)據(jù),也就是所謂的亂碼。
3、發(fā)現(xiàn)雙方已經(jīng)使用了相同的參數(shù)進(jìn)行通信,但是依舊通信有問題,例如收到亂碼等。
解決方法:首先應(yīng)該降低波特率先確保模塊與USB轉(zhuǎn)TLL均無問題,也要確保模塊沒有處于透傳等特殊情況下,也可以使用邏輯分析儀等工具進(jìn)行排查,現(xiàn)在的很多邏輯分析儀是自帶數(shù)據(jù)分析的,可以由此來確保模塊正常。其實(shí)大部分碰到這種問題的時候,更建議優(yōu)先查看USB轉(zhuǎn)TLL是否支持當(dāng)前的工作模式。
以上就是億佰特小編總結(jié)的串口通信常見問題及解決方法,文中如有出錯之處,望指正,希望大家共同進(jìn)步!
查看技術(shù)文章和免費(fèi)咨詢技術(shù)問題可以訪問成都億佰特電子科技有限公司官網(wǎng)及各官方平臺:
微信號:cdebyte
今日頭條:億佰特
新浪微博:成都億佰特
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 杭州辦事處戴經(jīng)理:17512568697
常州辦事處崔經(jīng)理:15906110783 南京辦事處葛經(jīng)理:17626012283
業(yè)務(wù)郵箱:support@cdebyte.com
全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號B5棟(前臺座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號-3