用CSerialPort类收不到0x11, 0x13问题及解决办法
来源:互联网 发布:纪念日软件iphone 编辑:程序博客网 时间:2024/05/16 17:12
在VS2010平台下编写modbusRTU程序,在调试的时候发现CSerialPort串口类无法接收到0x11, 0x13,随后百度找的一篇Linux下的文章,大受启发,原文如下:
linux串口接收不到0x11解决
网上许多流行的linux串口编程的版本中都没对c_iflag(termios成员变量)这个变量进行有效的设置,这样传送ASCII码时没什么问题,但传送二进制数据时遇到0x0d,0x11和0x13却会被丢掉。不用说也知道,这几个肯定是特殊字符,被用作特殊控制了。关掉ICRNL和IXON选项即可解决。
www.2cto.com
c_iflag &= ~(ICRNL | IXON);
0x0d 回车符CR
0x11 ^Q VSTART字符
0x13 ^S VSTOP字符
ICRNL 将输入的CR转换为NL
IXON 使起动/停止输出控制流起作用
在《UNIX环境高级编程第二版》第18章第11小节看到把终端I/O设置为原始模式(串口通讯就是终端I/O的原始模式)时输入属性设置为
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
屏蔽了许多属性,怪不得有人说如果是使用串口通讯c_iflag和c_oflag都设置为0就行了! www.2cto.com
以下是我的设置的一些重要的串口属性
term.c_cflag |= CLOCAL | CREAD;
term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
term.c_oflag &= ~OPOST;
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
http://www.2cto.com/os/201302/189931.html我在VS2010工程里打开串口方法里做如下配置即可,不知道还会不会再有问题
//m_Serial 为 CSerialPort的对象
m_Serial.Open(info->comPort, info->comBand, CSerialPort::NoParity, 8,
CSerialPort::OneStopBit, CSerialPort::NoFlowControl);
- 用CSerialPort类收不到0x11, 0x13问题及解决办法
- linux 串口接收不到0x11、0x13、0x0d
- linux 串口接收不到0x11, 0x0d, 0x13
- linux串口接收不到0x0d|0x11|0x13解决
- linux串口编程传送二进制数据时遇到0x0d,0x11和0x13会被丢掉问题
- SPComm的一点小诀窍 spcomm的问题导致数据丢失 0x11与0x13错误
- linux串口0x03,0x13问题
- 703n路由器 openwrt 串口 不能传送 0x11 0x13
- linux串口接收不到0x11解决
- linux 串口接收不到0x11
- LINUX --- 中断 --- INT 0x13
- int 0x13 中断理解
- int 0x13 中断理解
- linux 串口数据丢失 接收不到0x11
- CSerialPort类的问题求助
- 取磁盘驱动器参数 int 0x13
- int 0x13中断的参数传递
- 取磁盘驱动器参数 int 0x13
- 按规定放假:为什么没有早回家
- 一个优秀的团队需要这6种人
- 关于SO_REUSEADDR的使用说明~
- ireport scriptlet
- mysql-5.6 linux安装方法详细记录
- 用CSerialPort类收不到0x11, 0x13问题及解决办法
- 室内地图:Indoor map for iOS & Android without GPS and Internet
- Mina框架学习笔记(三)
- C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- set button background to color
- 软件概要设计
- 暑假编程训练---D:打印金字塔
- URL特殊字符转义
- LINUX0.11内核阅读笔记