Linux串口编程之发送
2016-03-17 11:23
302 查看
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <errno.h> int set_opt(int,int,int,char,int); void main() { int fd,wr_static,i=10; char *uart3 = "/dev/ttySAC3"; char *buffer = "hello world!\n"; printf("\r\n4412 uart3 writetest start\r\n");//打印信息,例程基于<span style="font-family: MicrosoftYaHei; font-size: 12pt;">Exynos4412<br style="orphans: 2; text-align: -webkit-auto; widows: 2;" /></span> //打开串口 if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0){ printf("open %s is failed",uart3); } else{ printf("open %s is success\n",uart3); set_opt(fd, 115200, 8, 'N', 1);//串口设置 while(i--) { wr_static = write(fd,buffer, strlen(buffer)); if(wr_static<0) printf("write failed\n"); else{ printf("wr_static is %d\n",wr_static); } sleep(1); } } close(fd); } //串口设置函数 int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop) { struct termios newtio,oldtio; if ( tcgetattr( fd,&oldtio) != 0) { perror("SetupSerial 1"); return -1; } bzero( &newtio, sizeof( newtio ) ); newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; switch( nBits ) { case 7: newtio.c_cflag |= CS7; break; case 8: newtio.c_cflag |= CS8; break; } switch( nEvent ) { case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break; case 'E': newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break; case 'N': newtio.c_cflag &= ~PARENB; break; } switch( nSpeed ) { case 2400: cfsetispeed(&newtio, B2400); cfsetospeed(&newtio, B2400); break; case 4800: cfsetispeed(&newtio, B4800); cfsetospeed(&newtio, B4800); break; case 9600: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break; case 460800: cfsetispeed(&newtio, B460800); cfsetospeed(&newtio, B460800); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; } if( nStop == 1 ) newtio.c_cflag &= ~CSTOPB; else if ( nStop == 2 ) newtio.c_cflag |= CSTOPB; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; tcflush(fd,TCIFLUSH); if((tcsetattr(fd,TCSANOW,&newtio))!=0) { perror("com set error"); return -1; } // printf("set done!\n\r"); return 0; }
相关文章推荐
- [转]Linux后台进程管理利器:supervisor
- 最新精简型 Linux 桌面环境大比拼:LXDE Vs. Xfce Vs. MATE
- centOS 开启 nfs功能
- Linux的Signal及Singal处理(SIGQUIT SIGKILL SIGBUS等)
- CentOS下通过yum安装svn及配置
- Linux登录报错-Connection closed by foreign host
- Linux 命令&和&&的区别
- Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程
- Linux中select函数学习及实例笔记
- centos7下使用yum安装mysql
- Linux 初始化 init 系统,UpStart
- Linux内核分析作业四
- 编译内核步骤(已验证)
- Linux常用命令
- Linux echo和read命令
- linux 2.6 CFS完全公平调度器内幕
- unbuntu源更新经验分享
- linux命令学习一 :touch和mkdir 创建文件和文件夹
- Linux编译.so文件,调用.so文件
- 集群配置必知:linux下yum安装及配置