




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、串口通信調試助手設計學 生: (宋體五號居中)指導教師: (宋體五號居中) (楷體五號居中)1 發展歷史和由來串口的出現是在1980年前后,數據傳輸率是115kbps230kbps。串口出現的初期 是為了實現連接計算機外設的目的,初期串口一般用來連接鼠標和外置Modem以及老式攝像頭和寫字板等設備。串口也可以應用于兩臺計算機(或設備)之間的互聯及數據傳輸。由于串口(COM)不支持熱插拔及傳輸速率較低,目前部分新主板和大部分便攜電腦已開始取消該接口。目前串口多用于工控和測量設備以及部分通信設備中。2 串口通信劃分種類串口通信的兩種最基本的方式:同步串行通信方式和異步串行通信方式。同步串行是指SP
2、I(Serial Peripheral interface)的縮寫,顧名思義就是串行外圍設備接口。SPI總線系統是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息,TRM450是SPI接口。異步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用異步接收/發送。UART是一個并行輸入成為串行輸出的芯片,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。 TTL電平是3.3V的,而RS232是負邏輯電平,它定義+5+12V為低電平,而-12-5V為高電平,MDS2710、MDS SD4、
3、EL805等是RS232接口,EL806有TTL接口。串行接口按電氣標準及協議來分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422與RS-485標準只對接口的電氣特性做出規定,不涉及接插件、電纜或協議。3 各類串口協議簡介3.1 各類串口的比較從其發展歷史、各自特點來介紹各種協議,RS232和RS485的區別和接法。 首先是發展歷史。最開始出現的串口通信協議是RS232,1962年發布的。由于其傳輸速度、單向傳遞、傳輸距離短等多方面的制約,因此使用受到限制。于是人們在RS232的基礎上做了相應的改進,提高了相應的傳輸速度、傳輸距離,于是出現了RS422的雛形,并
4、在工業上得到了相應的應用。但由于任然是單向傳輸的,使構成的網絡只能是單向的。既只能是主機給從機發送指令或數據,從機只能接受并處理相應的消息,不能反映相應的結果。于是人們又做了相應的調整。最后于1983年發布了RS485通信協議。 正如前面所說的。RS232協議是一種簡單的串口通信協議,也是最基本的。一般用在實驗室等短距離、對傳輸速度等要求不高的場合,并且與TTL電平不兼容。 RS422有了相應的提高。是一種單機發送,多機接收的平衡通信協議接口,傳輸速度最高可以達到10Mbps,傳輸距離最遠可達到4000英尺,并且在這條平衡總線上能最多帶10個從機,但是任然是單向的傳輸。 RS485是一種多點,
5、雙向通信的平衡通信協議接口。再RS422的基礎上增加了網絡中接點(多機)的數量和雙向通信能力,同時還增加了驅動器的傳輸能力和沖突保護特性,擴展了總線共模范圍。傳輸速度最高可以達到10Mbps,標準距離可以達到4000英尺,實際能達到3000米,并且在這條線上最多可以帶128個收發器。 RS232和RS485的區別: 1.傳輸速度不同。RS485可以達到10Mbps,高于RS232的速度。 2.電氣特性不同。RS485采用的是平衡驅動器和差分接收器的組合。RS485是輸出的是差分信號,抗共模干擾能力強。邏輯“1”是兩輸出信號的+(26)V,“0”是-(26)V表示。電氣信號低于RS232的電氣信
6、號,不容易損壞接口芯片,并且與TTL電平兼容。 3.傳輸距離不同。RS485標準距離為4000英尺,實際可以達到3000米。遠遠大于RS232的距離。 4.接收器數量不同。RS485接收器最多可以達到128個,即多站能力。而RS232只能是一個,即單站接點。 5.RS232是全雙工的通信協議,RS485是半雙工的通信協議。 接口方法: 一般RS232和RS485都采用屏蔽雙絞線傳輸。RS485和RS232都采用DB9的接頭3.2 各類串口的協議串行通信協議:計算機與外設或計算機之間的通信通常有兩種方式:并行通信和串行通信。并行通信指數據的各位同時傳送。并行方式傳輸數據速度快,但占用的通信線多,
7、傳輸數據的可靠性隨距離的增加而下降,只適用于近距離的數據傳送。串行通信是指在單根數據線上將數據一位一位地依次傳送。發送過程中,每發送完一個數據,再發送第二個,依此類推。接受數據時,每次從單根數據線上一位一位地依次接受,再把它們拼成一個完整的數據。在遠距離數據通信中,一般采用串行通信方式,它具有占用通信線少、成本低等優點。1、串行通信的基本概念 (1)同步和異步通信方式 串行通信有兩種最基本的通信方式:同步串行通信方式和異步串行通信方式。同步串行通信方式是指在相同的數據傳送速率下,發送端和接受端的通信頻率保持嚴格同步。由于不需要使用起始位和停止位,可以提高數據的傳輸速率,但發送器和接受器的成本較
8、高。異步串行通信是指發送端和接受端在相同的波特率下不需要嚴格地同步,允許有相對的時間時延,即收、發兩端的頻率偏差在10以內,就能保證正確實現通信。異步通信在不發送數據時,數據信號線上總是呈現高電平狀態,稱為空閑狀態(又稱MARK狀態)。當有數據發送時,信號線變成低電平,并持續一位的時間,用于表示發送字符的開始,該位稱為起始位,也稱SPACE狀態。起始位之后,在信號線上依次出現待發送的每一位字符數據,并且按照先低位后高位的順序逐位發送。采用不同的字符編碼方案,待發送的每個字符的位數不同,在5、6、7或8位之間選擇。數據位的后面可以加上一位奇偶校驗位,也可以不加,由編程指定。最后傳送的是停止位,一
9、般選擇1位、1.5位或2位。 (2)數據傳送方式 單工方式。單工方式采用一根數據傳輸線,只允許數據按照固定的方向傳送。圖8(a)中A只能作為發送器,B只能作為接收器,數據只能從A傳送到B,不能從B傳送到A。 半雙工方式。半雙工方式采用一根數據傳輸線,允許數據分時地在兩個方向傳送,但不能同時雙向傳送。圖8(b)中在某一時刻,A為發送器,B為接收器,數據從A傳送到B;而在另一個時刻,A可以作為接收器,B作為發送器,數據從B傳送到A。 全雙工方式。全雙工方式采用兩根數據傳輸線,允許數據同時進行雙向傳送。圖8(c)中A和B具有獨立的發送器和接收器,在同一時刻,既允許A向B發送數據,又允許B向A發送數據
10、。(3)波特率 波特率是指每秒內傳送二進制數據的位數,以b/s和bps(位/秒)為單位。它是衡量串行數據傳送速度快慢的重要指標和參數。計算機通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。 (4)串行通信的檢錯和糾錯 在串行通信過程中存在不同程度的噪聲干擾,這些干擾有時會導致在傳輸過程中出現差錯。因此在串行通信中對數據進行校驗是非常重要的,也是衡量通信系統質量的重要指標。檢錯,就是如何發現數據傳輸過程中出現的錯誤,而糾錯就是在發現錯誤后,如何采取措施糾正錯誤。誤碼率 誤碼率是指數據經傳輸后發生錯誤的位數與總傳輸位數之比。在計算機通信中,一
11、般要求誤碼率達到10-6數量級。誤碼率與通信過程中的線路質量、干擾、波特率等因素有關。 奇偶校驗 奇偶校驗是常用的一種檢錯方式。奇偶校驗就是在發送數據位最后一位添加一位奇偶校驗位(0或1),以保證數據位和奇偶校驗位中1的總和為奇數或偶數。若采用偶校驗,則應保證1的總數為偶數;若采用奇校驗,則應保證1的總和為奇數。在接受數據時,CPU應檢測數據位和奇偶校驗位中1的總數是否符合奇偶校驗規則,如果出現誤碼,則應轉去執行相應的錯誤處理服務程序,進行后續糾錯。 糾錯 在基本通信規程中一般采用奇偶校驗或方陣碼檢錯,以重發方式進行糾錯。在高級通信中一般采用循環冗余碼(CRC)檢錯,以自動糾錯方式來糾錯。一般
12、說來,附加的冗余位越多,檢測、糾錯能力就越強,但通信效率也就越低。2、串行通信接口標準 串行通信接口按電氣標準及協議來分包括RS-232、RS-422、RS485、USB等。 RS-232、RS-422與RS-485標準只對接口的電氣特性做出規定,不涉及接插件、電纜或協議。USB是近幾年發展起來的新型接口標準,主要應用于高速數據傳輸領域。 (1)RS-232串行接口 目前RS-232是PC機與通信工業中應用最廣泛的一種串行接口。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標準。RS-232采取不平衡傳輸方式,即所謂單端通信。 腳定義 RS-232物理接口標準可分成25芯和9芯D
13、型插座兩種,均有針、孔之分。其中TX(發送數據)、RX(接受數據)和GND(信號地)是三條最基本的引線,就可以實現簡單的全雙工通信。DTR(數據終端就緒)、DSR(數據準備好)、RTS(請求發送)和CTS(清除發送)是最常用的硬件聯絡信號。 RS-232接口定義及連線 RS-232/串口/異步口/com(通信)口 嚴格的講RS-232接口是DTE(數據終端設備)和DCE(數據通信設備)之間的一個接口。 遠程通信終端設備 DTE ( Date Terminal Equipment ) 數據通信設備 DCE ( Data Communcation Equipment ) DTE包括計算機、終端、串
14、口打印機等。(針輸出) DCE通常有調制解調器(MODEM)和某些交換機com口。(孔輸出) RS-232C 標準中提到的“發送”和“接收”,都是站在DTE立場立場上。 1. 電氣特性 TxD RxD 邏輯1(MARK)= -3v -15v 邏輯0(MARK)= +3v +15v RTS CTS DSR DTR DCD 等 信號有效(接通,ON狀態,正電壓)= +3v +15v 信號無效(斷開,OFF狀態,負電壓)= -3v -15v 與TTL以高低平表示邏輯狀態的規定不同。因此,為了能同計算機接口或終端的TTL器件連接,必須進行電平和邏輯關系的變換。廣泛采用集成電路轉換器件,MC1488、
15、SN75150(TTL->EIA)、MAX232(TTL<->EIA)。 2. 連接器的機械特性 DB-9連接器:AT機以后,不支持20MA電流環接口,使用DB-9,作為提供多若功能I/O卡或主板上COM1/COM2兩個串口的連接器。 電纜長度:通信速率低于20kb/s時,RS-232C直接連接最大15m。 最大傳輸距離:若不使用MODEM,碼元畸變小于4%的情況下,最大15m。 3.RS-232C的接口信號 常用的只有9根,標準25根,4條數據、11條控制線、3條定時、7條備用。 遠距離通信 1.采用MODEM(DCE)和電話網通信連接發送數據,只要通信鏈路已建立,就可傳送
16、信號。RTS/CTS可只用于半工發送/接收切換。 DTE獲CTS,通過TxD線向DCE發出串行信號。計算機向DCE“數據輸出寄存器”傳送新的數據。當對方DCE收到載波信號后,向對方DTE發出DCD信號。 2.采用專用電話通信:只使用2-8號信號線,不需要RI、DTR。 近距離通信 1.零MODEM(3線制) <1> RTS與CTS互聯:只要請示,立即得到允許。 <2> DTR與DSR互聯:只要本端準備好,立即認為本端可以接收。 2.零MODEM標準連接 <1> 當甲方DTE準備好,發出DTR信號,該信號直接聯至乙方的RI和DSR,即只要甲方準備好,乙方立即產
17、生呼叫RI有效,并用時準備好DSR,盡管乙方并不存在DCE。 <2> 甲方RTS和CTS相連,并與乙方DCD互連。即:一旦甲方請求,立即得到允許CTS,同時乙方DCD有效,即檢測到載波信號。 <3> 甲方TxD與乙方RxD相連,一發一收。 - DTE 9芯 25芯 25芯 9芯 DCE 終 端 3 02 <-> 02 3 通 信 針輸出 2 03 <-> 03 2 針輸出 7 04 <-> 04 7 8 05 <-> 05 8 6 06 <-> 06 6 5 07 <-> 07 5 1 08 <
18、;-> 08 1 4 20 <-> 20 4 9 22 <-> 22 9 按照RS232標準,傳輸速率一般不超過20kbps,傳輸距離一般不超過15M。實際使用時通信速率最高可達115200bps。 RS232串行接口基本接線原則 設備之間的串行通信接線方法,取決于設備接口的定義。設備間采用RS232串行電纜連接時有兩類連接方式: 直通線:即相同信號(Rxd對Rxd、Txd對Txd)相連,用于DTE(數據終端設備)與DCE(數據通信設備)相連。如計算機與MODEM(或DTU)相連。 交叉線:即不同信號(Rxd對Txd、Txd對Rxd)相連,用于DTE與DTE相連。
19、 RS232的三種接線方式 三線方式:即兩端設備的串口只連接收、發、地三根線。一般情況下,三線方式即可滿足要求,如監控主機與采集器及大部分智能設備之間相連。 4 所使用到的技術分析在VC+中有兩種方法可以進行串口通訊。一種是利用Microsoft公司提供的ActiveX 控件 Microsoft Communications Control。另一種是直接用VC+訪問串口。下面將簡述 這兩種方法。 一、 Microsoft Communications Control Microsoft公司在WINDOWS中提供了一個串口通訊控件,用它,我們可以很簡單 的利用串口進行通訊。在使用它之前,應將控件
20、加在應用程序的對話框上。然后再用 ClassWizard 生成相應的對象?,F在我們可以使用它了。 該控件有很多自己的屬性,你可以通過它的屬性窗口來設置,也可以用程序設置 。推薦用程序設置,這樣更靈活。 SetCommPort:指定使用的串口。 GetCommPort:得到當前使用的串口。 SetSettings:指定串口的參數。一般設為默認參數"9600,N,8,1"。這樣方便 與其他串口進行通訊。 GetSettings:取得串口參數。 SetPortOpen:打開或關閉串口,當一個程序打開串口時,另外的程序將無法使 用該串口。 GetPortOpen:取得串口狀態。 G
21、etInBufferCount:輸入緩沖區中接受到的字符數。SetInPutLen:一次讀取輸入緩沖區的字符數。設置為0時,程序將讀取緩沖區的 全部字符。 GetInPut:讀取輸入緩沖區。 GetOutBufferCount:輸出緩沖區中待發送的字符數。 SetOutPut:寫入輸出緩沖區。 一般而言,使用上述函數和屬性就可以進行串口通訊了。以下是一個范例。 #define MESSAGELENGTH 100 class CMyDialog : public CDialog protected: VARIANT InBuffer; VARIANT OutBuffer; CMSComm m_C
22、om; public: . BOOL CMyDiaLog:OnInitDialog() CDialog:OnInitDialog(); m_Com.SetCommPort(1); if (!m_Com.GetPortOpen() m_Com.SetSettings("57600,N,8,1"); m_Com.SetPortOpen(true); m_Com.SetInBufferCount(0); SetTimer(1,10,NULL); InBuffer.bstrVal=new unsigned shortMESSAGELENGTH; OutBuffer.bstrVal=
23、new unsigned shortMESSAGELENGTH; OutBuffer.vt=VT_BSTR; return true; void CMyDiaLog:OnTimer(UINT nIDEvent) if (m_Com.GetInBufferCount()>=MESSAGELENGTH) InBuffer=m_Com.GetInput();/ handle the InBuffer. / Fill the OutBuffer. m_Com.SetOutput(OutBuffer); CDialog:OnTimer(nIDEvent); 用該控件傳輸的數據是UNICODE格式。
24、關于UNICODE和ANSI的關系和轉換請參 看MSDN。 二、 直接用VC+訪問串口。 在VC+中,串口和磁盤文件可以統一的方式來簡單讀寫。這兩者幾乎沒有什么不 同,只是在WINDOWS 9X下磁盤文件只能做同步訪問,而串口只能做異步訪問。 CreateFile:用指定的方式打開指定的串口。通常的方式為 m_hCom = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
25、 m_hCom為文件句柄。GENERIC_READ | GENERIC_WRITE指定可以對串口進行讀 寫操作。第三個參數0表示串口為獨占打開。OPEN_EXISTING表示當指定串口不存在 時,程序將返回失敗。 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED則表 示文件屬性。當打開串口時,必須指定 FILE_FLAG_OVERLAPPED,它表示文件或設 備不會維護訪問指針,則在讀寫時,必須使用OVERLAPPED 結構指定訪問的文件偏移量。 ReadFile:讀取串口數據。 WriteFile:向串口寫數據。 CloseHandle:關閉串口。 C
26、OMMTIMEOUTS:COMMTIMEOUTS主要用于串口超時參數設置。 COMMTIMEOUTS結構如下: typedef struct _COMMTIMEOUTS DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; COMMTIMEOUTS,*LPCOMMTIMEOUTS; ReadIntervalTimeout:兩字符之
27、間最大的延時,當讀取串口數據時,一旦兩個字符傳輸的時間差超過該時間讀取函數將返回現有的數據。設置為0表示該參數不起作用 。 ReadTotalTimeoutMultiplier:讀取每字符間的超時。 ReadTotalTimeoutConstant:一次讀取串口數據的固定超時。所以在一次讀取串口的操作中超時為ReadTotalTimeoutMultiplier乘以讀取的字節數再加上 ReadTotalTimeoutConstant。將ReadIntervalTimeout設置為MAXDWORD,并將 ReadTotalTimeoutMultiplier 和ReadTotalTimeoutCon
28、stant設置為0,表示讀取操作將立即 返回存放在輸入緩沖區的字符。 WriteTotalTimeoutMultiplier:寫入每字符間的超時。 WriteTotalTimeoutConstant:一次寫入串口數據的固定超時。所以在一次寫入串口 的操作中,其超時為WriteTotalTimeoutMultiplier乘以寫入的字節數再加上 WriteTotalTimeoutConstant。SetCommTimeouts函數可以設置某設備句柄的超時參數,要得到某設備句柄的超 時參數可以用GetCommTimeouts函數。 DCB:DCB結構主要用于串口參數設置。其中下面兩個是比較重要的屬性
29、。 BaudRate:串口的通訊速度。一般設置為9600。 ByteSize:字節位數。一般設置為8。 DCB結構可以用SetCommState函數來設置,并可以用GetCommState來得到現有串 口的屬性。 SetupComm:設置串口輸入、輸出緩沖區。 OVERLAPPED:保存串口異步通訊的信息。具體結構如下: typedef struct _OVERLAPPED DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; OVERLAPPED; Internal,Interna
30、lHigh是保留給系統使用的,用戶不需要設置。 Offset,OffsetHigh是讀寫串口的偏移量,一般設置OffsetHigh為NULL,可以支持 2GB數據。&m_OverlappedRead ); if( !bReadStatus ) if( GetLastError() = ERROR_IO_PENDING ) WaitForSingleObject( m_OverlappedRead.hEvent, 2000 ); return
31、0;dwBytesRead; return 0; return dwBytesRead; DWORD CSerial:SendData( const char *buffer, DWORD dwBytesWritten) if( !m_bOpened | m_hComDev = NULL ) return( 0 ); BOOL
32、160;bWriteStat; bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, &dwBytesWritten, &m_OverlappedWrite ); if( !bWriteStat) if ( GetLastError() = ERROR_IO_PENDING ) WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ); return
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 委托冷凍協議書范本
- 林地調解協議書模板
- 汽車代工協議書模板
- 平臺運營管理協議書
- 私企聘用員工協議書
- 投資合伙協議書樣本
- 醫院供貨誠信協議書
- 童裝租賃協議書范本
- 社區定點醫療協議書
- 委托養老培訓協議書
- 2024年司法考試歷年證據法試題
- 深入解析SAS(數據處理、分析優化與商業應用)
- CJJ 122-2017 游泳池給水排水工程技術規程
- 2024年咨詢工程師之工程項目組織與管理題庫含完整答案(歷年真題)
- (正式版)JBT 14682-2024 多關節機器人用伺服電動機技術規范
- 國內外化工發展情況及安全形勢
- 2018年高考數學全國1卷第12題出處及變式
- 設備維修費用月度分析報告
- 土豆的介紹課件
- 人民法院第一審行政判決書及范例
- 南京大學儀器分析習題集
評論
0/150
提交評論