串口應(yīng)用開(kāi)發(fā)_第1頁(yè)
串口應(yīng)用開(kāi)發(fā)_第2頁(yè)
串口應(yīng)用開(kāi)發(fā)_第3頁(yè)
串口應(yīng)用開(kāi)發(fā)_第4頁(yè)
串口應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

串口程序設(shè)計(jì)串口概述用戶(hù)常見(jiàn)的數(shù)據(jù)通信的基本方式可分為(1)并行通信:用多條數(shù)據(jù)線(xiàn)將各位同時(shí)傳送特點(diǎn):傳送速度快,適用于短距離、速度要求高的場(chǎng)合。(2)串行通信:用一條數(shù)據(jù)線(xiàn)一位位的順序傳送特點(diǎn):成本低,適用于遠(yuǎn)距離、速度慢的場(chǎng)合。串行口是計(jì)算機(jī)一種常用接口。常用串口是RS-232-C接口(又稱(chēng)EIARS-232-C),是在1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。1串口程序設(shè)計(jì)異步串行I/O(UART)方式:將傳輸數(shù)據(jù)的每個(gè)字符一位接一位(例如先低位、后高位)地傳送。接收方對(duì)于同一根線(xiàn)上一連串的數(shù)字信號(hào),首先要分割成位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O方式,雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。

發(fā)送數(shù)據(jù)2串口程序設(shè)計(jì)串口通訊電纜接線(xiàn)方式

3串口程序設(shè)計(jì)序號(hào)信號(hào)名稱(chēng)符號(hào)流向功能2發(fā)送數(shù)據(jù)TXDDTE→DCEDTE(數(shù)據(jù)終端設(shè)備)發(fā)送串行數(shù)據(jù)3接收數(shù)據(jù)RXDDTE←DCEDTE接收串行數(shù)據(jù)4請(qǐng)求發(fā)送RTSDTE→DCEDTE請(qǐng)求

DCE(數(shù)據(jù)通訊設(shè)備)將線(xiàn)路切換到發(fā)送方式5允許發(fā)送CTSDTE←DCEDCE告訴

DTE線(xiàn)路已接通可以發(fā)送數(shù)據(jù)6數(shù)據(jù)設(shè)備準(zhǔn)備好DSRDTE←DCEDCE準(zhǔn)備好

7信號(hào)地

信號(hào)公共地8載波檢測(cè)DCDDTE←DCE表示

DCE接收到遠(yuǎn)程載波20數(shù)據(jù)終端準(zhǔn)備好DTRDTE→DCEDTE準(zhǔn)備好22振鈴指示RIDTE←DCE表示

DCE與線(xiàn)路接通,出現(xiàn)振鈴串口的引腳說(shuō)明4串口程序設(shè)計(jì)S3C2410X內(nèi)部具有兩個(gè)獨(dú)立的UART控制器,每個(gè)控制器都可以工作在Interrupt模式或者DMA模式。同時(shí),每個(gè)UART均具有16字節(jié)的FIFO,支持最高波特率230.4Kbps。串口配置主要包括波特率、起始位數(shù)量、數(shù)據(jù)位數(shù)量、停止位數(shù)量和流控協(xié)議。在Linux下串口文件位于/dev下串口一為/dev/ttyS0串口二為/dev/ttyS1

5串口程序設(shè)計(jì)串口的設(shè)置主要是設(shè)置struct

termios

結(jié)構(gòu)體的各成員值。struct

termios{ unsignedshortc_oflag; /*輸出模式標(biāo)志*/

unsignedshortc_cflag; /*控制模式標(biāo)志*/ unsignedshortc_lflag;/*區(qū)域模式標(biāo)志* unsignedcharc_line;/*行控制linediscipline*/

unsignedcharc_cc[NCC];/*控制特性*/unsignedshortc_iflag; /*輸入模式標(biāo)志*/ };6串口程序設(shè)計(jì)1、設(shè)置參數(shù)的實(shí)現(xiàn)示例:

tcgetattr(fd,&oldtio),該函數(shù)得到與fd指向?qū)ο蟮南嚓P(guān)參數(shù),并將他們保存于oldtio引用的結(jié)構(gòu)中。保存原先配置

if(tcgetattr(fd,&oldtio)!=0){

Perror(“error”);Return-1;}7串口程序設(shè)計(jì)2、設(shè)置參數(shù)的實(shí)現(xiàn)示例:激活選項(xiàng)CLOCAL和CREADCLOCAL用于本地連接

CREAD用于接收使能

例:newtio.c_cflag|=CLOCAL|CREAD8串口程序設(shè)計(jì)3、設(shè)置參數(shù)的實(shí)現(xiàn)示例:設(shè)置波特率輸入波特率設(shè)置:cfsetispeed輸出波特率設(shè)置:cfsetospeed例:cfsetispeed(&newtio,B19200);/*設(shè)置為19200Bps*/cfsetospeed(&newtio,B19200);9串口程序設(shè)計(jì)4、設(shè)置參數(shù)的實(shí)現(xiàn)示例:設(shè)置數(shù)據(jù)位大小首先去掉數(shù)據(jù)位中的掩碼,在重新設(shè)置。例:

newtio.c_cflag&=~CSIZE;

newtio.c_cflag|=CS8;10串口程序設(shè)計(jì)5、設(shè)置參數(shù)的實(shí)現(xiàn)示例:設(shè)置奇校驗(yàn)位

newtio.c_iflag|=(INPCK|ISTRIP)//INPCK奇偶校驗(yàn)使能;ISTRIP

除去奇偶校驗(yàn)位

newtio.c_cflag|=PARODD;//奇校驗(yàn)

newtio.c_cflag|=PARENB;//校驗(yàn)位使能課堂練習(xí)一:設(shè)置偶校驗(yàn)位

newtio.c_iflag|=(INPCK|ISTRIP);

newtio.c_cflag&=~PARODD;

newtio.c_cflag|=PARENB;11串口程序設(shè)計(jì)6、設(shè)置參數(shù)的實(shí)現(xiàn)示例:設(shè)置停止位

下面是設(shè)置停止位為1的代碼:

newtio.c_cflag&=~CSTOPB;設(shè)置最少字符和等待時(shí)間

newtio.c_cc[VTIME]=0;

newtio.c_cc[VMIN]=0;12串口程序設(shè)計(jì)7、設(shè)置參數(shù)的實(shí)現(xiàn)示例:處理要寫(xiě)入的引用對(duì)象

tcflush(fd,queue_selector);

queue_selector取值如下:

TCIFLUSH:刷新收到的數(shù)據(jù)但不讀取TCOFLUSH:刷新寫(xiě)入的數(shù)據(jù)但是不傳送TCIOFLUSH:同時(shí)刷新收到的數(shù)據(jù)但是不讀,并且刷新寫(xiě)入的數(shù)據(jù)但是不傳送例如采用第三種方法:tcflush(fd,TCIOFLUSH);13串口程序設(shè)計(jì)8、設(shè)置參數(shù)的實(shí)現(xiàn)示例:激活配置

tcsetattr(fd,OPTION,&newtio);OPTION的選項(xiàng)如下:

TCSANOW:改變的配置立即生效

TCSADRAIN:改變的配置在所有寫(xiě)入fd的輸出結(jié)束后生效

TCSAFLUSH:改變的配置在所有寫(xiě)入fd引用對(duì)象的輸出都被結(jié)束后生效,所有已接受但未讀入的輸入都在改變發(fā)生前丟棄例如:想使改變立即生效

tcsetattr(fd,TCSANOW,&newtio);14串口程序設(shè)計(jì)串口操作需要的頭文件

#include<stdio.h>/*標(biāo)準(zhǔn)輸入輸出定義*/#include<stdlib.h>/*標(biāo)準(zhǔn)函數(shù)庫(kù)定義*/#include<unistd.h>/*Unix標(biāo)準(zhǔn)函數(shù)定義*/#include<sys/types.h>/*定義系統(tǒng)類(lèi)型*/#include<sys/stat.h>/*定義文件信息*/#include<fcntl.h>/*文件控制定義*/#include<termios.h>/*終端控制定義*/#include<errno.h>/*錯(cuò)誤號(hào)定義*/15串口程序設(shè)計(jì)打開(kāi)串口在Linux下串口文件位于/dev下串口一為/dev/ttyS0串口二為/dev/ttyS1{

int

fd; /*以讀寫(xiě)方式打開(kāi)串口*/

fd=open("/dev/ttyS0",O_RDWR); if(-1==fd){ /*不能打開(kāi)串口*/

perror("提示錯(cuò)誤!");}

設(shè)置串口串口的設(shè)置主要是設(shè)置struct

termios

結(jié)構(gòu)體的各成員值。16串口程序設(shè)計(jì)設(shè)置參數(shù)的實(shí)現(xiàn)示例:tcgetattr(fd,&oldtio);/*儲(chǔ)存當(dāng)前串口設(shè)定*//*控制標(biāo)志設(shè)定,含義如下: *//*BAUDRATE:設(shè)定

bps

的速度 *//*CRTSCTS:硬體流量控制

*//*CS8:8n1

(8

位,無(wú)校驗(yàn)位,1

個(gè)終止位) *//*CLOCAL:本地連線(xiàn),沒(méi)有主機(jī)控制功能 *//*CREAD:

只能接收字元 */newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD;newtio.c_iflag=IGNPAR; /*忽略奇偶校驗(yàn)位*/newtio.c_oflag=0; /*Raw

模式輸出*/newtio.c_lflag=0; /*非標(biāo)準(zhǔn)型輸入,不回應(yīng)*/newtio.c_cc[VMIN]=1; /*在讀取到

1

個(gè)字元前先停止*/newtio.c_cc[VTIME]=0; /*不使用分割字元組的計(jì)時(shí)器*/tcflush(fd,TCIFLUSH); /*清除串口緩沖區(qū)*/tcsetattr(fd,TCSANOW,&newtio); /*設(shè)置串口新參數(shù)*/

17串口程序設(shè)計(jì)讀寫(xiě)串口發(fā)送數(shù)據(jù)charbuffer[1024];

intLength;

int

nByte;

nByte=write(fd,buffer,Length)讀取串口數(shù)據(jù) charbuff[1024];

intLen;

int

readByte;

readByte=read(fd,buff,Len);18串口程序設(shè)計(jì)關(guān)閉串口

關(guān)閉串口就是關(guān)閉文件

close(fd);19串口程序設(shè)計(jì)串口參數(shù)設(shè)定和文件操作的幾個(gè)重要函數(shù)函數(shù)名描述舉例open打開(kāi)串口文件open("/dev/ttyS0",O_RDWR)tcgetattr保存

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論