Linux 下的串口编程

#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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值