• 5272阅读
  • 3回复

Linux下串口通讯问题求解~~! [复制链接]

上一主题 下一主题
离线yzy727
 

只看楼主 倒序阅读 楼主  发表于: 2008-12-19
— 本帖被 XChinux 从 Qt Installing & Deployment 移动到本区(2009-01-03) —
我把Pc机COM1口 2和3引脚连接起来,自己发送自己接收;

我的编写的串口通讯程序只能写数据,  不能读出数据,  读出的数据个数为0,  有可能是什么原因啊??
[ 此贴被XChinux在2009-01-06 11:53重新编辑 ]
成就一番事业,早点结婚~~
离线yzy727

只看该作者 1楼 发表于: 2008-12-21
怎么没人回啊;  贴代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/signal.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h> 
#include <string.h>
#include <unistd.h>
#include <errno.h>   
#include <stdlib.h>

#define  MODEMDEVICE    "/dev/ttyS0"

void getErrno()
{
    switch(errno)
    {
    case EINTR:printf(" EINTR!!");break;
    case EAGAIN:printf(" EAGAIN!!");break;
    case EBADF:printf(" EADF!!");break;
    default:printf(" No errno!");
    }
}

int main()
{
    int    fd,readnum=0,writenum=0,n = 0;
    struct termios oldtio,newtio;
    char buf[15],readbuf[20]={'a'};
    strcpy(buf,"ATD13631562519;");
    printf("start ...\n");

    fd = open(MODEMDEVICE,O_RDWR | O_NOCTTY); //| O_NONBLOCK );
    if (fd < 0 )
    {
      perror(MODEMDEVICE);
      exit(1);
    }
    printf("open...fd=%d\n",fd);

    tcgetattr(fd,&oldtio);
    tcgetattr(fd,&newtio);

    tcflush(fd,TCIOFLUSH);
    bzero(&newtio,sizeof(newtio));
   
    newtio.c_cflag &= ~PARENB;
    newtio.c_iflag &= ~INPCK;
    newtio.c_cflag &= ~CSTOPB;
    newtio.c_cflag &= ~CSIZE;
    newtio.c_cflag |= CS8;
   
    cfsetispeed(&newtio,B115200);
    cfsetospeed(&newtio,B115200);

    //newtio.c_cc[VTIME] = 0;   
    //newtio.c_cc[VMIN]  = 1;
   
    newtio.c_iflag &= ~(ICANON | ECHO |ECHOE |ISIG);
    newtio.c_oflag &= ~OPOST;

    if(tcsetattr(fd,TCSANOW,&newtio) != 0)
    printf("Set Failed");

    printf("writing data...\n");
    tcflush(fd,TCIOFLUSH);
 
    //while(n<5)
    {
    writenum = write(fd,buf,sizeof(buf));
    printf("\n WriteNumber=%d ",writenum);
    getErrno();
   
    n++;
    }
        tcflush(fd,TCOFLUSH);
    printf("\nreading data...\n");

    while(readbuf[0] != 'q')
    {   
        readnum = read(fd,readbuf,25);
        printf("ReadNum=%d,%s",readnum,readbuf);
        getErrno();
    }

    tcsetattr(fd,TCSANOW,&oldtio);
    printf("\n close...\n");
    close(fd);
    return 0;
}
成就一番事业,早点结婚~~
离线wd007

只看该作者 2楼 发表于: 2008-12-21
打断点调试一下,看看
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线duanchao1230
只看该作者 3楼 发表于: 2010-04-12
来个高手解决下我也很想知道问题出在那
快速回复
限100 字节
 
上一个 下一个