返回顶部

收藏

linux下串口编程

更多

使用linux下串口编程,实现串口间的通信,通过使用linux下的串口进行控制一些串口设备。

#include <time.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <termio.h>
#include <syslog.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <semaphore.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <bits/signum.h>
#include <sys/resource.h>

int uart_init(int arg, int baud)
{
    int fd;
    char port[20];
    struct termios Opt;
    int uartbiit[50]= {B115200,B9600,B19200,B4800,B2400,B1200};

    sprintf(port,"/dev/s3c2410_serial%d",arg);   
    printf("Use port: %s \\n", port);
    fd = open(port, 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[300];

    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));

#if 0
                   while((len = read(fd,buf,64))>0)
                   {
                        printf("%s\\n",buf);
                    }
#endif

#if 1
    int nread;
    while((nread = read(fd, buf, 300))>0)
    {
//      printf("read len %d\\t",nread);
//      buf[nread] = '\\0';
        printf("%s\\n",buf);
        write(fd,buf,sizeof(buf));

    }
#endif
          }

    return 0;
}
//该片段来自于http://outofmemory.cn

标签:c++,基础

收藏

0人收藏

支持

0

反对

0

发表评论