.串列埠概述
常見資料通訊方式:並行通訊,序列通訊
uart的主要操作:
>資料傳送及接受
>產生中斷
>產生波特率
>loopback模式
>紅外模式
>自動流控模式
串列埠引數的配置主要包括:波特率、資料位、停止位、流控協議。
linux中的串列埠裝置檔案放於/de/目錄下,串列埠一,串列埠二分別為"/dev/ttys0","/dev/ttys1".在linux下操作串列埠與操作檔案相同.
.串列埠詳細配置
包括:波特率、資料位、校驗位、停止位等。串列埠設定由下面的結構體實現:
struct termios
; 該結構體中c_cflag最為重要,可設定波特率、資料位、校驗位、停止位。在設定波特率時需要在數字前加上'b',
如b9600,b15200.使用其需通過「與」「或」操作方式:
輸入模式c_iflag成員控制埠接收端的字元輸入處理:
.串列埠控制函式
tcgetattr 取屬性(termios結構)
tcsetattr 設定屬性(termios結構)
cfgetispeed 得到輸入速度
cfgetospeed 得到輸出速度
cfsetispeed 設定輸入速度
cfsetospeed 設定輸出速度
tcdrain 等待所有輸出都被傳輸
tcflow 掛起傳輸或接收
tcflush 刷清未決輸入和/或輸出
tcsendbreak 送break字元
tcgetpgrp 得到前台程序組id
tcsetpgrp 設定前台程序組id
#include #include #include #include #include #include #include #include #include int set_opt(int fd,int nspeed, int nbits, char nevent, int nstop)
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= clocal | cread;
newtio.c_cflag &= ~csize;
switch( nbits )
switch( nevent )
switch( nspeed )
if( nstop == 1 )
else if ( nstop == 2 )
newtio.c_cc[vtime] = 0;
newtio.c_cc[vmin] = 0;
tcflush(fd,tciflush);
if((tcsetattr(fd,tcsanow,&newtio))!=0)
printf("set done!\n");
return 0;
}int open_port(int fd,int comport)
; long vdisable;
if (comport==1)
else
}else if(comport==2)
else
}else if (comport==3)
else
}if(fcntl(fd, f_setfl, 0)<0)
else
if(isatty(stdin_fileno)==0)
else
printf("fd-open=%d\n",fd);
return fd;
}int main(void)
if((i=set_opt(fd,115200,8,'n',1))<0)
printf("fd=%d\n",fd);
nread=read(fd,buff,8);
printf("nread=%d,%s\n",nread,buff);
close(fd);
return;
}
linux串列埠程式設計
include 標準輸入輸出定義 include 標準函式庫定義 include unix標準函式定義 include include include 檔案控制定義 include ppsix終端控制定義 include 錯誤號定義 brief 設定串列埠通訊速率 param fd 型別 int 開...
Linux串列埠程式設計
串列埠概述 常見資料通訊方式 並行通訊,序列通訊 uart的主要操作 資料傳送及接受 產生中斷 產生波特率 loopback模式 紅外模式 自動流控模式 串列埠引數的配置主要包括 波特率 資料位 停止位 流控協議。linux中的串列埠裝置檔案放於 de 目錄下,串列埠一,串列埠二分別為 dev tt...
Linux串列埠程式設計
串列埠概述 常見資料通訊方式 並行通訊,序列通訊 uart的主要操作 資料傳送及接受 產生中斷 產生波特率 loopback模式 紅外模式 自動流控模式 串列埠引數的配置主要包括 波特率 資料位 停止位 流控協議。linux中的串列埠裝置檔案放於 de 目錄下,串列埠一,串列埠二分別為 dev tt...