嵌入式串口通信的設(shè)計講解_第1頁
嵌入式串口通信的設(shè)計講解_第2頁
嵌入式串口通信的設(shè)計講解_第3頁
嵌入式串口通信的設(shè)計講解_第4頁
嵌入式串口通信的設(shè)計講解_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、*實(shí)踐教學(xué)*蘭州理工大學(xué)計算機(jī)與通信學(xué)院2013年春季學(xué)期嵌入式系統(tǒng)開發(fā)技術(shù)課程設(shè)計題 目:嵌入式串口通信的設(shè)計專業(yè)班級:通信工程三班姓 名:學(xué) 號:指導(dǎo)教師:張璽君成 績:隨著In ternet的發(fā)展和后PC時代的到來,嵌入式系統(tǒng)以其可靠性強(qiáng)、體積 小、專用性、成本低等特性得到日益廣泛的應(yīng)用。目前嵌入式系統(tǒng)技術(shù)已經(jīng)成為了最熱門的技術(shù)之一。與此同時,一個獨(dú)立的嵌入式系統(tǒng)的功能缺陷也逐漸暴露 出來。新一代嵌入計算系統(tǒng)的功能集成和應(yīng)用模式使之迅速向網(wǎng)絡(luò)化嵌入計算的 方向發(fā)展,標(biāo)準(zhǔn)和統(tǒng)一的TCP/IP通信協(xié)議是獨(dú)立于任何廠家的硬件的,因此嵌 入環(huán)境下的實(shí)時網(wǎng)絡(luò)通信成為嵌入計算技術(shù)研究的重點(diǎn)和熱點(diǎn)。本

2、文通過基于 2410F的嵌入式串口通信的實(shí)現(xiàn),按照嵌入式系統(tǒng)的軟、硬件結(jié)構(gòu)組成,較為詳細(xì) 地介紹了串口通信的硬件電路和軟件實(shí)現(xiàn)方法。關(guān)鍵詞:嵌入式 串口通信 2410F目錄前言 1一、串口通信概述 21.1串口通信的原理 21.2串口通信的開發(fā)工具 21.2.1 CC2530 功耗 21.2.2 ARM 簡介 31.2.3 Linux 系統(tǒng)簡介 31.3串口通信的基本任務(wù) 41.4串口通信協(xié)議及實(shí)現(xiàn) 4二、RS-232C標(biāo)準(zhǔn) 62.1引腳定義 62.2字符(幀)格式 72.3握手協(xié)議 82.4 雙機(jī)互連方式 102.4.1無硬件握手情況 102.4.2 DTR 和 DSRB手情況 10三、串口

3、驅(qū)動程序設(shè)計 123.1串口操作需要的頭文件 123.2打開串口 123.3串口設(shè)置 123.4串口讀寫 153.5關(guān)閉串口 16四、源程流程圖 18五、源程序代碼 19參考文獻(xiàn) 20總結(jié) 22、八 、-前言 嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),軟硬件可定制, 適用于不同應(yīng)用 場合,對功能,可靠性,成本,體積,功耗有嚴(yán)格要求的專用計算機(jī)系統(tǒng)。它一般由嵌入式 微處理器,外圍硬件設(shè)備,嵌入式操作系統(tǒng),用戶應(yīng)用程序 4 個部分組成。用于實(shí)現(xiàn)對其他 設(shè)備的控制,監(jiān)視或管理等功能。嵌入式系統(tǒng)已經(jīng)廣泛應(yīng)用于科學(xué)研究,工業(yè)控制,軍事技 術(shù),交通通信,醫(yī)療衛(wèi)生,消費(fèi)娛樂等領(lǐng)域,人們常用的手機(jī),PDA

4、汽車,智能家電,GPS等均是嵌入式系統(tǒng)的典型代表。串口通信是簡單嵌入式系統(tǒng)的一個應(yīng)用, 串口通信是指外設(shè)和計算機(jī)間, 通過數(shù)據(jù)信號 線 、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少, 在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)?。一、串口通信概述所謂串口通信,是指外設(shè)和計算機(jī)間使用一根數(shù)據(jù)信號線(另外需要地線),數(shù)據(jù)在一 根數(shù)據(jù)信號線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。串口傳輸是二進(jìn)制代碼序列在一條信道上以位(元碼)為單位,按時間順序且按位傳輸 的通信方式。串行傳輸時,發(fā)送端按位發(fā)送,接收端按位接受,同時還要對所傳輸?shù)奈患右?確

5、認(rèn),所以收發(fā)雙方要采取同步措施,否則接受端將不能正確區(qū)分出所傳輸?shù)臄?shù)據(jù)。串口通信不但能實(shí)現(xiàn)計算機(jī)與嵌入式開發(fā)板之間的數(shù)據(jù)傳輸,而且還能實(shí)現(xiàn)計算機(jī)對嵌 入式開發(fā)板的控制。若采用普通單片機(jī),對外部設(shè)備的訪問就需要利用復(fù)雜的匯編語言進(jìn)行編 程或者使用C51自己編寫設(shè)備的初始化以及讀寫訪問程序,這樣的過程不僅復(fù)雜,而且不利于 大規(guī)模的開發(fā)和設(shè)計。ARM與8051等普通單片機(jī)相比,具有開發(fā)簡單、靈活,而且性能穩(wěn)定、 功能易于擴(kuò)展等一系列優(yōu)勢,因而在汽車電子、手持設(shè)備、無線領(lǐng)域和航空航天等嵌入式系統(tǒng) 中得到廣泛的應(yīng)用。將Linux移植到ARM嵌入式處理器后,可以利用操作系統(tǒng)中提供的系統(tǒng)調(diào)用把串口及其 他外

6、設(shè)當(dāng)成普通文件進(jìn)行操作,讀寫方便,因此進(jìn)行相應(yīng)開發(fā)可以提高系統(tǒng)編程效率,而且還 可以簡化調(diào)試的復(fù)雜程度。1.1串口通信的原理串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)從 CPU經(jīng)過串行端口 發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。串口 是系統(tǒng)資源的一部分,應(yīng)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(tǒng)提出申請要 求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。1.2串口通信的開發(fā)工具本次開發(fā)采用的硬件平臺是利用 OURS-IOTV2-253實(shí)驗箱和C語言來實(shí)現(xiàn)本次系統(tǒng)的 開發(fā)。1.2.1 CC2530 功耗CC2530使用不同的運(yùn)

7、行模式或功耗模式以允許低功耗運(yùn)行。超低功耗是通過關(guān)閉模塊電 源以避免靜態(tài)功耗以及通過使用時鐘門控和關(guān)閉振蕩器來減少動態(tài)功耗而獲得的。CC2530有4個功耗模式,被稱為PM0 PM1 PM2和 PM3 PM0是激活模式而PM3具有最低功耗。PM0全功能模式。連接到數(shù)字內(nèi)核的電壓調(diào)整器打開。16MHz RCS蕩器或32MHz晶體振蕩器運(yùn)行或者它們同時運(yùn)行。32.753KHz RC振蕩器或32.768KHZ晶體振蕩器運(yùn)行。PM1連接到數(shù)字部分的電壓調(diào)整器打開。16MHzC振蕩器和32MHz晶體振蕩器都不運(yùn)行。 32.753KHz RC振蕩器或32.768KHz晶體振蕩器運(yùn)行。在產(chǎn)生復(fù)位、外部中斷或當(dāng)

8、睡眠定時器 到期時系統(tǒng)將返回到PM0PM2連接到數(shù)字內(nèi)核的電壓調(diào)整器關(guān)閉。16MHz RC振蕩器和32MHz晶體振蕩器都不運(yùn) 行。32.753KHZ RC振蕩器或32.768KHZ晶體振蕩器運(yùn)行。在產(chǎn)生復(fù)位、外部中斷或當(dāng)睡眠定 時器到期時系統(tǒng)將返回到PM0PM3連接到數(shù)字內(nèi)核的電壓調(diào)整器關(guān)閉。沒有振蕩器運(yùn)行。在產(chǎn)生復(fù)位或外部中斷時系 統(tǒng)將返回到PM0PM0是全功能模式,在該模式下,CPU片內(nèi)外設(shè)和RF收發(fā)器都處于激活狀態(tài),數(shù)字電 壓調(diào)整器打開。該模式也被稱為激活模式時。1.2.2 ARM 簡介ARM(Advaneed RISC Machines),既可以認(rèn)為是一個公司的名字,也可以認(rèn)為是對一類

9、 微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。1991年ARM公司成立于英國劍橋,主要出售芯片設(shè)計技術(shù)的授權(quán)。目前,采用 ARM技術(shù)知識產(chǎn)權(quán)(IP)核的微處理器,即通常所說的 ARMS處理器,已遍及工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無線系統(tǒng)、軍用 系統(tǒng)等各類產(chǎn)品市場,基于 ARM技術(shù)的微處理器應(yīng)用約占據(jù)了 32位RISC微處理器70%以 上的市場份額,ARM技術(shù)正在逐步滲入到我們生活的各個方面。ARM公司是專門從事基于RISC 技術(shù)芯片設(shè)計開發(fā)的公司,作為知識產(chǎn)權(quán)供應(yīng)商,本身不直接從事芯片生產(chǎn),靠轉(zhuǎn)讓設(shè)計許 可,由合作公司生產(chǎn)各具特色的芯片, 世界各大半導(dǎo)體生產(chǎn)商從 ARM公司購買

10、其ARM微處理 器核,根據(jù)各自不同的應(yīng)用領(lǐng)域,加入適當(dāng)?shù)耐鈬娐?,從而形成自己的ARM微處理器芯片進(jìn)入市場。目前全世界有幾十家大的半導(dǎo)體公司都使用 ARM公司的授權(quán),因此既使得ARM技 術(shù)獲得更多的第三方工具、制造、軟件的支持,又使整個系統(tǒng)成本降低,使產(chǎn)品更容易進(jìn)入 市場并被消費(fèi)者所接受,更具有競爭力。ARM微處理器一般具有如下特點(diǎn):(1) 體積小、低功耗、低成本、高性能;(2) 支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容 8/16位器件;(3) 大量使用寄存器,指令執(zhí)行速度更快;(4) 大多數(shù)數(shù)據(jù)操作都在寄存器中完成;(5) 尋址方式靈活簡單,執(zhí)行效率高;(6) 指令長

11、度固定。1.2.3 Linux 系統(tǒng)簡介Linux是一類Unix計算機(jī)操作系統(tǒng)的統(tǒng)稱。Linux操作系統(tǒng)也是自由軟件和開放源代 碼發(fā)展中最著名的例子。Linux 一般有四個主要部分:內(nèi)核、Shell、文件結(jié)構(gòu)和實(shí)用工具。(1) Linux 內(nèi)核內(nèi)核是系統(tǒng)的心臟,是運(yùn)行程序和管理像磁盤和打印機(jī)等硬件設(shè)備的核心程序。它從用 戶那里接受命令并把命令送給內(nèi)核去執(zhí)行。(2)Linux ShellShell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。它接收用戶輸 入的命令并把它送入內(nèi)核去執(zhí)行。實(shí)際上Shell是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內(nèi)核。不僅 如此,Shell有

12、自己的編程語言用于對命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點(diǎn),比如它也有循環(huán)結(jié)構(gòu)和分支控制結(jié)構(gòu)等,用這種編程語言編寫的Shell程序與其他應(yīng)用程序具有同樣的效果。(3)Linux文件結(jié)構(gòu)文件結(jié)構(gòu)是文件存放在磁盤等存儲設(shè)備上的組織方法。主要體現(xiàn)在對文件和目錄的組織 上。目錄提供了管理文件的一個方便而有效的途徑。我們能夠從一個目錄切換到另一個目錄,而且可以設(shè)置目錄和文件的權(quán)限,設(shè)置文件的共享程度。使用Linux,用戶可以設(shè)置目錄和文件的權(quán)限,以便允許或拒絕其他人對其進(jìn)行訪問。(4)Linux實(shí)用工具標(biāo)準(zhǔn)的Linux系統(tǒng)都有一套叫做實(shí)用工具的

13、程序,它們是專門的程序,例如編輯器、執(zhí) 行標(biāo)準(zhǔn)的計算操作等。用戶也可以產(chǎn)生自己的工具。1.3串口通信的基本任務(wù)(1)實(shí)現(xiàn)數(shù)據(jù)格式化:因為來自CPU的是普通的并行數(shù)據(jù),所以,接口電路應(yīng)具有實(shí)現(xiàn)不 同串行通信方式下的數(shù)據(jù)格式化的任務(wù)。 在異步通信方式下,接口自動生成起止式的幀數(shù)據(jù)格 式。在面向字符的同步方式下,接口要在待傳送的數(shù)據(jù)塊前加上同步字符。(2)進(jìn)行串-并轉(zhuǎn)換:串行傳送,數(shù)據(jù)是一位一位串行傳送的,而計算機(jī)處理數(shù)據(jù)是并行 數(shù)據(jù)。所以當(dāng)數(shù)據(jù)由計算機(jī)送至數(shù)據(jù)發(fā)送器時,首先把串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)才能送入計算機(jī) 處理。因此串并轉(zhuǎn)換是串接口電路和的重要任務(wù)。(3) 控制數(shù)據(jù)傳輸速率:串行通信接口電路應(yīng)

14、具有對數(shù)據(jù)傳輸速率-波特率進(jìn)行先擇 和控制的能力。(4)進(jìn)行錯誤檢測:在發(fā)送接口電路對傳送的字符數(shù)據(jù)自動生成奇偶校驗位或其他校驗 碼。在接收時,接口電路檢查字符的奇偶校驗或其他檢驗碼,確定是否發(fā)生傳送錯誤。(5)進(jìn)行TTL與EIA電平轉(zhuǎn)換:CPU和終端均采用TTL電平及正邏輯,它們與EIA采用 的電平及負(fù)邏輯不兼容,需在接口電路中進(jìn)行轉(zhuǎn)換。1.4串口通信協(xié)議及實(shí)現(xiàn)串行端口的本質(zhì)功能是作為 CPU和串行設(shè)備間的編碼轉(zhuǎn)換器,一般微機(jī)內(nèi)都配有通信適 配器,使計算機(jī)能夠與其他具有 RS-232C串口的計算機(jī)或設(shè)備進(jìn)行通信。本系統(tǒng)主要目的是實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)之間的近距離串行通信,采用的宿主機(jī)是In te

15、l Centrino架構(gòu)的RedHat Linux 9.03環(huán)境PC機(jī),而目標(biāo)機(jī)是ARM架構(gòu)的開發(fā)板。本系統(tǒng)中目標(biāo)機(jī)開發(fā)板的內(nèi)核采用的是三星的S3C2410 ,該開發(fā)板采用核心板加底板的模式,核心板接口采用DIMM200標(biāo)準(zhǔn)連接器,工作非??煽?可穩(wěn)定運(yùn)行在203 MHz的時鐘頻 率下。其外設(shè)非常豐富,功能強(qiáng)大,完全可以滿足設(shè)計需要。串口線采用常用的RS-232C型接口模式,能實(shí)現(xiàn)計算機(jī)與開發(fā)板間的數(shù)據(jù)傳輸與控制。嵌入式串口通信采用EIA RS-232C標(biāo)準(zhǔn)。RS-232C 標(biāo)準(zhǔn)RS-232C是1969年由電子工業(yè)協(xié)會(EIA)公布的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)的用途是定義數(shù)據(jù)終端設(shè)備 DTE (Data T

16、erminal Equipment )與數(shù)據(jù)通信設(shè)備 DCE(Data Communication Equioment)的接口特性。數(shù)據(jù)終端設(shè)備就是連接通信兩端設(shè)備的連線(如空MODEM)或其他設(shè)備。RS-232C標(biāo)準(zhǔn)的構(gòu)架如圖2.1所示。(數(shù)據(jù)終端設(shè)備DTE (數(shù)據(jù)通信設(shè)備DCE (數(shù)據(jù)通信設(shè)備DCE (數(shù)據(jù)終端設(shè)備DTE計算機(jī)A1 MMO通信線路ODDEEMMRS-232CRS-232CC忑/ylj 丫 巴 口 | o圖2.1 RS-232C標(biāo)準(zhǔn)的構(gòu)架計算機(jī)B電氣特性RS-232C采用非歸零、雙極性編碼,且使用負(fù)邏輯規(guī)定的邏輯電平: 輯“1 ”。+5+15V規(guī)定為邏輯“ 0 ”。信號電平與

17、TTL電平不兼容,-15-5V規(guī)定為邏所以需要電平轉(zhuǎn)換電路(通常使用MAX3232轉(zhuǎn)換)。電平轉(zhuǎn)換電路如圖2.2所示。圖2.2 RS-232C的電平轉(zhuǎn)換電路2.1引腳定義目前廣泛的DB9引腳定義如圖2.3所示。信號引腳定義的說明見表 2.1GND5DTR 4TXD 3RXD 2DCD 19 RIO8 CTSO7 RTSO6 DSR圖2.3 DB9引腳定義9針串口 DB9針號功能說明縮寫1輸入,數(shù)據(jù)載波檢測DCD2輸入,接收數(shù)據(jù)RXD3輸出,發(fā)送數(shù)據(jù)TXD4輸出,DTE準(zhǔn)備就緒DTR5信號地GND6輸入,MODE準(zhǔn)備就緒DSR7輸出,請求發(fā)送RTS8輸入,允許發(fā)送CTS9輸入,振鈴指示DELL表

18、2.1 DB9引腳說明2.2字符(幀)格式RS-232C采用起止式異步通信協(xié)議,其特點(diǎn)是一個字符接著一個字符進(jìn)行傳輸,并且傳輸一個字符總是以起始位開始,以停止位結(jié)束,字符之間沒有固定的時間間隔要求。其傳輸格式如圖2.4所示,每一個字符的前面都有一位起始位(低電平,邏輯“ 0”),字符本身有58位數(shù)據(jù)位,接著字符后面是一位校驗碼(也可以沒有校驗碼),最后是停止位。停止位后面是不定長度的空閑位。停止位和空閑位都規(guī)定為高電平(邏輯值“1”),這樣就能保證起始位開始處一定有一個下跳沿,便于接受方識別。校驗位(可以 沒有)的間隔圖2.4串行傳輸?shù)墓ぷ髟硎疽鈭D從圖2.4中可以看出,這種格式是靠起始位和停

19、止位來實(shí)現(xiàn)字符的界定或同步的, 故稱為起止式協(xié)議。沒有統(tǒng)一的時鐘,沒有同步字符,依靠起始位和停止位標(biāo)識每一幀,傳 輸時,數(shù)據(jù)的地位在前,高位在后。起始位實(shí)際上是作為同步信號附加進(jìn)來的,當(dāng)它變?yōu)榈碗娖綍r,告訴接受方傳輸開始, 后面接著是數(shù)據(jù)位;而停止位則標(biāo)志一個字符的結(jié)束。這樣就為通信雙方提供了何時開始收發(fā)、何時結(jié)束的標(biāo)志。傳輸開始前,收發(fā)雙方把所采用的字符格式(包括字符的數(shù)據(jù)位長度、 停止位位數(shù)、有無校驗位以及是奇校驗還是偶校驗等)和數(shù)據(jù)的傳輸速率進(jìn)行統(tǒng)一規(guī)定。傳 輸開始后,接收設(shè)備不斷地檢測線路,看是否有起始位到來。當(dāng)收到一系列的“T(停止位或空閑位)之后,檢測到一個下跳沿(由“1”變?yōu)椤?

20、0”),說明起始位出現(xiàn),起始位經(jīng)確認(rèn)后,就開始接收所規(guī)定的數(shù)據(jù)位和奇偶校驗位以及停止位。然后去掉停止位,對數(shù)據(jù)位進(jìn) 行串并轉(zhuǎn)換,并且經(jīng)奇偶校驗無誤后,才算正確地接收到一個字符。一個字符接收完畢,接 收設(shè)備又繼續(xù)測試線路,監(jiān)視“0”電平的到來和下一位字符的開始,直到全部數(shù)據(jù)傳輸完畢 2.3握手協(xié)議RS-232C標(biāo)準(zhǔn)除了規(guī)定的字符格式和通信波特率以外,還在數(shù)據(jù)終端設(shè)備DTE和數(shù)據(jù)通信設(shè)備DCE之間定義了一套握手協(xié)議。握手協(xié)議的過程如圖2.5所示。數(shù)據(jù)終端設(shè)備 DTE 本地MODEM遠(yuǎn)程MODEM遠(yuǎn)程DTE 圖2.5 DTE與DCE的握手協(xié)議過程 DTR數(shù)據(jù)終端設(shè)備DTE準(zhǔn)備就緒。DTE加電并能正確

21、實(shí)現(xiàn)通信時,向 DCE發(fā)出DTR 信號。 DSR數(shù)據(jù)通信設(shè)備DCE準(zhǔn)備就緒。MODE加電并能正確執(zhí)行通信功能時,DTE發(fā)出 DSR言號。 RTS請求發(fā)送。當(dāng)DTE有數(shù)據(jù)需要向另一遠(yuǎn)程DTE傳輸時,DTE在檢測DSR有效 時向本地MODE發(fā)出RTS信號。本地MODE檢測到RTS有效,然后根據(jù)目的電話號碼向遠(yuǎn)程 MODE發(fā)出呼叫。遠(yuǎn)程MODE收到該呼叫,發(fā)出回答載波信號。本地 MODE接受到此載波信 號,然后向遠(yuǎn)程MODE發(fā)出原載波信號進(jìn)行確認(rèn),同時向 DTE發(fā)出數(shù)據(jù)載波信號DCD DCD數(shù)據(jù)載波信號檢測。由MODE發(fā)向數(shù)據(jù)終端設(shè)備DTE表示已檢測到對方載 波信號。 CTS允許發(fā)送,當(dāng)一個 MOD

22、E辨認(rèn)出對方MODE已經(jīng)準(zhǔn)備接收時,使用 CTSB號通知自己的DTE表示這個通信通路已經(jīng)做好數(shù)據(jù)傳輸?shù)臏?zhǔn)備,允許DTE進(jìn)行數(shù)據(jù)發(fā)送。至此,通信鏈路建立,可以通信。 RI :振鈴指示。如果MODE具有自動應(yīng)答能力,當(dāng)對方呼叫傳來時, MODE向 DTE 發(fā)出該信號,指示此呼叫。在電話呼叫振鈴結(jié)束后, MODE在DTE已準(zhǔn)備好的情況下(即DTR 有效),立即向?qū)Ψ阶詣討?yīng)答。2.4 雙機(jī)互連方式雙機(jī)可以利用RS-232C通信接口進(jìn)行直接互連(數(shù)據(jù)終端設(shè)備 DTE到DTE,即空MODEM 連接。這種形式在嵌入式系統(tǒng)中應(yīng)用極為廣泛。由于RS-232C標(biāo)準(zhǔn)中有兩對硬件握手協(xié)議的引線:DTR和DSR RTS

23、和CTS根據(jù)應(yīng)用握手協(xié)議的機(jī)制不同,可分為 3種情況:無硬件握手、DTR和DSRg手、RTS和 CTS握手。 2.4.1無硬件握手情況DTETXDRXD計GND算機(jī)B無硬件握手的雙機(jī)互連如圖2.6所示。DTETXD計RXD算GND機(jī)A圖2.6無握手的雙機(jī)互連無硬件握手的連線最簡單,只需要 3根線,應(yīng)用比較多。但通信不可靠,接收緩沖區(qū)容 易溢出。2.4.2 DTR和DSF握手情況DTR和DSRg手的雙機(jī)互連如圖2.7所示若計算機(jī)A已經(jīng)準(zhǔn)備就緒,則使DTR有效。計算機(jī)B通過采集DS算機(jī)A圖2.7 DTR和 DSRB手的雙機(jī)互連已經(jīng)做好接收數(shù)據(jù)的準(zhǔn)備,可以發(fā)送數(shù)據(jù)。若計算機(jī)A為準(zhǔn)備好,則DTR無效,

24、計算機(jī)B通過采集DSR得知計算機(jī)A尚未做好接收數(shù)據(jù)的準(zhǔn)備,停止發(fā)送數(shù)據(jù)。2.4.3RTS和CTS握手情況RTS和CTSB手的雙機(jī)互連如圖2.8所示。DTE計算 機(jī)ATXD RXD GNDRTSCTSDTETXDRXD計GND算算機(jī)RTSBCTS圖2.8 RTS和CTS握手的雙機(jī)互連計算機(jī)B通過采集CTS得知計算機(jī)A已 A未準(zhǔn)備好,則RTS無效,計算機(jī)B通過 停止發(fā)送數(shù)據(jù)。利用RTS和CTS握手進(jìn)行發(fā)送和接收數(shù)據(jù)的過程如下 (設(shè)計算機(jī)A接收、計算機(jī)B發(fā) 送):若計算機(jī)A已經(jīng)準(zhǔn)備就緒,則使RTS有效 經(jīng)做好接收數(shù)據(jù)的準(zhǔn)備,可以發(fā)送數(shù)據(jù)。若計算機(jī) 采集CTS得知計算機(jī)A尚未做好接收數(shù)據(jù)的準(zhǔn)備,三、串

25、口驅(qū)動程序設(shè)計由于嵌入式系統(tǒng)是一個受資源限制的系統(tǒng),因此不能直接在嵌入式系統(tǒng)硬件上進(jìn)行編程。 作為一個完整的嵌入式系統(tǒng),其軟件設(shè)計也是一個很重要的方面。本系統(tǒng)軟件的實(shí)現(xiàn)是通過串 口設(shè)置和讀寫串口等操作來完成宿主機(jī)與目標(biāo)機(jī)間的串口通信。3.1串口操作需要的頭文件在開發(fā)嵌入式Linux串口驅(qū)動程序時,需要以下頭文件。#include /* 標(biāo)準(zhǔn)輸入輸出定義*/#include /* 標(biāo)準(zhǔn)函數(shù)庫定義 */#include /*UNIX 標(biāo)準(zhǔn)函數(shù)定義 */#in clude #i nclude #include vfcntl.h /* 文件控制定義 */#include /*POSIX終端控制定義 *

26、/#include /* 錯誤號定義 */3.2打開串口在嵌入式Linux系統(tǒng)中,打開一個串口設(shè)備和打開普通文件一樣。嵌入式Linux系統(tǒng)下的串口文件通常位于/dev下:串口一為/dev/ttySO ;串口二為/dev/ttyS1 。打開串口時通過使用標(biāo)準(zhǔn)的文件函數(shù) open()來進(jìn)行操作的,下面假設(shè)以讀寫方式打 開串口一。int fd;/文件描述符fd=open( “/dev/ttyS0 ”,O_RDWR);以讀寫方式打開串口if(fd=-1)/如果不能打開串口一perror(“提示錯誤!” );3.3串口設(shè)置在Linux系統(tǒng)中,設(shè)備都是以文件的形式表示的,串口參數(shù)一般包括波特率、起始位數(shù)量

27、、 停止位數(shù)量等。下面對這些串口參數(shù)進(jìn)行詳細(xì)說明。起始位通信線路上沒有數(shù)據(jù)被傳送時,處于邏輯“T狀態(tài)。當(dāng)發(fā)送字符數(shù)數(shù)據(jù)是首先發(fā)送一個邏輯“0”信號,這個邏輯低電平就是起始位。起始位通過通信線路傳輸?shù)浇邮斩?,接收端檢 測到這個低電平之后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。起始位所起的作用就是使通信雙方同步。數(shù)據(jù)位當(dāng)接收端收到起始位后,開始接收數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是58位。在數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始傳送,接收端收到數(shù)據(jù)后,依次將其轉(zhuǎn)換成并行數(shù)據(jù)。奇偶校驗位數(shù)據(jù)位發(fā)送完后,為了保證數(shù)據(jù)的可靠性,還要傳送一個奇偶校驗位。奇偶校驗用于差 錯檢測。如果選擇偶檢驗,則數(shù)據(jù)位和奇偶位的邏輯“1”的個

28、數(shù)必須為偶數(shù),相反,如果是奇檢驗,則數(shù)據(jù)位和奇偶位的邏輯“ 1”的個數(shù)為奇數(shù)。停止位在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗時)之后發(fā)送停止位。停止位表示一個數(shù)據(jù)的結(jié)束。它可以是12位的低電平。接收端收到停止位后,通信線路便恢復(fù)邏輯“1”的狀態(tài),直到下一個數(shù)據(jù)的起始位到來。波特率通信線路上傳輸?shù)奈唬ùa元)信號都必須保持一致的信號持續(xù)時間,單位時間內(nèi)傳送碼 元的數(shù)目稱為波特率。對大多數(shù)嵌入式設(shè)備來說,其波特率都設(shè)置為115200。訪問串行口通過對設(shè)備文件的訪問來實(shí)現(xiàn),僅需打開相應(yīng)的設(shè)備文件。串口的設(shè)置主要 是設(shè)置struct termios結(jié)構(gòu)體中的各成員值。#i ncludestruct termiou

29、n sig ned short c_iflag; /*un sig ned short c_oflag;un sig ned short c_cflag;un sig ned short c_lflag; /*un sig ned char c_li ne;/*un sig ned char c_ccNCC; /* 波特率設(shè)置:輸入模式標(biāo)志*/*輸出模式標(biāo)志*/*控制模式標(biāo)志*/本地模式標(biāo)志*/ 線路規(guī)范*/ 控制特征值*/設(shè)置為 115200Bps*/struct termios opti on; tcgetattr(fd,&optio n); cfsetispeed(&optio n,B1

30、15200);/* cfsetospeed(&opti on ,B115200); tcsetattr(fd,TCANOW,&optio n); 檢驗位設(shè)置:無校驗8位:optio ns.c_cflag &=PARENBoptio ns.c_cflag &=CSTOPB;opti on s.c_cflag &=CSIZE;opti on s.c_cflag| =CS8;奇效驗(Odd)7位:optio ns.c_cflag| =PARENB;optio ns.c_cflag &=PARODD;optio ns.c_cflag &=CSTOPB;opti on s.c_cflag &=CSIZE

31、;opti on s.c_cflag| =CS7;偶校驗(Even)7位:optio ns.c_cflag &=PARENB;optio ns.c_cflag| =OARODD;optio ns.c_cflag &= CSTOPB;opti on s.c_cflag &=CSIZE;opti on s.c_cflag| =CS7;Space校驗7位:optio ns.c_cflag &= PARENB;optio ns.c_cflag &=CSTOPB;opti on s.c_cflag &二&CSIZE;opti on s.c_cflag| =CS8; 停止位設(shè)置:1 位:optio ns.

32、c_cflag &=CSTOPB;2 位:optio ns.c_cflag| =CSTOPB; 模式設(shè)置:需要注意的是,如果不是開發(fā)終端之類的,只是串口傳輸數(shù)據(jù),而不需要串口來處理,那么 使用原始模式(Raw Mode)方式來通訊。options.c_lflag &=(ICANON| ECHO ECHOE ISIG);/*Input*/optio ns.c_oflag &=OPOST;/*Output*/3.4串口讀寫在Linux系統(tǒng)中,對設(shè)備和目錄的操作都等同于文件的操作,這樣大大簡化了系統(tǒng)對不同設(shè)備的處理,提高了效率。在程序中,設(shè)備和文件都是使用文件描述符來進(jìn)行操作的。文 件描述符是一個非

33、負(fù)的整數(shù),是一個索引值,并指向內(nèi)核中每個進(jìn)程打開文件的記錄表。當(dāng)打 開一個現(xiàn)存的文件或者是創(chuàng)建一個新文件時,內(nèi)核就向進(jìn)程返回一個文件描述符;當(dāng)需要讀寫 時也需要將文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。在Linux系統(tǒng)中,所有的設(shè)備文件都位于“ / dev”下,其中串口對應(yīng)的設(shè)備名為“ / dev/ ttySO ” ,因此對串口的讀寫就可以像讀寫(“read”和“ write ”)普通文件一樣來讀寫設(shè)備 文件,所不同的是需要對串口的其他參數(shù)另做配置。打開串口之后,讀寫串口就很容易了,把串口當(dāng)作文件讀寫就可以了。(1) 發(fā)送數(shù)據(jù)char butter1024;int Len gth=1024;int

34、 n Byte;n Byte=write(fd,buffer,Le ngth);(2) 讀取串口數(shù)據(jù)使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(RawMode傳輸數(shù)據(jù),那么read函數(shù) 返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。讀取數(shù)據(jù)時比較需要技巧的。char buff1024;int Len=1024;int rdadByte=read(fd,buff,Le n);也可以使用操作文件的函數(shù)來實(shí)現(xiàn)異步讀取,如fcntl,或者selectt等來操作。fd_set rfds;struct timeval tv;int retval;/*下面幾行設(shè)置要監(jiān)視進(jìn)行讀寫操作的文件集*/FD-ZERO (

35、&rfds); / 文件集清零FD_SET(portsportNo.ha ndle,&rfds); /向集合中添加一個文件句柄tv.tv_sec=Timeout/1000; /設(shè)置等待的時間tv.tv_usec=(Timeeout%1000)*1000;retval=select(16,&rfds,NULL,NULL,&tv;) /文件所監(jiān)視的文件集準(zhǔn)備好.if(rdtvel) /文件集中有文件在等待時間內(nèi)準(zhǔn)備好了.actualRead=read(portsportNo.ha ndle,buf,maxC nt); /讀取數(shù)據(jù)下面兩個實(shí)例給出了串口讀和寫兩個程序部分代碼。寫串口的程序?qū)⒃谒拗鳈C(jī)上

36、運(yùn)行,讀串口程序?qū)⒃谀繕?biāo)板上運(yùn)行。寫串口部分程序:doprintf(“Input some words(enter quit to exit):” );memset(buff, O,BUFFER_SIZE);if(fgets(buff,BUFFER_SIZE,stdi n)=NULL)perror(“fgets ” );break;write(fd,buff,strle n(buff);whie(strncmp(buff, ” quit ” ,4);讀串口部分程序:domemset(buff,0,BUFFER_SIZE);if(read(fd,buff,BUFFER_SIZE)0)printf

37、(“The received words are:%s ” ,buff);while(strncmp(buff, ” quit ” ,4);3.5關(guān)閉串口在Linux系統(tǒng)中,對設(shè)備和目錄的操作都等同于文件的操作,關(guān)閉串口就是關(guān)閉文件,而設(shè)備和文件都是使用文件描述符來進(jìn)行操作的。文件描述符是一個索引值,指向內(nèi)核中每個 進(jìn)程打開文件的記錄表,因此關(guān)閉文件就只要關(guān)閉文描述符就可以了五、源程序代碼/*serial_com.c*/#i nclude #in elude #in elude vfen tl.h#in elude verrno .h#i nclude #in clude #i nclude #i nclude #define MODEMDEVICE /dev/ttySO#defi ne _POSIX_SOURCE 1#define FALSE 0#defi ne TRUE 1volatile int STOP=FALSE;mai n()int fd,n=0,c,BAUDRATE,i,BUFNUMBER=32,READNUMBER=32;char receivebufBUFNUMBER;stru

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論