社区
Linux/Unix社区
帖子详情
一百分求lINUX串口通讯不能发出'\1a'的问题
asphp
2005-05-31 11:27:47
我在做串口通讯时,一般的ASCII都能够发出去,但当我发出一个0x1a的时候,就不知道发出去什么了。是不是对于CTROL-Z有什么特殊的做法,或者在初始化的时候应该做好一个工作?
谢谢各位
...全文
400
14
打赏
收藏
一百分求lINUX串口通讯不能发出'\1a'的问题
我在做串口通讯时,一般的ASCII都能够发出去,但当我发出一个0x1a的时候,就不知道发出去什么了。是不是对于CTROL-Z有什么特殊的做法,或者在初始化的时候应该做好一个工作? 谢谢各位
复制链接
扫一扫
分享
转发到动态
举报
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));
}
Linux
(更新中~)
在
Linux
系统中,文件名以点(.)开头通常具有特殊的含义,这种文件通常被称为“隐藏文件”。隐藏文件在
Linux
系统中不会在普通的文件浏览器中显示,除非用户显式地设置文件浏览器显示隐藏文件。这种设计有助于隐藏系统和配置文件,以及其他用户可能不需要直接操作的文件,从而保持文件系统的整洁性和安全性。:文件管理器默认不显示以点开头的文件,这些文件对于用户来说是隐藏的。:许多以点开头的文件是用来存储应用程序或系统的配置信息,如.bashrc.gitignore等。:有时以点开头的文件用于存储临时数据,例如。
Modbus通讯协议整理
modbus通讯协议整理
C 语言常见
问题
集
C 语言常见
问题
集原著:SteveSummit翻译:朱群英,孙云修订版0.9.4,2005年6月23日版权所有c. 2005 目录目录 i 前言 xvii 1 声明和初始化 1 1.1 我如何决定使用那种整数类型?................... 11.264位机上的64位类型是什么样的?................ 11.3 怎样定义和声明全局变量和函数最好?.........
成功烧写TMS320F2812经验
flash内得程序代码以最快速度运行,需要设置flash配置寄存器的等待周期数,而“设置flash配置寄存器的等待周期数”的这段代码是
不能
在flash内部执行的,这样就会出现两种实际的配置方式: 一种是2812系统无外扩程序存储器,此时程序只能写在2812内部得flash区,程序运行开始后,需要将“设置flash配置寄存器的等待周期数”的这段代码用数据复制的方式复制到内部sram区,比如 L0
uC
linux
启动过程
uCinux的启动主要经历三个阶段。首先,必须完成CPU和存储器的硬件初始化,在系统RAM中建立程序堆栈和数据段,建立程序的运行时的环境。初始化完成之后,uC
linux
内核就取得了CPU的控制权,开始操作系统自身的初始化,这包括建立RAM中断矢量表、加载设备驱动程序、内存管理模块等等。这一切完成后,uC
linux
启动一个最初的init线程,进入到第三阶段,这时内核已经正常运行,外围模块也都就绪,开
Linux/Unix社区
23,216
社区成员
74,539
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章