• 6724阅读
  • 3回复

[提问]为什么串口收不到数据呢? [复制链接]

上一主题 下一主题
离线mrcalifor
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-08
要求是通过开发板的串口向另一目标版收发数据
再网上查阅了相关资料,进行了修改后如下:
void Thread::run()          //这就是线程的具体工作了
{
    int fd,res;
    struct termios oldtio,newtio;     //termios结构是用来保存波特率、字符大小等

    qDebug()<<"start";

    //fd=open(RS_DEVICE,O_RDWR|O_NOCTTY);     //以读写方式打开串口。不控制TTY
    fd=open(RS_DEVICE,O_RDWR);     //以读写方式打开串口。不控制TTY
    if(fd<0)
    {
        perror("error");
        exit(1);                             //失败退出
    }
    qDebug()<<fd;

    qDebug()<<"Open...\n";

    tcgetattr(fd,&oldtio);             //保存当前设置到oldtio
    bzero(&newtio,sizeof(newtio));     //清除newtio结构,并重新对它的成员设置如下

    newtio.c_cflag=BAUDRATE|CS8|CLOCAL|CREAD;  //9600、8位、忽略DCD信号、启用接收装置
    newtio.c_iflag|=IGNPAR;                    //忽略奇偶
    newtio.c_oflag=0;
    newtio.c_lflag=0;
    newtio.c_cc[VMIN]=0;
    newtio.c_cc[VTIME]=100;                   //在规定时间(VTIME)内读取(VMIN)个字符;
    tcflush(fd,TCIFLUSH);                    //清除所有队列在串口的输入与输出;
    tcsetattr(fd,TCSANOW,&newtio);           //把我们的设置写入termios

    while(stopped)                          //stopped为0时将退出线程
    {
        if(write_rs)                           //write_rs为1时把字符串从串口中输出
        {
            qDebug()<<"write start!";
            write_rs=0;
            write(fd,"QtEmbedded-4.5.1",16);
            qDebug()<<"write over!";

        }
        if(read_rs)                           //read_rs为1时读取,并存在buf
        {
            qDebug()<<"read start!";
            read_rs=0;
            res=read(fd,buf,16);
            qDebug()<<res;

            buf[res]='\0';
            qDebug()<<buf;
            qDebug()<<"read over!";
            emit finished();                      //读完后发一个信号
        }
    }
    printf("Close...\n");
    tcsetattr(fd,TCSANOW,&oldtio);      //重新设置回原来的
    close(fd);
    quit();
}
为何不能收到数据?res一直是零。球高手指导,本人菜鸟!
离线isaacedvr
只看该作者 1楼 发表于: 2012-05-08
你可以进我空间去看看 有类似的 已经解决了
离线mrcalifor
只看该作者 2楼 发表于: 2012-05-09
回 1楼(isaacedvr) 的帖子
指条明路吧,我先在还不能做到基本的串口通讯。。。
离线isaacedvr
只看该作者 3楼 发表于: 2012-05-18
回 2楼(mrcalifor) 的帖子
首先得确定下位机(如单片机)的程序正常,然后再用Qt的串口类 建议: 好好看看网上那的个文档 ,对你会有很大的帮助,当时我就是看的文档做出来的
快速回复
限100 字节
 
上一个 下一个