首先选择串口:位置方便,不和串口终端重合,定义char* 为串口节点目录(/dev/tty/ttysac3)
char *uart3 = "/dev/ttySAC3";
然后定义一个发送数据buffer
char *buffer = "hello world !\n";
打开串口,调用配置函数SET_OPT(自己定义的)
if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0){printf("open %s is failed",uart3);//open failed error information}else{printf("open %s is success\n",uart3);set_opt(fd, 115200, 8, 'N', 1); //set series port optional functionwhile(i--){wr_static = write(fd,buffer, strlen(buffer)); //witer bufferif(wr_static<0)printf("write failed\n");//error infoelse{printf("wr_static is %d\n",wr_static);}sleep(1);//sleep 1 second}}close(fd);//release fd(dev/ttySAC3)
整个编写完之后,使用
arm-none-linux-gnueabi-gcc -o uartwrite uartwrite.c
命令来编译这个程序,生成之后用U盘或者其他方式放在目标arm处理器中使用
./uartwrite
即可执行该程序~
执行后如下
wly uart3 writetest start
open /dev/ttySAC3 is success
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
wr_static is 13
[root@wly]#
整个代码如下
#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\nwly uart3 writetest start\r\n");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;
}