⑴ 單片機串列通訊與並行通訊區別
單片機串列通訊與並行通訊區別
一條信息的各位數據被逐位按順序傳送的通訊方式稱為串列通訊。串列通訊的特點是:數據位傳送,傳按位順序進行,最少只需一根傳輸線即可完成,成本低但送速度慢。串列通訊的距離可以從幾米到幾千米。 根據信息的傳送方向,串列通訊可以進一步分為單工、半雙工和全雙工三種。信息只能單向傳送為單工;信息能雙向傳送但不能同時雙向傳送稱為半雙工;信息能夠同時雙向傳送則稱為全雙工。 串列通訊又分為非同步通訊和同步通訊兩種方式。在單片機中,主要使用非同步通訊方式。
串列通訊中,兩個設備之間通過一對信號線進行通訊,其中一根為信號線,另外一根為信號地線,信號電流通過信號線到達目標設備,再經過信號地線返回,構成一個信號迴路。
初級讀者會產生疑問:為何不讓信號電流從電源地線返回?答案:公共地線上存在各種雜亂的電流,可以輕而易舉地把信號淹沒。因此所有的信號線都使用信號地線而不是電源地線,以避免干擾。
這一對信號線每次只傳送1bit(比特)的信號,比如1Byte(位元組)的信號需要8次才能發完。傳輸的信號可以是數據、指令或者控制信號,這取決於採用的是何種通訊協議以及傳輸狀態。串列信號本身也可以帶有時鍾信息,並且可以通過演算法校正時鍾。因此不需要額外的時鍾信號進行控制。
並行通訊中,基本原理與串列通訊沒有區別。只不過使用了成倍的信號線路,從而一次可以傳送更多bit的信號。
並行通訊通常可以一次傳送8bit、16bit、32bit甚至更高的位數,相應地就需要8根、16根、32根信號線,同時需要加入更多的信號地線。比如傳統的PATA線路有40根線,其中有16根信號線和7根信號地線,其他為各種控制線,一次可以傳送2Byte的數據。並行通訊中,數據信號中無法攜帶時鍾信息,為了保證各對信號線上的信號時序一致,並行設備需要嚴格同步時鍾信號,或者採用額外的時鍾信號線。
通過串列通訊與並行通訊的對比,可以看出:串列通訊很簡單,但是相對速度低;並行通訊比較復雜,但是相對速度高。更重要的是,串列線路僅使用一對信號線,線路成本低並且抗干擾能力強,因此可以用在長距離通訊上;而並行線路使用多對信號線(還不包括額外的控制線路),線路成本高並且抗干擾能力差,因此對通訊距離有非常嚴格的限制。
⑵ 單片機串列通信程序調試原因
串口UART作為嵌入式應用和通訊領域中最常用的介面之一,介面協議雖然簡單,但在實際應用中不同設備之間的通訊也會存在各種小問題,下面對使用中各種常見的問題做下總結和梳理,可作為調試參考。串口可分為非同步串口(UART)和同步串口(USART),後者多出時鍾信號線用作通訊時信號同步。本偏僅介紹非同步串口。
一、串口通信常見問題
串口通信亂碼
串口通訊亂碼通常是指接收方接收到的數據不符合預期,出現此情況時需要考慮的因素通常包含以下幾個方面:
雙方設定的串口參數是否匹配,需檢查設置的:串口波特率、串口數據格式等參數。
串口通訊電壓不匹配,不同的串口設備接收可正常進行解碼的高低電平門限不同,如同樣是3.3V串口通訊,A設備低電平門限1.5V,B設備低電平門限1V。當實際串口電壓低電平只有1.5V時,B設備無法正常接收數據。又如:A設備為5V串口,B設備為3.3V串口,同樣有電壓不匹配的問題。
串口通訊實際工作波特率誤差較大,即:串口工作實際波特率和理論值偏差較大,因一些MCU和串口設備所用時鍾為了兼顧其他資源和應用需要,實際工作的串口速率和設定會有偏差。比如:標稱為9600bps時,實際工作在了10000bps(誤差超過4%),此時可能已經超出接收方的設計標准。
串口通訊信號質量差,如通訊時信號上升下降抖動嚴重,信號有過沖或者變化比較遲緩,此時檢查硬體上共地是否良好,以及線路上有無串接/並聯其他器件導致。
數據格式顯示問題,通常使用十六進制或ASCII碼格式居多,使用時需要區分。
串口無法發送
串口無法發送通常是指與此串口的TXD連接的對端設備RXD通道接收不到任何數據,總結如下:
使用儀器對TXD通道進行實際測量,觀察硬體波形,確定信號是否有輸出以及是否正常。(串口電壓、串口信號上升下降時間)
短接設備的TXD和RXD通道回環測試,看自收發是否可以成功。排除是自身設備異常還是對端異常。
確定應用軟體是否打開串口硬體流控,如當啟用RTS/CTS硬體流控後但實際該引腳並沒有連接或連接但不生效時,按照協議規定,CTS輸入無效則發送方暫停發送數據。
MCU軟體編碼問題或計算機端軟體工作異常。
串口無法接收
當串口接收不到任何數據的原因通常如下:
對端串口實際未能成功發送數據。
串口發送有效電壓不滿足晶元接收解碼要求。
MCU軟體編碼問題或計算機端軟體工作異常。
二、常用的排查小技巧
對於以上的常見串口調試問題,有以下幾個方法和技巧可供參考使用。
使用硬體儀器
善於使用示波器等硬體採集或分析工具查找問題,用此方法可以確定線路上信號的串口電壓、串口數據格式、串口通信波特率等參數。
串口Loopback檢測
當手頭沒有硬體儀器時,將設備自身的TXD和RXD短接起來進行自收發測試也是一個不錯的選擇,此方式可以簡單確認硬體通路和整個邏輯是否是打通的。但缺點是定位問題不夠精準。
更換串口調試軟體
計算機端串口軟體種類較多,不排除一些設備或驅動軟體沒法成功適配所有的串口調試軟體,此時可嘗試多使用幾款不同的軟體對比測試。
三、串口通信基礎
當兩個設備使用UART進行通信時,它們至少通過三根導線連接:TXD串口發送、RXD串口接收、GND。串口設備通過改變TXD信號線上的電壓來發送數據,接收端通過檢測RXD線上的電壓來讀取數據。
什麼是串口通信
計算機一次傳輸信息(數據)一位或多個比特位。串列是指傳輸數據一次只傳輸一位。當進行串口通信時發送或者接收的每個字(即位元組或字元)一次發送一位。每一位都是邏輯『1』或者『0』。也用Mark表示邏輯1,Space表示邏輯0。
串口數據速率使用 bits-per-second ("bps") 或者 baud rate ("baud")。這表示一秒內可以傳輸多少邏輯1和0。當波特率超過 1000,你會經常看到用Kbps表示的速率。對於超過 1000000 的速率一般用Mbps 來表示。
⑶ 單片機多機通信
單片機之間的多機通信方式1是通過雙機串列連接,當SM0、SM1配置為01時,串口進入方式1,利用TXD和RXD腳進行數據傳輸。這種方式支持10位幀,包括1位起始位、8位數據位和1位停止位,數據按最低位先發送或接收。
波特率可通過公式確定,其中SMOD位影響頻率。發送時,先寫入數據到SBUF,然後串口以方式1發送,數據通過TXD輸出,每發送完一幀,中斷標志TI置位。接收時,串口接收RXD的數據,起始位的負跳變觸發接收,使用RX時鍾和采樣脈沖檢測數據,確保數據的可靠性。
為確保同步,所有通信雙方的波特率必須一致。在T1定時器方式2下,通過調整初值X,可以精確控制波特率,考慮到誤差,通常選擇時鍾頻率為11.0592MHz。例如,當使用11.0592MHz時鍾,選擇2400bit/s波特率,初值X為244,即F4H。
多機通信時,通過設置SM2位的不同來實現主機選擇特定從機通信。主機先發送地址信息,設置TB8位,從機根據接收到的地址和自身的地址匹配決定是否接收數據,TB8為0表示數據幀,僅SM2為0的從機能接收。
在實際應用中,如圖所示的主從結構中,通過串口連接多個單片機進行通信。設計串列通信介面時,需考慮速率、距離、介面標准、通信線選擇等因素,以確保通信的穩定性和有效性。
⑷ 單片機雙機串列通信能否只用一根導線直接連接單片機1的txd和單片機2的rxd
當然不可以啦,至少還要有一根的地線,因為沒有地線,兩個單片機的電壓就沒有一個標准點。這就好比如兩個人要比高卻不知道站立的地點一樣不一樣,比不出身高。同樣,沒有了地線的連接,兩個單片機也沒有了電壓的高低比較的參照物,從而使得它們無法知道對方傳來的是0電平還是1電平。在一些特殊的情況下你可能發現它們有機會通信成功,比如你用干電池。但是這也是在沒有干擾的情況下可能出現的情況。但是如果你用市電經變壓器,或是開關電源供電,它們的電壓起點不一樣時,兩個單片機之間的電壓差可能會很大。這樣會馬上將單片機燒壞。
另外,只有這兩根電線只能做單方面的串列通信:單片機1發信號給單片機2,單片機2收到信號按指令進行後續工作。但是單片機2並不能傳送數據給單片機1。
不過,如果你只需要單片機2簡單地反饋一個信號給單片機1的話,用軟體做也可設計成雙機通信的,舉個例子:當單片機2接收到一個數據後,就馬上將rxd引腳電平接低,這樣單片機1讀出txd引腳為低電平表示對方已收到信號。