linux下串口编程代码

1. [代码][C/C++]代码     跳至 [1] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值