主题 : 关于串口通信的小程序,收发不正常,求指点 复制链接 | 浏览器收藏 | 打印
我最虚心
级别: 新手上路
UID: 44872
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2011-04-29
最后登录: 2014-03-08
楼主  发表于: 2012-05-15 08:32

 关于串口通信的小程序,收发不正常,求指点

int uart_init(int arg, int baud)
{
    int fd;
    char port[20];
    struct termios Opt;
    int uartbiit[50]= {B9600,B19200,B4800,B2400,B115200,B1200};
    sprintf(port,"/dev/ttySAC%d",arg);  
    printf("Use port: %s \n", port);
    fd = open("/dev/ttySAC1", O_RDWR);     //打开串口
    if (fd<0)
    {
        return -1;                 //没有打开返回
    }
    tcgetattr(fd,&Opt);      //初始化
    tcflush(fd,TCIFLUSH);
    cfsetispeed(&Opt,uartbiit[baud]);    //设置波特率
    cfsetospeed(&Opt,uartbiit[baud]);
    Opt.c_cflag |= CS8;                          //设置数据位
    Opt.c_cflag &= ~PARENB;
    Opt.c_oflag &= ~(OPOST);
    Opt.c_cflag &= ~CSTOPB;
    Opt.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
    Opt.c_iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON);
    Opt.c_cc[VMIN] = 64;            //最大长度
    Opt.c_cc[VTIME] = 1;            //超时时间
    if (tcsetattr(fd,TCSANOW,&Opt) != 0)       //装载初始化参数
    {
        perror("SetupSerial!\n");
        close(fd);
        return -1;
    }
    return(fd);
}
int main()
{
    int fd, len = 0, i=0;
    char buf[64];
    if((fd = uart_init(1, 0)) <0)   //打开串口,波特率为115200;
    {
        printf("Open uart err \n");
        return -1;
    }
    sprintf(buf, "Hello world !\n");   //输出内容

  while(1)
          {
    memset(buf, 0 ,sizeof(buf));
                   while((len = read(fd,buf,64))>0)
                   {
                        printf("%s\n",buf);
                    }
          }


    return 0;
}