Linux 下的串口编程
程序员文章站
2024-01-23 14:52:10
...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc,char *argv[])
{
int fd = open(argv[1],O_RDWR|O_NOCTTY|O_NONBLOCK);
if(fd < 0){
perror("open tty");
return -1;
}
// struct termios
// {
// tcflag_t c_iflag; /* input mode flags */
// tcflag_t c_oflag; /* output mode flags */
// tcflag_t c_cflag; /* control mode flags */
// tcflag_t c_lflag; /* local mode flags */
// cc_t c_line; /* line discipline */
// cc_t c_cc[NCCS]; /* control characters */
// };
//下面所有的 &=~ 都是disable 的意思
//下面 |= 的是enable的意思
int usartFd = fd;
struct termios oldopts ,opts;
/*Put the state of FD into *TERMIOS_P*/
fcntl(fd,F_GETFD,0);
tcgetattr(fd, &oldopts);
/* Set both the input and output baud rates stored in *TERMIOS_P to SPEED. */
fcntl(fd, F_SETFL, 0);
cfsetispeed(&opts, B115200);
cfsetispeed(&opts, B115200);
/* Enable receiver. Ignore modem status lines. */
opts.c_cflag |= CREAD|CLOCAL;
/* Number of bits per byte (mask). */
opts.c_cflag &= ~CSIZE;
opts.c_cflag |= CS8;
/*disable Parity enable. */
opts.c_cflag &= ~PARENB;
/*disable Two stop bits instead of one. */
opts.c_cflag &= ~CSTOPB;
/*disable flow control */
opts.c_cflag &= ~CRTSCTS;
/*disable Do erase and kill processing. */
/* disable echo. */
/* disable signals. */
opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
/*disable Perform output processing. */
opts.c_oflag &= ~OPOST;
/* TCSANOW -> Change immediately. */
tcsetattr(fd,TCSANOW , &opts);
char *s = "poweroff";
char *enter = "\n";
int ret = write(fd,s,strlen(s));
ret = write(fd,enter,strlen(enter));
if(ret < 0){
perror("write cmd\n");
return -2;
}
close(fd);
return 0;
}
上一篇: Linux内核中内存cache的实现