日期:2014-05-16  浏览次数:20813 次

请教一个关于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
很可能是你的操作顺序没有遵循设备的要求;