一百分求lINUX串口通讯不能发出'\1a'的问题

asphp 2005-05-31 11:27:47
我在做串口通讯时,一般的ASCII都能够发出去,但当我发出一个0x1a的时候,就不知道发出去什么了。是不是对于CTROL-Z有什么特殊的做法,或者在初始化的时候应该做好一个工作?
谢谢各位
...全文
400 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
asphp 2005-08-04
  • 打赏
  • 举报
回复
不好意思,是我处理的问题,硬件只接受\0x1a 我发了两个字符
leemuxiang 2005-06-10
  • 打赏
  • 举报
回复
blueflame(蓝色的火焰)同学回答过这个问题,注意下面的标示

0x11 is part of the XON/XOFF control bytes
VSTOP 0x13 XOFF ^S
VSTART 0x11 XON ^Q

options.c_iflag &= ~IXON;

c_iflag
BRKINT接到BREAK时产生SIGINT
ICRNL将输入的CR转换为NL
IGNBRK忽略BREAK条件
IGNCR忽略CR
IGNPAR忽略奇偶错字符
IMAXBEL在输入队列空时振铃
INLCR将输入的NL转换为CR
INPCK打开输入奇偶校验
ISTRIP剥除输入字符的第8位
IUCLC将输入的大写字符转换成小写字符
IXANY使任一字符都重新起动输出
IXOFF使起动/停止输入控制流起作用
IXON使起动/停止输出控制流起作用
PARMRK标记奇偶错

查一下,哪一个是0x1a。
leemuxiang 2005-06-10
  • 打赏
  • 举报
回复
options.c_iflag &= ~ICRNL;
options.c_iflag &= ~IXON;
options.c_iflag &= ~IXOFF;
asphp 2005-06-03
  • 打赏
  • 举报
回复
各位救我啊
asphp 2005-06-03
  • 打赏
  • 举报
回复
错了,是返回ERROR
asphp 2005-06-03
  • 打赏
  • 举报
回复
我没有调试过,不知道发出了什么东西,因为我是直接操作MODEM,需要0x1a来做为一条信息的结束,我用minicom可以发出这个字符,但用自己写的程序就返回0x1a
ssli 2005-06-02
  • 打赏
  • 举报
回复
换一种显示模式
积木 2005-06-02
  • 打赏
  • 举报
回复
1a 在ascii里面是文件结束的意思,
所以下面就是瞎猜的了
我怀疑你直接使用的是字符方式,而不是二进制的方式,如果使用二进制就会好很多。
「已注销」 2005-06-02
  • 打赏
  • 举报
回复
Linux里面的串口操作有原始和加工二种方式,用来传送数据时要用原始方式,而且要对一些起控制作用的字节进行屏蔽,设置超时和接收字节数这二个参数来标识是否完成一次传输。
gettext 2005-06-02
  • 打赏
  • 举报
回复
"但当我发出一个0x1a的时候,就不知道发出去什么了。"
发成功了吗?没有成功错误信息是什么?
zygjkl 2005-06-02
  • 打赏
  • 举报
回复
我也有类似的问题: 我用
g_fd = open("/dev/ttyS1", O_RDWR);
if (g_fd < 1) {
printf("open() returned an error (%d). errno = %d\n",
g_fd, errno);
return 0;
}

retlen = write(g_fd, outbuf, len);

outbuf里若包含0x0A,收到方的数据会在0x0A前面插入0x0D;
很奇怪!不知为什么????
六个九十度 2005-05-31
  • 打赏
  • 举报
回复
用什么终端软件?
我只用过minicom
好像还有个kermit,不过我没用过

ascii可发,而0x1a发不了,我想原因可能是你的传输模式是7位数据加1位奇偶校验
实际应设成8位数据,最后加个停止位
blueflame 2005-05-31
  • 打赏
  • 举报
回复
http://cmpp.linuxforum.net/cman-html/man3/tcgetattr.3.html
asphp 2005-05-31
  • 打赏
  • 举报
回复
我查了,设置是正确的,我是自己写的代码初始化的时候是这样的

void SetDataBit (MOBILECOMM* pMobile,INT32 databit)
{
pMobile->termios_new.c_cflag &= ~CSIZE;
switch (databit) {
case 8:
pMobile->termios_new.c_cflag |= CS8;
break;
case 7:
pMobile->termios_new.c_cflag |= CS7;
break;
case 6:
pMobile->termios_new.c_cflag |= CS6;
break;
case 5:
pMobile->termios_new.c_cflag |= CS5;
break;
default:
pMobile->termios_new.c_cflag |= CS8;
break;
}
}

void SetStopBit (MOBILECOMM* pMobile,const char *stopbit)
{
if (0 == strcmp (stopbit, "1")) {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1 stop bit */
}
else if (0 == strcmp (stopbit, "1.5")) {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1.5 stop bits */
}
else if (0 == strcmp (stopbit, "2")) {
pMobile->termios_new.c_cflag |= CSTOPB; /* 2 stop bits */
}
else {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1 stop bit */
}
}


void SetParityCheck (MOBILECOMM* pMobile,char parity)
{
switch (parity) {
case 'N': /* no parity check */
pMobile->termios_new.c_cflag &= ~PARENB;
break;
case 'E': /* even */
pMobile->termios_new.c_cflag |= PARENB;
pMobile->termios_new.c_cflag &= ~PARODD;
break;
case 'O': /* odd */
pMobile->termios_new.c_cflag |= PARENB;
pMobile->termios_new.c_cflag |= ~PARODD;
break;
default: /* no parity check */
pMobile->termios_new.c_cflag &= ~PARENB;
break;
}
}

INT32 SetPortAttr (MOBILECOMM *pMobile)
{

INT32 baudrate;
INT32 databit;
char *stopbit;
char parity;

baudrate=pMobile->baudrate;
databit=pMobile->databit;
stopbit=pMobile->stopbit;
parity=pMobile->parity;

bzero (&pMobile->termios_new, sizeof (pMobile->termios_new));
cfmakeraw (&pMobile->termios_new);
SetBaudrate (pMobile,baudrate);
pMobile->termios_new.c_cflag |= CLOCAL | CREAD; /* | CRTSCTS */
SetDataBit (pMobile,databit);
SetParityCheck (pMobile,parity);
SetStopBit (pMobile,stopbit);
pMobile->termios_new.c_iflag &= ~(XON);
pMobile->termios_new.c_lflag &=~(ICANON|ECHO|ECHOE|ISIG);
pMobile->termios_new.c_oflag &=~OPOST;
pMobile->termios_new.c_cc[VTIME] = 10; /* unit: 1/10 second. */
pMobile->termios_new.c_cc[VSUSP] = 0; /* Ctrl-z */
pMobile->termios_new.c_cc[VMIN] = 0; /* minimal characters for reading */
tcflush (pMobile->fd, TCIFLUSH);
return (tcsetattr (pMobile->fd, TCSANOW, &pMobile->termios_new));
}

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧