Linux下串口操作-嵌入式-C语言实现

2019-07-12 16:30发布

嵌入式开发板到手后一般都会开放串口,对串口的操作可以说是最基本的操作,那么拿到开发板后怎样操作串口呢?怎样利用串口向外发送数据呢?我做的是一个通过串口来发送一串字符,实现NBIot的传输,系统是linux系统下的,发送的数据需要是16进制的数据。以下是c语言开发串口的相关代码记录。1.找到串口的设备号在linux系统下,所有的设备都是文件,所以要先找到串口这个设备文件,之后就可以对这个串口进行操作。#define UART_DEV "/dev/ttyAMA2"2.打开串口并初始化串口串口的打开只需要一个open函数就可以打开,下面有一个初始化的函数,先将串口打开,如果打开成功,会返回一个设备描述符。int uart_init(void ) { int fd=0; fd = open(UART_DEV , O_RDWR|O_NOCTTY|O_NDELAY, 0); if (fd < 0) { printf("open error! "); return -1; } set_opt(fd); return fd; }set_opt函数用于设置串口的相关基本参数,一般串口都会设置波特率什么的,其余的参数可以用到的时候再查询是什么意思,set_opt函数的定义如下:int set_opt(int fd) { struct termios old_cfg, new_cfg; tcgetattr(fd, &new_cfg); new_cfg.c_cflag |= (CLOCAL | CREAD); cfsetispeed(&new_cfg, B9600);//设置波特率 cfsetospeed(&new_cfg, B9600); new_cfg.c_cflag &= ~CSIZE; new_cfg.c_cflag |= CS8; new_cfg.c_cflag &= ~PARENB; new_cfg.c_cflag &= ~CSTOPB; new_cfg.c_cc[VTIME] = 0; new_cfg.c_cc[VMIN] = 0; tcflush(fd,TCIFLUSH); tcsetattr(fd, TCSANOW, &new_cfg); return 0; }这样设置好了以后,串口的初始化基本就完成了。3.用串口发送一串数据利用串口发送一串数据,writeint uart_send( int fd, char * str) { int wr_num; char buf[1024]; sprintf(buf, "%s", str); wr_num = write(fd,buf,strlen(buf)); close(fd); return wr_num; }4.读出串口接收到的数据,readint uart_recv(int fd) { int nread; char buf[1024]; nread = read(fd, buf, LEN); if(nread > 0) { printf("%s ",buf); }         close(fd); return nread ; } 串口的基本操作就是读入读出了,关闭直接close即可。