六 linux串口编程

本文详细介绍了Linux下的串口编程,包括结构体termios的解析,类型定义如c_cc、c_iflag等字段的说明,以及API函数的使用,如串口的打开、读写、关闭和控制。同时,提到了串口控制命令和示例代码,帮助理解如何在Linux环境中进行串口通信。

一.结构体

1.termios

struct termios  {    
	tcflag_t c_iflag;		/* 输入模式标志 */    
	tcflag_t c_oflag;		/* 输出模式标志 */    
	tcflag_t c_cflag;		/* 控制模式标志 */    
	tcflag_t c_lflag;		/* 本地模式标志 */    
	cc_t c_line;			/* 线路规程 */    
	cc_t c_cc[NCCS];		/* 控制字符 */    
	speed_t c_ispeed;		/* 输入速率 */    
	speed_t c_ospeed;		/* 输出速率 */
};

二.定义

1.类型定义

typedef unsigned char	cc_t;
typedef unsigned int	speed_t;
typedef unsigned int	tcflag_t;

2.c_cc

#define 	VINTR 	0	//中断 Ctrl-C
#define 	VQUIT 	1	//退出 Ctrl-Z
#define 	VERASE 	2	//擦除 空格BS
#define 	VKILL 	3	//删行 Ctrl-U
#define 	VEOF 	4	//文件结尾 Ctrl-D
#define 	VTIME 	5	//等待时间
#define 	VMIN 	6	//读取的最小字符数
#define 	VSWTC 	7	//
#define 	VSTART 	8	//软件流开始
#define 	VSTOP 	9	//软件流停止
#define 	VSUSP 	10	//
#define 	VEOL 	11	//行结尾 回车CR
#define 	VREPRINT 	12	//
#define 	VDISCARD 	13	//
#define 	VWERASE 	14	//
#define 	VLNEXT 	15	//
#define 	VEOL2 	16	//第二行结尾 进行LF

3.c_iflag

#define 	IGNBRK	0000001	//忽略任何中断条件
#define 	BRKINT	0000002	//传送SIGINT,当检测到中断
#define 	IGNPAR	0000004	//忽略校验错误
#define 	PARMRK	0000010	//标记校验错误
#define 	INPCK	0000020	//校验有效
#define 	ISTRIP	0000040	//剥离校验位
#define 	INLCR	0000100	//映射NL到CR
#define 	IGNCR	0000200	//忽略CR
#define 	ICRNL	0000400	//映射CR到NL
#define 	IUCLC	0001000	//映射大写到小写
#define 	IXON	0002000	//软件流控制输出作用
#define 	IXANY	0004000	//允许任何字符再次启动流
#define 	IXOFF	0010000	//软件流控制输入作用
#define 	IMAXBEL	0020000	//在输入线上回显BEL过长
#define 	IUTF8	0040000

4.c_oflag

#define 	OPOST	0000001	//输出后处理(不设置=行式输出)
#define 	OLCUC	0000002	//映射小写到大写
#define 	ONLCR	0000004	//映射NL到CR-NL
#define 	OCRNL	0000010	//映射CR到NL
#define 	ONOCR	0000020	//
#define 	ONLRET	0000040	//NL实现CR功能
#define 	OFILL	0000100	//对于延时用填充字符
#define 	OFDEL	0000200	//填充字符DEL
#define 	NLDLY	0000400	//在行之间,需要掩蔽延时
#define 	NL0	0000000	//NL没有延时
#define 	NL1	0000400	//在换行后,新的输出前延时100ms
#define 	CRDLY	0003000	//回车到左边,需要掩蔽的延时
#define  	CR0	0000000	//CR没有延时
#define  	CR1	0001000	//CR后的延时,依赖于当前的列位置
#define  	CR2	0002000	//CR后延时100ms
#define  	CR3	0003000	//CR后延时150ms
#define 	TABDLY	0014000	//TAB后需要延时
#define  	TAB0	0000000	//TAB后没有延时
#define  	TAB1	0004000	//TAB后的延时根据当前的列位置
#define  	TAB2	0010000	//TAB后延时100ms
#define  	TAB3	0014000	//TAB扩展为空格
#define  	XTABS	0014000	//
#define 	BSDLY	0020000	//BS后需要延时掩蔽
#define  	BS0	0000000	//BS后无延时
#define  	BS1	0020000	//BS后延时50ms
#define 	VTDLY	0040000	//VT后需要延时掩蔽
#define  VT0	0000000	//VT后无延时
#define  	VT1	0040000	//VT后延时2秒
#define 	FFDLY	0100000	//FF后需要延时掩蔽
#define 	FF0	0000000	//FF后无延时
#define  FF1	0100000	//FF后延时2秒

5.c_cflag

#define 	CBAUD	0010017		//波特率掩码
#define  	B0	0000000		//挂起
#define  	B50	0000001		//50 b/s
#define  	B75	0000002		//75 b/s
#define  	B110	0000003		//110 b/s
#define  	B134	0000004		//134.5 b/s
#define  	B150	0000005		//150 b/s
#define  	B200	0000006		//200 b/s
#define  	B300	0000007		//300 b/s
#define  	B600	0000010		//600 b/s
#define  	B1200	0000011		//1200 b/s
#define  	B1800	0000012		//1800 b/s
#define  	B2400	0000013		//2400 b/s
#define  	B4800	0000014		//4800 b/s
#define  	B9600	0000015		//9600 b/s
#define  	B19200	0000016		//19200 b/s
#define  	B38400	0000017		//38400 b/s
#define 	EXTA 	B19200		//外部时钟A
#define 	EXTB 	B38400		//外部时钟B
#define 	CSIZE	0000060		//位数据位掩码
#define 	CS5	0000000		//5位数据位
#define 	CS6	0000020		//6位数据位
#define 	CS7	0000040		//7位数据位
#define 	CS8	0000060		//8位数据位
#define 	CSTOPB	0000100		//2位停止位
#define 	CREAD	0000200		//接收有效
#define 	PARENB	0000400		//校验位有效
#define 	PARODD	0001000		//奇偶校验
#define 	HUPCL	0002000		//最后关闭后,挂起
#define 	CLOCAL	0004000		//本地线-不 改变端口的"拥有者"
#define 	CBAUDEX 	0010000		//
#define 	BOTHER 	0010000		//
#define 	B57600 	0010001		//57600 b/s
#define 	B115200 	0010002		//115200 b/s
#define 	B230400 	0010003		//230400 b/s
#define 	B460800 	0010004		//460800 b/s
#define 	B500000 	0010005		//500000 b/s
#define 	B576000 	0010006		//576000 b/s
#define 	B921600 	0010007		//921600 b/s
#define  B1000000 	0010010		//1000000 b/s
#define  B1152000 	0010011		//1152000 b/s
#def
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值