- 论坛徽章:
- 0
|
为尊重原创作者,注明出处:http://www.2beanet.com/bbs/viewthread.php?tid=26&highlight=linux%2B%E4%B8%B2%E5%8F%A3
Linux 串口编程(附测试程序)概述:
串口,UART(通用异步收发器),广泛应用于各种场合,本文就Linux下的串口编程,做简单的阐述!
准备知识:
Linux的设备管理比较有意思(vxworks下也是这样),对设备的操作就仿佛是对文件的操作一样,所以
无外乎“打开”,“控制”,“读”,“写”,“关闭”等操作,对应的系统调用就是open,ioctl,read,
write,close。
数据结构分析:
在之前做过的测试和应用的基础上,感觉串口的“终端控制结构”的选项设置比较重要,在系统的
头文件<bits/termios.h>中定义,struct termios,调用tcgetattr和tcsetattr来获取和设置串口的终端属性。
复制内容到剪贴板 代码:struct termios
31 {
32 tcflag_t c_iflag; /* input mode flags */
33 tcflag_t c_oflag; /* output mode flags */
34 tcflag_t c_cflag; /* control mode flags */
35 tcflag_t c_lflag; /* local mode flags */
36 cc_t c_line; /* line discipline */
37 cc_t c_cc[NCCS]; /* control characters */
38 speed_t c_ispeed; /* input speed */
39 speed_t c_ospeed; /* output speed */
40 #define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
41 #define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
42 };
复制内容到剪贴板 代码:
c_cflag:
CLOCAL 本地模式,不改变端口的所有者
CREAD 表示使能数据接收器
PARENB 表示偶校验
PARODD 表示奇校验
CSTOPB 使用两个停止位
CSIZE 对数据的bit使用掩码
CS8 数据宽度是8bit
c_lflag:
ICANON 使能规范输入,否则使用原始数据(本文使用)
ECHO 回送(echo)输入数据
ECHOE 回送擦除字符
ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信号
c_iflag:
IXON 使能输出软件控制
IXOFF 使能输入软件控制
IXANY 允许任何字符再次开启数据流
INLCR 把字符NL(0A)映射到CR(0D)
IGNCR 忽略字符CR(0D)
ICRNL 把CR(0D)映射成字符NR(0A)
c_oflag:
OPOST 输出后处理,如果不设置表示原始数据(本文使用原始数据)
c_cc[VMIN] 最少可读数据
c_cc[VTIME] 等待数据时间(10秒的倍数)
设置例子:
复制内容到剪贴板 代码: tcgetattr(fd, &opt);
60 tcgetattr(fd, &newOpt);
61
62 newOpt.c_cflag |= (CLOCAL | CREAD);
63 newOpt.c_cflag &= ~CBAUD;
64 newOpt.c_cflag |= (B115200 | CS ;
65
66 newOpt.c_lflag &= ~(ICANON | ISIG | NOFLSH);
67
68 newOpt.c_lflag &= ~(ECHO);
69
70 newOpt.c_lflag &= ~(ECHOE);
71
72
73 newOpt.c_oflag &= ~(OPOST | ONLCR | OCRNL);
74
75 newOpt.c_cc[VMIN]=100;
76 newOpt.c_cc[VTIME]=2;
77
78 tcflush(fd,TCIFLUSH);
79
80 ret = tcsetattr(fd, TCSANOW, &newOpt);
comTest.rar (1.06 KB)
搜索更多相关主题的帖子: linux 串口编程 源码 linux 串口编程 源码 |
|