标题:
关于 Linux串口调试(编程)总结(ARM通信)(2)
[打印本页]
作者:
yuyang911220
时间:
2015-5-30 09:18
标题:
关于 Linux串口调试(编程)总结(ARM通信)(2)
在
<termios.h>
中,有如下定义
struct termios {
tcflag_t c_iflag;
/* input mode flags */
tcflag_t c_oflag;
/* output mode flags */
tcflag_t c_cflag;
/* control mode flags */
tcflag_t c_lflag;
/* local mode flags */
cc_t c_line;
/* line discipline */
cc_t c_cc[NCCS];
/* control characters */
};
c_iflag
由终端设备驱动程序用来控制输入特性(剥除输入字节的第
8
位,允许输
入奇偶校验等等)
c_oflag
则控制输出特性(执行输出处理,将新行映照为
C R / L F
等)
c_cflag
影响到
UART
串行线(忽略调制解调器的状态线,每个字符的一个或两个停止位等等),
c_lflag
影响驱动程序和用户之间的界面(回送的开或关,可视的擦除符,允许终端产生的信
号,对后台作业输出的控制停止信号等)。
修改非规范方式输入处理,如下:
struct termios options;
tcgetattr( fd,&options)
options.c_lflag &= ~(ICANON );
通过修改
c_lflag
本地模式,将
ICANON
属性去掉,
ICANON
就是规范化方式。
二、接收到数据:
其余数据全正确
03
以前的数据全部没有,而
0x03
相当于
^c,
即
CTRL+C
,
^c, ^?
由
ISIG
来控制,那么去除该控制,应该就
可以显示
03
了,再次修改为:
options.c_lflag &= ~(ICANON |ISIG);
三、接收到数据:
00 01 02 03 04 05 06 07 08 09 0a 0b
0c 0a 0e 0f ……
其余数据全部正确
看,
0d
变成了
0a
c_iflag
模式中,有
ICRNL
项,
IGNCR
项,将两者去掉:
options.c_iflag &= ~(ICRNL|IGNCR)
至此:串口能接收到所有的数据。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0