您现在的位置: 爱51代码网 >> 范文 >> 文章正文
linux usb转串口代码

在用linux的串口操作外围的usb转串口的一个温湿度计
代码中将串口设置好了之后无论怎么读都不能读取出数据来
但是将外部设备拔下来然后再连接上
代码里不再设置串口的相关属性直接打开,就可以读取数据了,但是再进行与上一次串口同样的设置的话,又不能读取了。不知道是怎么回事儿。现在的问题是每次要操作设备,还得拔下来一次来再插上去,还要修改代码。请各位帮帮忙。。。
附上代码:
?#include <iostream> #include <fcntl.h> #include <termios.h> #include <stdio.h> using namespace std; int m_handle = 0; unsigned char startcmd01[4] = { 0x01, 0x80, 0x33, 0xfe }; void set_com(int fd) {     struct termios tm;     tcgetattr(fd, &tm);     cfmakeraw(&tm);     tcflush(fd, TCIOFLUSH);         tcsetattr(fd, TCSANOW, &tm);     tcflush(fd, TCIOFLUSH);     if (tcgetattr(fd, &tm) != 0) {         cout << "获取tm2失败" << endl;         return;     }     tm.c_cflag = B4800 | CRTSCTS | CS8 | CLOCAL | CREAD;     tm.c_iflag &= ~IGNPAR;     tm.c_cc[VTIME] = 150;     tm.c_cc[VMIN] = 6;     if (tcsetattr(fd, TCSANOW, &tm) != 0) {         cout << "设置tm2失败" << endl;         return;     }     tcflush(fd, TCIFLUSH); } int main() {     printf("---\n");     m_handle = open("/dev/ttyUSB0", O_RDWR);     if (m_handle == -1) {         return -1;     }     //printf("---\n");     //set_com(m_handle);         int count = write(m_handle, startcmd01, 4);     if (!count) {         cout << "write failed!" << endl;         return 0;     }     cout << "count:" << count << endl;     unsigned char readbuf[6] = { 0 };     printf("---\n");       read(m_handle, readbuf, 6);     printf("%d\n", readbuf[0]);     close(m_handle);     return 0; } 


系统ubuntu12.04     外部温度计temperhum232(usb转串口芯片ch341)
感觉应该好好看看连在串口上的那个设备的datasheet
很可能是你的操作顺序没有遵循设备的要求;
是我也不知道原因是怎额回事儿   我在程序设置串口的时候加了
 tm.c_cflag &= ~HUPCL;     tm.c_iflag &= ~INPCK;     tm.c_iflag |= IGNBRK;     tm.c_iflag &= ~ICRNL;     tm.c_iflag &= ~IXON;     tm.c_lflag &= ~IEXTEN;     tm.c_lflag &= ~ECHOK;     tm.c_lflag &= ~ECHOCTL;     tm.c_lflag &= ~ECHOKE;     tm.c_oflag &= ~ONLCR;

就正确了  应该是串口设置不正确导致的。。。  但是还是不明白为什么会出现拔了硬件再插上就正确了。。。

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    TClientDataSet如何避免多人更新
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    shell 命令如何从post 数据接
    gdb7.7调试无法直接输出vect
    ubuntu编译binutils错误形参
    Excess session Logs Record
    fdisk 分区No free sectors 
    linux那么多命令请问要掌握到
    linux文件锁代码
    linux内核定时器加载就死机
    linux下WORD密码输入错误三次
    linux子进程中如何读取某个全
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |