免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1753 | 回复: 0
打印 上一主题 下一主题

关于串口读写程序的问题,各位高手请帮帮忙,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-16 20:48 |只看该作者 |倒序浏览
小弟最近的任务是要求往USB转串口里写入十六进制数FFFF474D,然后下位机就可以传输采集的信号给ARM。我在串口调试助手里输入时确实能看到采集的信号。然而我在linux里编程时确怎么都不会显示。麻烦各位高手给指教下是哪里的问题,以下是我的程序,多谢了!

#include     <stdio.h>
#include     <stdlib.h>
#include     <unistd.h>  
#include     <sys/types.h>
#include     <sys/stat.h>
#include     <fcntl.h>
#include     <termios.h>
#include     <errno.h>
   
main()
{
    int fd;
    int i;
    int len;
    int n = 0;      
    struct termios opt;
   
    fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);    //默认为阻塞读方式
    if(fd == -1)
    {
        perror("open serial 0\n");
        exit(0);
    }

    tcgetattr(fd, &opt);      
    cfsetispeed(&opt, B38400);
    cfsetospeed(&opt, B38400);
   
    if(tcsetattr(fd, TCSANOW, &opt) != 0 )
    {     
       perror("tcsetattr error");
       return -1;
    }
   
    opt.c_cflag &= ~CSIZE;  
    opt.c_cflag |= CS8;   
    opt.c_cflag &= ~CSTOPB;
    opt.c_cflag &= ~PARENB;
    opt.c_cflag &= ~INPCK;
    opt.c_cflag |= (CLOCAL | CREAD);

    opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

    opt.c_oflag &= ~OPOST;
    opt.c_oflag &= ~(ONLCR | OCRNL);    //添加的

   opt.c_iflag &= ~(ICRNL | INLCR);
    opt.c_iflag &= ~(IXON | IXOFF | IXANY);    //添加的
   
   opt.c_cc[VTIME] = 0;
    opt.c_cc[VMIN] = 0;
   
    tcflush(fd, TCIOFLUSH);

    printf("configure complete\n");
   
    if(tcsetattr(fd, TCSANOW, &opt) != 0)
    {
        perror("serial error");
        return -1;
    }
    printf("start send and receive data\n");
  
    while(1)
    {   
        char read_buf[128];
        char write_buf[]={(int)0xFF,(int)0xFF,(int)0x47,(int)0x4D};
        n = 0;
        len = 0;
        bzero(read_buf, sizeof(read_buf));   
      
        write(fd,write_buf,sizeof(write_buf));
        printf("send string\n");

        while( (n = read(fd, read_buf, sizeof(read_buf))) > 0 )
        {
            printf("reading...... \n");
            printf("read=%d\n",n);
            for(n=0;n<128;n++)
            {   
                printf("%x",read_buf[n]);
            }
        }
        
        sleep(5);
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP