linux和windows下串口的使用Word文档格式.docx

上传人:b****4 文档编号:18030905 上传时间:2022-12-13 格式:DOCX 页数:13 大小:22.10KB
下载 相关 举报
linux和windows下串口的使用Word文档格式.docx_第1页
第1页 / 共13页
linux和windows下串口的使用Word文档格式.docx_第2页
第2页 / 共13页
linux和windows下串口的使用Word文档格式.docx_第3页
第3页 / 共13页
linux和windows下串口的使用Word文档格式.docx_第4页
第4页 / 共13页
linux和windows下串口的使用Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

linux和windows下串口的使用Word文档格式.docx

《linux和windows下串口的使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《linux和windows下串口的使用Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

linux和windows下串口的使用Word文档格式.docx

stOpt,DEVICE);

//cfgetispeed获取波特率

cfsetospeed(&

//cfgetospeed

tcsetattr(fd,TCSANOW,&

options);

//设置属性

4.配置串口属性(包括:

数据位、校验位、停止位等)

structtermiosoptions;

tcgetattr(iCom,&

options);

//设置前先获取

tcflush(fd,TCIFLUSH);

//清空缓存数据

校验位:

奇校验:

options.c_cflag|=(PARODD|PARENB);

//

options.c_iflag|=INPCK;

偶校验:

options.c_cflag|=PARENB;

options.c_cflag&

=~PARODD;

无校验:

options.c_cflag&

=~PARENB;

options.c_iflag&

=~INPCK;

停止位:

1位:

=~CSTOPB;

2位:

options.c_cflag|=CSTOPB;

数据位:

7位:

=~CSIZE;

//

options.c_cflag|=CS7;

8位:

options.c_cflag|=CS8;

超时:

tcflush(iCom,TCIFLUSH);

//清空缓存

stOpt.c_cc[VTIME]=120;

//超时12秒

stOpt.c_cc[VMIN]=0;

5.常用属性

PARODD输入输出是奇校验

PARENB允许输出产生奇偶信息以及输入的奇偶校验。

INPCK启用输入奇偶检测

CSIZE字符长度掩码。

取值为CS5,CS6,CS7,或CS8。

CSTOPB设置两个停止位,而不是一个。

例:

Linux下打开串口(9600,n,8,1):

//变量声明

td_s32g_fdCom[4]={-1,-1,-1,-1};

//串口句柄

structtermiosstOpt;

//打开设备

g_fdCom[2]=open("

/dev/ttyAMA1"

O_RDWR);

//|O_NOCTTY|O_NDELAY|O_SYNC

tcgetattr(g_fdCom[2],&

stOpt);

tcflush(g_fdCom[2],TCIFLUSH);

//设置波特率

//cfmakeraw(&

//存储属性吗?

这句话导致超时设置失效

cfsetispeed(&

stOpt,B9600);

cfsetospeed(&

//串口控制属性配置

/*有这个配置,其他配置省略*/

//tcsetattr(iCom,TCSANOW,&

//stOpt.c_lflag&

=~(ICANON|ECHO|ECHOE|ISIG);

//Input

//stOpt.c_oflag&

=~OPOST;

//Output

//数据位

stOpt.c_cflag&

stOpt.c_cflag|=CS8;

//校验位,奇校验

//无校验

stOpt.c_iflag&

//不启用奇偶校验检测,若采用无校验,则不启用

//stOpt.c_iflag|=INPCK;

//停止位

//1位停止位

stOpt.c_oflag&

//超时

stOpt.c_cc[VTIME]=150;

//超时15秒

stOpt.c_cc[VMIN]=0;

if(tcsetattr(g_fdCom[2],TCSANOW,&

stOpt)!

=0)

{

printf("

setparityerror\n"

);

return-1;

}

Windows下打开串口(9600,n,8,1):

//变量声明:

HANDLEhCom;

DCBdcpProperty;

hCom=CreateFile(__T("

COM1"

),//COM1口

GENERIC_READ|GENERIC_WRITE,//允许读写

0,//独占方式,串口不能共享,故为零

NULL,

OPEN_EXISTING,//打开而不是创建

0,//同步方式、、FILE_FLAG_OVERLAPPED表示是异步

NULL);

if(hCom==(HANDLE)-1)

{

MessageBox(__T("

打开COM失败!

"

));

else

串口已打开"

}

//设定超时

//读超时

COMMTIMEOUTSTimeOuts;

BOOLbSuccess;

TimeOuts.ReadIntervalTimeout=0;

TimeOuts.ReadTotalTimeoutMultiplier=100;

TimeOuts.ReadTotalTimeoutConstant=5000;

//5秒

//在读一次输入缓冲区的内容后读操作就立即返回,

//而不管是否读入了要求的字符。

//写超时

TimeOuts.WriteTotalTimeoutMultiplier=5000;

TimeOuts.WriteTotalTimeoutConstant=5000;

bSuccess=SetCommTimeouts(hCom,&

TimeOuts);

//设置超时

if(!

bSuccess)

设置超时失败"

//配置串口属性

GetCommState(hCom,&

dcpProperty);

//未获取则不能设置

dcpProperty.BaudRate=CBR_9600;

//波特率

//dcpProperty.fParity=-1;

//允许奇偶校验

//dcpProperty.Parity=NOPARITY;

//奇校验

dcpProperty.StopBits=ONESTOPBIT;

dcpProperty.ByteSize=8;

//通讯字节数

SetCommState(hCom,&

//清空读写缓存

PurgeComm(g_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);

//读写操作。

附录:

DESCRIPTION描述

termios函数族提供了一个常规的终端接口,用于控制非同步通信端口。

这里描述的大部分属性有一个termios_p类型的参数,它是指向一个termios结构的指针。

这个结构包含了至少下列成员:

tcflag_tc_iflag;

/*输入模式*/

/*输出模式*/

/*控制模式*/

tcflag_tc_lflag;

/*本地模式*/

/*控制字符*/

c_iflag标志常量:

IGNBRK

忽略输入中的BREAK状态。

BRKINT

如果设置了IGNBRK,将忽略BREAK。

如果没有设置,但是设置了BRKINT,那么BREAK将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到SIGINT信号。

如果既未设置IGNBRK也未设置BRKINT,BREAK将视为与NUL字符同义,除非设置了PARMRK,这种情况下它被视为序列\377\0\0。

IGNPAR

忽略桢错误和奇偶校验错。

PARMRK

如果没有设置IGNPAR,在有奇偶校验错或桢错误的字符前插入\377\0。

如果既没有设置IGNPAR也没有设置PARMRK,将有奇偶校验错或桢错误的字符视为\0。

INPCK

启用输入奇偶检测。

ISTRIP

去掉第八位。

INLCR

将输入中的NL翻译为CR。

IGNCR

忽略输入中的回车。

ICRNL

将输入中的回车翻译为新行(除非设置了IGNCR)。

IUCLC

(不属于POSIX)将输入中的大写字母映射为小写字母。

IXON

启用输出的XON/XOFF流控制。

IXANY

(不属于POSIX.1;

XSI)允许任何字符来重新开始输出。

(?

IXOFF

启用输入的XON/XOFF流控制。

IMAXBEL

(不属于POSIX)当输入队列满时响零。

Linux没有实现这一位,总是将它视为已设置。

POSIX.1中定义的c_oflag标志常量:

OPOST

启用具体实现自行定义的输出处理。

其余c_oflag标志常量定义在POSIX1003.1-2001中,除非另外说明。

OLCUC

(不属于POSIX)将输出中的小写字母映射为大写字母。

ONLCR

(XSI)将输出中的新行符映射为回车-换行。

OCRNL

将输出中的回车映射为新行符

ONOCR

不在第0列输出回车。

ONLRET

不输出回车。

OFILL

发送填充字符作为延时,而不是使用定时来延时。

OFDEL

(不属于POSIX)填充字符是ASCIIDEL(0177)。

如果不设置,填充字符则是ASCIINUL。

NLDLY

新行延时掩码。

取值为NL0和NL1。

CRDLY

回车延时掩码。

取值为CR0,CR1,CR2,或CR3。

TABDLY

水平跳格延时掩码。

取值为TAB0,TAB1,TAB2,TAB3(或XTABS)。

取值为TAB3,即XTABS,将扩展跳格为空格(每个跳格符填充8个空格)。

BSDLY

回退延时掩码。

取值为BS0或BS1。

(从来没有被实现过)

VTDLY

竖直跳格延时掩码。

取值为VT0或VT1。

FFDLY

进表延时掩码。

取值为FF0或FF1。

c_cflag标志常量:

CBAUD

(不属于POSIX)波特率掩码(4+1位)。

CBAUDEX

(不属于POSIX)扩展的波特率掩码(1位),包含在CBAUD中。

(POSIX规定波特率存储在termios结构中,并未精确指定它的位置,而是提供了函数cfgetispeed()和cfsetispeed()来存取它。

一些系统使用c_cflag中CBAUD选择的位,其他系统使用单独的变量,例如sg_ispeed和sg_ospeed。

CSIZE

字符长度掩码。

CSTOPB

设置两个停止位,而不是一个。

CREAD

打开接受者。

PARENB

允许输出产生奇偶信息以及输入的奇偶校验。

PARODD

输入和输出是奇校验。

HUPCL

在最后一个进程关闭设备后,降低modem控制线(挂断)。

CLOCAL

忽略modem控制线。

LOBLK

(不属于POSIX)从非当前shell层阻塞输出(用于shl)。

CIBAUD

(不属于POSIX)输入速度的掩码。

CIBAUD各位的值与CBAUD各位相同,左移了IBSHIFT位。

CRTSCTS

(不属于POSIX)启用RTS/CTS(硬件)流控制。

c_lflag标志常量:

ISIG

当接受到字符INTR,QUIT,SUSP,或DSUSP时,产生相应的信号。

ICANON

启用标准模式(canonicalmode)。

允许使用特殊字符EOF,EOL,EOL2,ERASE,KILL,LNEXT,REPRINT,STATUS,和WERASE,以及按行的缓冲。

XCASE

(不属于POSIX;

Linux下不被支持)如果同时设置了ICANON,终端只有大写。

输入被转换为小写,除了以\前缀的字符。

输出时,大写字符被前缀\,小写字符被转换成大写。

ECHO

回显输入字符。

ECHOE

如果同时设置了ICANON,字符ERASE擦除前一个输入字符,WERASE擦除前一个词。

ECHOK

如果同时设置了ICANON,字符KILL删除当前行。

ECHONL

如果同时设置了ICANON,回显字符NL,即使没有设置ECHO。

ECHOCTL

(不属于POSIX)如果同时设置了ECHO,除了TAB,NL,START,和STOP之外的ASCII控制信号被回显为^X,这里X是比控制信号大0x40的ASCII码。

例如,字符0x08(BS)被回显为^H。

ECHOPRT

(不属于POSIX)如果同时设置了ICANON和IECHO,字符在删除的同时被打印。

ECHOKE

(不属于POSIX)如果同时设置了ICANON,回显KILL时将删除一行中的每个字符,如同指定了ECHOE和ECHOPRT一样。

DEFECHO

(不属于POSIX)只在一个进程读的时候回显。

FLUSHO

Linux下不被支持)输出被刷新。

这个标志可以通过键入字符DISCARD来开关。

NOFLSH

禁止在产生SIGINT,SIGQUIT和SIGSUSP信号时刷新输入和输出队列。

TOSTOP

向试图写控制终端的后台进程组发送SIGTTOU信号。

PENDIN

Linux下不被支持)在读入下一个字符时,输入队列中所有字符被重新输出。

(bash用它来处理typeahead)

IEXTEN

启用实现自定义的输入处理。

这个标志必须与ICANON同时使用,才能解释特殊字符EOL2,LNEXT,REPRINT和WERASE,IUCLC标志才有效。

c_cc数组定义了特殊的控制字符。

符号下标(初始值)和意义为:

VINTR

(003,ETX,Ctrl-C,oralso0177,DEL,rubout)中断字符。

发出SIGINT信号。

当设置ISIG时可被识别,不再作为输入传递。

VQUIT

(034,FS,Ctrl-\)退出字符。

发出SIGQUIT信号。

VERASE

(0177,DEL,rubout,or010,BS,Ctrl-H,oralso#)删除字符。

删除上一个还没有删掉的字符,但不删除上一个EOF或行首。

当设置ICANON时可被识别,不再作为输入传递。

VKILL

(025,NAK,Ctrl-U,orCtrl-X,oralso@)终止字符。

删除自上一个EOF或行首以来的输入。

VEOF

(004,EOT,Ctrl-D)文件尾字符。

更精确地说,这个字符使得tty缓冲中的内容被送到等待输入的用户程序中,而不必等到EOL。

如果它是一行的第一个字符,那么用户程序的read()将返回0,指示读到了EOF。

VMIN

非canonical模式读的最小字符数。

VEOL

(0,NUL)附加的行尾字符。

当设置ICANON时可被识别。

VTIME

非canonical模式读时的延时,以十分之一秒为单位。

VEOL2

(notinPOSIX;

0,NUL)另一个行尾字符。

VSWTCH

notsupportedunderLinux;

0,NUL)开关字符。

(只为shl所用。

VSTART

(021,DC1,Ctrl-Q)开始字符。

重新开始被Stop字符中止的输出。

当设置IXON时可被识别,不再作为输入传递。

VSTOP

(023,DC3,Ctrl-S)停止字符。

停止输出,直到键入Start字符。

VSUSP

(032,SUB,Ctrl-Z)挂起字符。

发送SIGTSTP信号。

VDSUSP

031,EM,Ctrl-Y)延时挂起信号。

当用户程序读到这个字符时,发送SIGTSTP信号。

当设置IEXTEN和ISIG,并且系统支持作业管理时可被识别,不再作为输入传递。

VLNEXT

026,SYN,Ctrl-V)字面上的下一个。

引用下一个输入字符,取消它的任何特殊含义。

当设置IEXTEN时可被识别,不再作为输入传递。

VWERASE

027,ETB,Ctrl-W)删除词。

当设置ICANON和IEXTEN时可被识别,不再作为输入传递。

VREPRINT

022,DC2,Ctrl-R)重新输出未读的字符。

VDISCARD

017,SI,Ctrl-O)开关:

开始/结束丢弃未完成的输出。

VSTATUS

statusrequest:

024,DC4,Ctrl-T).

这些符号下标值是互不相同的,除了VTIME,VMIN的值可能分别与VEOL,VEOF相同。

(在non-canonical模式下,特殊字符的含义更改为延时含义。

MIN表示应当被读入的最小字符数。

TIME是以十分之一秒为单位的计时器。

如果同时设置了它们,read将等待直到至少读入一个字符,一旦读入MIN个字符或者从上次读入字符开始经过了TIME时间就立即返回。

如果只设置了MIN,read在读入MIN个字符之前不会返回。

如果只设置了TIME,read将在至少读入一个字符,或者计时器超时的时候立即返回。

如果都没有设置,read将立即返回,只给出当前准备好的字符。

)(?

tcgetattr()得到与fd指向的对象相关的参数,将它们保存于termios_p引用的termios结构中。

函数可以从后台进程中调用;

但是,终端属性可能被后来的前台进程所改变。

tcsetattr()设置与终端相关的参数(除非需要底层支持却无法满足),使用termios_p引用的termios结构。

optional_actions指定了什么时候改变会起作用:

TCSANOW

改变立即发生

TCSADRAIN

改变在所有写入fd的输出都被传输后生效。

这个函数应当用于修改影响输出的参数时使用。

TCSAFLUSH

改变在所有写入fd引用的对象的输出都被传输后生效,所有已接受但未读入的输入都在改变发生前丢弃。

tcsendbreak()传送连续的0值比特流,持续一段时间,如果终端使用异步串行数据传输的话。

如果duration是0,它至少传输0.25秒,不会超过0.5秒。

如果duration非零,它发送的时间长度由实现定义。

如果终端并非使用异步串行数据传输,tcsendbreak()什么都不做。

tcdrain()等待直到所有写入fd引用的对象的输出都被传输。

tcflush()丢弃要写入引用的对象,但是尚未传输的数据,或者收到但是尚未读取的数据,取决于queue_selector的值:

TCIFLUSH

刷新收到的数据但是不读

TCOFLUSH

刷新写入的数据但是不传送

TCIOFLUSH

同时刷新收到的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1