串口通信與編程:串口基礎知識

***************************************************

更多精彩,歡迎進入:http://shop115376623.taobao.com

***************************************************


串口是串行接口(serial?port)的簡稱,也稱為串行通信接口或COM接口。

  串口通信是指采用串行通信協議(serial?communication)在一條信號線上將數據一個比特一個比特地逐位進行傳輸的通信模式。

  串口按電氣標準及協議來劃分,包括RS-232-C、RS-422、RS485等。

?

1.串行通信

  在串行通信中,數據在1位寬的單條線路上進行傳輸,一個字節的數據要分為8次,由低位到高位按順序一位一位的進行傳送。

  串行通信的數據是逐位傳輸的,發送方發送的每一位都具有固定的時間間隔,這就要求接收方也要按照發送方同樣的時間間隔來接收每一位。不僅如此,接收方還必須能夠確定一個信息組的開始和結束。

  常用的兩種基本串行通信方式包括同步通信和異步通信。

1.1串行同步通信

  同步通信(SYNC:synchronous?data?communication)是指在約定的通信速率下,發送端和接收端的時鐘信號頻率和相位始終保持一致(同步),這樣就保證了通信雙方在發送和接收數據時具有完全一致的定時關系

  同步通信把許多字符組成一個信息組(信息幀),每幀的開始用同步字符來指示,一次通信只傳送一幀信息。在傳輸數據的同時還需要傳輸時鐘信號,以便接收方可以用時針信號來確定每個信息位。

  同步通信的優點是傳送信息的位數幾乎不受限制,一次通信傳輸的數據有幾十到幾千個字節,通信效率較高。同步通信的缺點是要求在通信中始終保持精確的同步時鐘,即發送時鐘和接收時鐘要嚴格的同步(常用的做法是兩個設備使用同一個時鐘源)。

  在后續的串口通信與編程中將只討論異步通信方式,所以在這里就不對同步通信做過多的贅述了。

1.2串行異步通信

  異步通信(ASYNC:asynchronous?data?communication),又稱為起止式異步通信,是以字符為單位進行傳輸的,字符之間沒有固定的時間間隔要求,而每個字符中的各位則以固定的時間傳送。

  在異步通信中,收發雙方取得同步是通過在字符格式中設置起始位停止位的方法來實現的。具體來說就是,在一個有效字符正式發送之前,發送器先發送一個起始位,然后發送有效字符位,在字符結束時再發送一個停止位,起始位至停止位構成一幀。停止位至下一個起始位之間是不定長的空閑位,并且規定起始位為低電平(邏輯值為0),停止位和空閑位都是高電平(邏輯值為1),這樣就保證了起始位開始處一定會有一個下跳沿,由此就可以標志一個字符傳輸的起始。而根據起始位和停止位也就很容易的實現了字符的界定和同步。

  顯然,采用異步通信時,發送端和接收端可以由各自的時鐘來控制數據的發送和接收,這兩個時鐘源彼此獨立,可以互不同步。

  下面簡單的說說異步通信的數據發送和接收過程。

1.2.1異步通信的數據格式

  在介紹異步通信的數據發送和接收過程之前,有必要先弄清楚異步通信的數據格式。

  異步通信規定傳輸的數據格式由起始位(start?bit)數據位(data?bit)奇偶校驗位(parity?bit)停止位(stop?bit)組成,如圖1所示(該圖中未畫出奇偶校驗位,因為奇偶檢驗位不是必須有的,如果有奇偶檢驗位,則奇偶檢驗位應該在數據位之后,停止位之前)。

圖1?異步通信數據格式

  (1)起始位:起始位必須是持續一個比特時間的邏輯0電平,標志傳輸一個字符的開始,接收方可用起始位使自己的接收時鐘與發送方的數據同步。

  (2)數據位:數據位緊跟在起始位之后,是通信中的真正有效信息。數據位的位數可以由通信雙方共同約定,一般可以是5位、7位或8位,標準的ASCII碼是0~127(7位),擴展的ASCII碼是0~255(8位)。傳輸數據時先傳送字符的低位,后傳送字符的高位。

  (3)奇偶校驗位:奇偶校驗位僅占一位,用于進行奇校驗或偶校驗,奇偶檢驗位不是必須有的。如果是奇校驗,需要保證傳輸的數據總共有奇數個邏輯高位;如果是偶校驗,需要保證傳輸的數據總共有偶數個邏輯高位。

  舉例來說,假設傳輸的數據位為01001100,如果是奇校驗,則奇校驗位為0(要確保總共有奇數個1),如果是偶校驗,則偶校驗位為1(要確保總共有偶數個1)。

  由此可見,奇偶校驗位僅是對數據進行簡單的置邏輯高位或邏輯低位,不會對數據進行實質的判斷,這樣做的好處是接收設備能夠知道一個位的狀態,有可能判斷是否有噪聲干擾了通信以及傳輸的數據是否同步。

  (4)停止位:停止位可以是是1位、1.5位或2位,可以由軟件設定。它一定是邏輯1電平,標志著傳輸一個字符的結束。

  (5)空閑位:空閑位是指從一個字符的停止位結束到下一個字符的起始位開始,表示線路處于空閑狀態,必須由高電平來填充。

1.2.2異步通信的數據發送過程

  清楚了異步通信的數據格式之后,就可以按照指定的數據格式發送數據了,發送數據的具體步驟如下:

  (1)初始化后或者沒有數據需要發送時,發送端輸出邏輯1,可以有任意數量的空閑位。

  (2)當需要發送數據時,發送端首先輸出邏輯0,作為起始位。

  (3)接著就可以開始輸出數據位了,發送端首先輸出數據的最低位D0,然后是D1,最后是數據的最高位。

  (4)如果設有奇偶檢驗位,發送端輸出檢驗位。

  (5)最后,發送端輸出停止位(邏輯1)。

  (6)如果沒有信息需要發送,發送端輸出邏輯1(空閑位),如果有信息需要發送,則轉入步驟(2)。

1.2.3異步通信的數據接收過程

  在異步通信中,接收端以接收時鐘和波特率因子決定每一位的時間長度。下面以波特率因子等于16(接收時鐘每16個時鐘周期使接收移位寄存器移位一次)為例來說明。

  (1)開始通信,信號線為空閑(邏輯1),當檢測到由1到0的跳變時,開始對接收時鐘計數。

  (2)當計到8個時鐘的時候,對輸入信號進行檢測,若仍然為低電平,則確認這是起始位,而不是干擾信號。

  (3)接收端檢測到起始位后,隔16個接收時鐘對輸入信號檢測一次,把對應的值作為D0位數據。

  (4)再隔16個接收時鐘,對輸入信號檢測一次,把對應的值作為D1位數據,直到全部數據位都輸入。

  (5)檢驗奇偶檢驗位。

  (6)接收到規定的數據位個數和校驗位之后,通信接口電路希望收到停止位(邏輯1),若此時未收到邏輯1,說明出現了錯誤,在狀態寄存器中置“幀錯誤”標志;若沒有錯誤,對全部數據位進行奇偶校驗,無校驗錯時,把數據位從移位寄存器中取出送至數據輸入寄存器,若校驗錯,在狀態寄存器中置“奇偶錯”標志。

  (7)本幀信息全部接收完,把線路上出現的高電平作為空閑位。

  (8)當信號再次變為低時,開始進入下一幀的檢測。

  以上就是異步通信中數據發送和接收的全過程了。

1.3幾個概念

  為了更好的理解串口通信,我們還需要了解幾個串口通信當中的基本概念。

  (1)發送時鐘:發送數據時,首先將要發送的數據送入移位寄存器,然后在發送時鐘的控制下,將該并行數據逐位移位輸出。

  (2)接收時鐘:在接收串行數據時,接收時鐘的上升沿對接收數據采樣,進行數據位檢測,并將其移入接收器的移位寄存器中,最后組成并行數據輸出。

  (3)波特率因子:波特率因子是指發送或接收1個數據位所需要的時鐘脈沖個數。

?

2.串口接頭

  常用的串口接頭有兩種,一種是9針串口(簡稱DB-9),一種是25針串口(簡稱DB-25)。每種接頭都有公頭和母頭之分,其中帶針狀的接頭是公頭,而帶孔狀的接頭是母頭。9針串口的外觀如圖2所示。

圖2?DB-9外觀圖

  由圖2可以看出,在9針串口接頭中,公頭和母頭的管腳定義順序是不一樣,這一點需要特別注意。那么,這些管腳都有什么作用呢?9針串口和25針串口常用管腳的功能說明如圖3所示。

圖3?9針串口和25針串口常用管腳功能說明

3.RS-232C標準

  常用的串行通信接口標準有RS-232C、RS-422、RS-423和RS-485。其中,RS-232C作為串行通信接口的電氣標準定義了數據終端設備(DTE:data?terminal?equipment)和數據通信設備(DCE:data?communication?equipment)間按位串行傳輸的接口信息,合理安排了接口的電氣信號和機械要求,在世界范圍內得到了廣泛的應用。

3.1電氣特性

  RS-232C對電器特性、邏輯電平和各種信號功能都做了規定,如下:

  在TXD和RXD數據線上:

  (1)邏輯1為-3~-15V的電壓

  (2)邏輯0為3~15V的電壓

  在RTS、CTS、DSR、DTR和DCD等控制線上:

  (1)信號有效(ON狀態)為3~15V的電壓

  (2)信號無效(OFF狀態)為-3~-15V的電壓

  由此可見,RS-232C是用正負電壓來表示邏輯狀態,與晶體管-晶體管邏輯集成電路(TTL)以高低電平表示邏輯狀態的規定正好相反。

3.2信號線分配

  RS-232C標準接口有25條線,其中,4條數據線、11條控制線、3條定時線以及7條備用和未定義線。那么,這些信號線在9針串口和25針串口的管腳上是如何分配的呢?9針串口和25針串口信號線分配如圖4所示。

圖4?9針串口和25針串口信號線分配示意圖

  下面對這些信號線做個簡單的介紹。

  (1)數據裝置準備好(DSR),有效狀態(ON)表示數據通信設備處于可以使用狀態。

  (2)數據終端準備好(DTR),有效狀態(ON)表示數據終端設備處于可以使用狀態。

  這兩個設備狀態信號有效,只表示設備本身可用,并不說明通信鏈路可以開始進行通信了,能否開始進行通信要由下面的一些控制信號決定。

  (3)請求發送(RTS),用來表示數據終端設備(DTE)請求數據通信設備(DCE)發送數據。

  (4)允許發送(CTS),用來表示數據通信設備(DCE)已經準備好了數據,可以向數據終端設備(DTE)發送數據,是對請求發送信號RTS的響應。

  請求發送(RTS)和允許發送(CTS)用于半雙工的通信系統中,在全雙工的系統中,不需要使用請求發送(RTS)和允許發送(CTS)信號,直接將其置為ON即可。

  (5)數據載波檢出(DCD),用于表示數據通信設備(DCE)已接通通信鏈路,告知數據終端設備(DTE)準備接收數據。

  (6)振鈴指示(RI),當數據通信設備收到交換臺送來的振鈴呼叫信號時,使該信號有效(ON),通知終端,已被呼叫。

  (7)發送數據(TXD),數據終端設備(DTE)通過該信號線將串行數據發送到數據通信設備(DCE)。

  (8)接收信號(RXD),數據終端設備(DTE)通過該信號線接收從數據通信設備(DCE)發來的串行數據。

  (9)地線(SG、PG),分別表示信號地和保護地信號線。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/459002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/459002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/459002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jmeter上傳文件搞了一天,才搞定,沒高人幫忙效率就是低,趕緊記下來,以備后用...

jmeter上傳文件搞了一天,才搞定,沒高人幫忙效率就是低,趕緊記下來,以備后用 先用谷歌瀏覽器抓包,抓到的包類似這樣: 在jmeter里添加一個http請求,配置好參數,方法,端口&a…

自定義dialog

2019獨角獸企業重金招聘Python工程師標準>>> R.layout.layout_insert_dialog自定義布局 View mViewLayoutInflater.from(MainActivity.this).inflate(R.layout.layout_insert_dialog, null); AlertDialog.Builder dialognew AlertDialog.Builder (MainActivity.this…

js unescape 對應php的函數,php實現Javascript的escape和unescape函數

由于需要用到php調用js文件,在網上找了相關的資料,并改寫了相關的方法。php實現 Javascript的escape函數方法:function escape($str) {preg_match_all("/[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}|[…

字符數組,字符串、數字轉化

<p style"margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; line-height: 26px; word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋體, Arial; font-size: 16px;">//****************************************…

PE文件RV轉FOA及FOA轉RVA

/************************************************************************/ /* 功能:虛擬內存相對地址和文件偏移的轉換 參數&#xff1a;stRVA&#xff1a; 虛擬內存相對偏移地址 lpFileBuf: 文件起始地址 返回&#xff1a;轉換后的文件偏移地址 */ /*****************…

SurfaceView類透明背景設置

將SurfaceView背景設置為透明&#xff0c;主要添加以下幾句話就可以了&#xff1a; 在SurfaceView創建后設置一下下面的參數&#xff1a; setZOrderOnTop(true); getHolder().setFormat(PixelFormat.TRANSLUCENT); 還有在draw方法中繪制背景顏色的時候以下面的方式進行繪制就可…

oracle的env函數用法,env命令_Linux env 命令用法詳解:顯示系統中已存在的環境變量...

env命令用于顯示系統中已存在的環境變量&#xff0c;以及在定義的環境中執行指令。該命令只使用"-"作為參數選項時&#xff0c;隱藏了選項"-i"的功能。若沒有設置任何選項和參數時&#xff0c;則直接顯示當前的環境變量。如果使用env命令在新環境中執行指令…

網絡通信的工作原理

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 1、什么是計算機網絡&#xff1f; 計算機網絡是由兩臺或兩臺以上的計算機通過網絡設備…

Bossie Awards 2015: The best open source applicati

2019獨角獸企業重金招聘Python工程師標準>>> Read about more open source winners InfoWorlds Best of Open Source Awards for 2014 celebrate more than 100 open source projects, from the bottom of the stack to the top. Follow these links to more open s…

oracle中pga指什么,oracle學習SGA跟PGA理解

SGA&#xff1a;SystemGlobal Area是OracleInstance的基本組成部分&#xff0c;在實例啟動時分配;系統全局域SGA主要由三部分構成&#xff1a;數據庫緩沖區、日志緩沖區、共享池&#xff0c;還可能包含&#xff1a;大池&#xff0c;JAVA池&#xff0c;流池。注意點&#xff1a;…

oracle重做日志教程,Oracle教程:重做日志文件基本維護

重做日志文件最重要的用途就是用來恢復數據(其實你也可以用來logminer)&#xff0c;它記錄著system global area(sga)當中的database bu重做日志文件最重要的用途就是用來恢復數據(其實你也可以用來logminer)&#xff0c;它記錄著system global area(sga)當中的database buffer…

以太網,局域網,萬維網

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 以太網是一種通信協議標準 萬維網WWW 是 Internet 的多媒體信息查詢工具 以太網: 以…

java的自動類型轉換和強制類型轉換

在程序運行時&#xff0c;經常需要將一種數值類型進行轉換成另一種類型。下面給出了一個合法的轉換。數值之間的合法轉換上圖中有6個實心箭頭&#xff0c;表示無信息丟失的轉換&#xff0c;有三個虛箭頭&#xff0c;表示可能有精度丟失的轉換。例如123456789是一個大整數&#…

Class 泛型

Java Class 泛型的例子說明&#xff1a; http://blog.chinaunix.net/uid-1911213-id-3085866.html http://blog.163.com/sir_876/blog/static/1170522320121216273111/轉載于:https://www.cnblogs.com/yedu/p/4514016.html

java動態代理的實現

動態代理作為代理模式的一種擴展形式&#xff0c;廣泛應用于框架&#xff08;尤其是基于AOP的框架&#xff09;的設計與開發&#xff0c;本文將通過實例來講解Java動態代理的實現過程。友情提示&#xff1a;本文略有難度&#xff0c;讀者需具備代理模式相關基礎知識&#xff0c…

常見的網絡類型

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 我們經常聽到Internet網、星形網等名詞&#xff0c;它們表示什么&#xff1f;是怎樣分…

oracle放在內存里,oracle如中何把小表釘住在內存中

buffer_pool_defualtbuffer_pool_keepbuffer_pool_recycle如果要把表釘死在內存中&#xff0c;也就是把表釘在keep區。相關的命令為&#xff1a;alter table ..... storage(buffer_pool keep);這句命令把表示表如果緩存的話是緩存在keep區。可以通過語句&#xff1a;select tab…

C++基礎之this指針的詳解

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 關于C中的this指針&#xff0c;建議大家看看這篇文章&#xff0c;《C中的this指針》&a…

xcode 開發ios兼容性問題的上下黑邊 和 coco2d-x 游戲分辨率適配 ResolutionPolicy::FIXED_WIDTH 都會引起上下黑邊問題!!!...

1&#xff1a;Xcode6在iPhone5iOS7模擬器上編譯&#xff0c;上下有黑邊問題 問題描述&#xff1a; Xcode6環境下&#xff0c;對iPhone5或iPhone5s模擬器&#xff0c;在iOS7或iOS7.1下運行&#xff0c;屏幕上下有黑邊。在iOS8下沒問題。 問題分析&#xff1a; 這種熟悉的場景又出…

如何用參數化SQL語句污染你的計劃緩存

你的SQL語句的參數化總是個好想法。使用參數化SQL語句你不會污染你的計劃緩存——錯&#xff01;&#xff01;&#xff01;在這篇文章里我想向你展示下用參數化SQL語句就可以污染你的計劃緩存&#xff0c;這是非常簡單的&#xff01; ADO.NET-AddWithValue ADO.NET是實現像SQL …