Linux串口通信例子

来源:互联网 发布:人工智能英文参考文献 编辑:程序博客网 时间:2024/05/16 06:22
#include <time.h>
002#include <fcntl.h>
003#include <stdio.h>
004#include <ctype.h>
005#include <errno.h>
006#include <stdlib.h>
007#include <string.h>
008#include <unistd.h>
009#include <signal.h>
010#include <termio.h>
011#include <syslog.h>
012#include <pthread.h>
013#include <sys/ipc.h>
014#include <sys/msg.h>
015#include <sys/wait.h>
016#include <sys/stat.h>
017#include <sys/time.h>
018#include <semaphore.h>
019#include <arpa/inet.h>
020#include <sys/types.h>
021#include <sys/socket.h>
022#include <bits/signum.h>
023#include <sys/resource.h>
024  
025int uart_init(int arg, int baud)
026{
027    intfd;
028    charport[20];
029    structtermios Opt;
030    intuartbiit[50]= {B115200,B9600,B19200,B4800,B2400,B1200};
031  
032    sprintf(port,"/dev/s3c2410_serial%d",arg);   
033    printf("Use port: %s \n", port);
034    fd = open(port, O_RDWR);    //打开串口
035    if(fd<0)
036    {
037        return-1;                 //没有打开返回
038    }
039  
040    tcgetattr(fd,&Opt);     //初始化
041    tcflush(fd,TCIFLUSH);
042    cfsetispeed(&Opt,uartbiit[baud]);   //设置波特率
043    cfsetospeed(&Opt,uartbiit[baud]);
044  
045    Opt.c_cflag |= CS8;                         //设置数据位
046    Opt.c_cflag &= ~PARENB;
047    Opt.c_oflag &= ~(OPOST);
048    Opt.c_cflag &= ~CSTOPB;
049    Opt.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
050    Opt.c_iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON);
051  
052    Opt.c_cc[VMIN] = 64;           //最大长度
053    Opt.c_cc[VTIME] = 1;           //超时时间
054  
055    if(tcsetattr(fd,TCSANOW,&Opt) != 0)       //装载初始化参数
056    {
057        perror("SetupSerial!\n");
058        close(fd);
059        return-1;
060    }
061    return(fd);
062  
063}
064  
065int main()
066{
067    intfd, len = 0, i=0;
068    charbuf[300];
069  
070    if((fd = uart_init(1, 0)) <0)  //打开串口,波特率为115200;
071    {
072        printf("Open uart err \n");
073        return-1;
074    }
075    sprintf(buf,"Hello world !\n");  //输出内容
076   
077  while(1)
078          {
079    memset(buf, 0 ,sizeof(buf));
080      
081#if 0
082                   while((len = read(fd,buf,64))>0)
083                   {
084                        printf("%s\n",buf);
085                    }
086#endif
087  
088  
089#if 1
090    intnread;
091    while((nread = read(fd, buf, 300))>0)
092    {
093//      printf("read len %d\t",nread);
094//      buf[nread] = '\0';
095        printf("%s\n",buf);
096        write(fd,buf,sizeof(buf));
097      
098    }
099#endif
100          }
101   
102   
103    return0;
104}
原创粉丝点击