导航:首页 > 操作系统 > linux串口代码

linux串口代码

发布时间:2022-09-08 12:10:08

linux串口连接ttyS0、ttyS1是什么意思

这是通信串口名称。
在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作为通信串口。在打开ttyS0的时候,选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行; O_NDELAY表示打开串口的时候,程序并不关心另一端 的串口是否在使用中。在Linux中,打开串口设备和打开普通文件一样,使用的是open()系统调用。比如我么打开串口设备1也就是COM1,只需要:
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );
打开的串口设备有很多设置选项。本文中使用int setup_com(int fd)设置。在系统头文件中 定义了终端控制结构struct termios,tcgetattr()和tcsetattr()两个系统函数获得和设置这些属性。结构 struct termios中的域描述的主要属性包括:
c_cflag : 控制选项
c_lflag : 线选项
c_iflag : 输入选项
c_oflag :输出选项
c_cc :控制字符
c_ispeed :输入数据波特率
c_ospeed :输出数据波特率
如果要设置某个选项,那么就使用"|=“运算,如果关闭某个选项就使用”&=“和”~"运算。本文使用的各个选项的意义定义如下:
c_cflag:
CLOCAL 本地模式,不改变端口的所有者
CREAD 表示使能数据接收器
PARENB 表示偶校验
PARODD 表示奇校验
CSTOPB 使用两个停止位
CSIZE 对数据的bit使用掩码
CS8 数据宽度是8bit
c_lflag:
ICANON 使能规范输入,否则使用原始数据(本文使用)
ECHO 回送(echo)输入数据
ECHOE 回送擦除字符
ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信号
c_iflag:
IXON 使能输出软件控制
IXOFF 使能输入软件控制
IXANY 允许任何字符再次开启数据流
INLCR 把字符NL(0A)映射到CR(0D)
IGNCR 忽略字符CR(0D)
ICRNL 把CR(0D)映射成字符NR(0A)
c_oflag: OPOST 输出后处理,如果不设置表示原始数据(本文使用原始数据)
c_cc[VMIN]: 最少可读数据
c_cc[VTIME]: 等待数据时间(10秒的倍数)

Ⅱ linux用中断接收串口数据的原代码!

以前写的,但是没写完,偏偏你要的那部分没写。呵呵~~
先声明,没调试过。。仅供参考,有错误的地方请指正,谢谢!
////////////////////////
/******setport.h*******/
////////////////////////
#ifndef SETPORT_H
#define SETPORT_H

/*********************

int dwBaudRate; //波特率
char bTTY; //串口号
char bDataBit; //数据位 5,6,7,8
char bParity; //奇偶校验 无校验:'N' 偶校验'E' 奇校验'O'
char bStopBit; //停止位 1,2
char bFctl; //流控制 无控制:'N' 硬件控制:'H' 软件控制:'S'

**********************/
//-------------------打开串口-------------------//bTTY==0,1,2,3, 对应串口Com1到Com4,成功返回文件描述符,失败==(-1)
extern int PortOpen(char bTTY);

//-------------------设置串口-------------------//成功==(0) 失败==(-1)
extern int PortSet(int dwFdcom,int dwBaudRate,char bTTY,char bDataBit,char bParity,char bStopBit,char bFctl);

//-------------------关闭串口-------------------//
extern void PortClose(int dwFdcom);

//-------------------写串口-------------------//成功返回datalen 失败==(<0)
extern int PortWrite(int dwFdcom,char *cpSendBuf,unsigned int DataLen);

//-------------------读串口-------------------//成功返回datalen 失败==(-1)
extern int PortRead(int dwFdcom,char *cpRecvBuf,unsigned int DataLen,unsigned int dwBaudRate);

//-------------------超时设置-------------------//成功==0 失败==(<0)
extern int PortTimeOut(int dwFdcom, char timeout, int len);

#endif

/////////////////////////////
/***********setport.c*******/
////////////////////////////
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include "setport.h"

//-------------------打开串口-------------------//
extern int PortOpen(char bTTY)
{
int dwFdcom;
unsigned char Ptty[10]="/dev/ttyS";
unsigned char *cpGtty;
cpGtty=strcat(Ptty,&bTTY);
if(!cpGtty) return -1;
else {
dwFdcom=open(cpGtty,O_RDWR|O_NOCTTY);
}
return (dwFdcom);
}

//-------------------关闭串口-------------------//
extern void PortClose(int dwFdcom)
{
close(dwFdcom);
}

//-------------------设置串口-------------------//
extern int PortSet(int dwFdcom,int dwBaudRate,char bTTY,char bDataBit,char bParity,char bStopBit,char bFctl)
{
static int speed_arr[] = {B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300};

static int name_arr[] = {38400, 19200, 9600, 4800, 2400,1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300};

struct termios oldtm_t,newtm_t;
int i=0; char *pDatabit;

bzero(&oldtm_t,sizeof(oldtm_t));
bzero(&newtm_t,sizeof(newtm_t));
cfmakeraw(&newtm_t);
tcgetattr(dwFdcom,&oldtm_t);
/*------------设置端口属性------------*/
for( ; i<sizeof(speed_arr)/sizeof(int) ; i++)
{
if(dwBaudRate==name_arr[i])
{
cfsetispeed(&newtm_t,speed_arr[i]);
cfsetospeed(&newtm_t,speed_arr[i]);
}
else return -1;
}
newtm_t.c_cflag|=CLOCAL;
newtm_t.c_cflag|=CREAD;
newtm_t.c_cflag &= ~CSIZE;

switch(bDataBit) //数据位
{
case '5':
newtm_t.c_cflag|=CS5;
break;
case '6':
newtm_t.c_cflag|=CS6;
break;
case '7':
newtm_t.c_cflag|=CS7;
break;
case '8':
newtm_t.c_cflag|=CS8;
break;
default:
return -2;

}
switch(bParity)
{
case 'N':{ //无校验
newtm_t.c_cflag&=~PARENB;
newtm_t.c_iflag&= ~INPCK;
}break;
case 'O':{ //奇校验
newtm_t.c_cflag |= (PARODD | PARENB);
newtm_t.c_iflag |= INPCK;
}break;
case 'E':{ //偶校验
newtm_t.c_cflag |= PARENB;
newtm_t.c_cflag &= ~PARODD;
newtm_t.c_iflag |= INPCK;
}break;
default:
return -3;
}
//停止位
if(bStopBit=='2') newtm_t.c_cflag|=CSTOPB; //2
else newtm_t.c_cflag&=~CSTOPB; //1

switch(bFctl) //流控制
{
case 'N':{ //无控制
newtm_t.c_cflag &= ~CRTSCTS;
newtm_t.c_iflag &= ~(IXON | IXOFF | IXANY );
}break;
case 'H':{ //硬件控制
newtm_t.c_cflag |= CRTSCTS;
newtm_t.c_iflag &= ~(IXON | IXOFF | IXANY );
}break;
case 'S':{ //软件控制
newtm_t.c_cflag &= ~CRTSCTS;
newtm_t.c_iflag |= (IXON | IXOFF | IXANY );
}break;
default:
return -4;

}

tcflush(dwFdcom,TCIFLUSH); //端口复位
tcsetattr(dwFdcom,TCSANOW,&newtm_t); //使端口属性设置生效
return 0;

}

//-------------------超时设置-------------------//
extern int PortTimeOut(int dwFdcom, char timeout, int len)
{
struct termios newtm_t;

if(tcgetattr(dwFdcom, &newtm_t) != 0)
{
return (-1);
}

newtm_t.c_lflag &= ~ICANON;
newtm_t.c_cc[VTIME] = timeout;
newtm_t.c_cc[VMIN] = len;

if(tcsetattr(dwFdcom, TCSANOW, &newtm_t) != 0)
{
return (-2);
}

return 0;
}

////读写串口用文件读写方式,read和write两个方法,
////read是接收数据,write是发送数据

Ⅲ 如何查看linux串口cts

在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作为通信串口。在打开ttyS0的时候,选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行; O_NDELAY表示打开串口的时候,程序并不关心另一端 的串口是否在使用中。在Linux中,打开串口设备和打开普通文件一样,使用的是open()系统调用。比如我么打开串口设备1也就是COM1,只需要: fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY ); 打开的串口设备有很多设置选项。本文中使用int setup_com(int fd)设置。在系统头文件<termios.h>中 定义了终端控制结构struct termios,tcgetattr()和tcsetattr()两个系统函数获得和设置这些属性。结构 struct termios中的域描述的主要属性包括: c_cflag : 控制选项 c_lflag : 线选项 c_iflag : 输入选项 c_oflag :输出选项 c_cc :控制字符 c_ispeed :输入数据波特率 c_ospeed :输出数据波特率 如果要设置某个选项,那么就使用"|="运算,如果关闭某个选项就使用"&="和"~"运算。本文使用的各个选项的意义定义如下: c_cflag: CLOCAL 本地模式,不改变端口的所有者 CREAD 表示使能数据接收器 PARENB 表示偶校验 PARODD 表示奇校验 CSTOPB 使用两个停止位 CSIZE 对数据的bit使用掩码 CS8 数据宽度是8bit c_lflag: ICANON 使能规范输入,否则使用原始数据(本文使用) ECHO 回送(echo)输入数据 ECHOE 回送擦除字符 ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信号 c_iflag: IXON 使能输出软件控制 IXOFF 使能输入软件控制 IXANY 允许任何字符再次开启数据流 INLCR 把字符NL(0A)映射到CR(0D) IGNCR 忽略字符CR(0D) ICRNL 把CR(0D)映射成字符NR(0A) c_oflag: OPOST 输出后处理,如果不设置表示原始数据(本文使用原始数据) c_cc[VMIN]: 最少可读数据 c_cc[VTIME]: 等待数据时间(10秒的倍数) 根据以上设置的定义,串口端口设置函数setup_com()定义如下: int setup_com(int fd){ struct termios options; tcgetattr(fd, &options); /* Set the baud rates to 38400...*/ cfsetispeed(&options, B38400); cfsetospeed(&options, B38400); /* Enable the receiver and set local mode...*/ options.c_cflag |= (CLOCAL | CREAD); /* Set c_cflag options.*/ options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Set c_iflag input options */ options.c_iflag &=~(IXON | IXOFF | IXANY); options.c_iflag &=~(INLCR | IGNCR | ICRNL); options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Set c_oflag output options */ options.c_oflag &= ~OPOST; /* Set the timeout options */ options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 10; tcsetattr(fd, TCSANOW, &options); return 1; } 6.7.2 设置串口通信参数 串口通信参数指的是波特率、数据位、奇偶校验位和停止位。对串口实现控制的时候同样要用到termio结构体。下面将结合具体的代码说明如何设置这些参数。 1.波特率设置 获得端口波特率信息是通过cfgetispeed函数和cfgetospeed函数来实现的。cfgetispeed函数用于获得结构体 termios_p中的输入波特率信息,而cfgetospeed函数用于获得结构体termios_p 中的输出波特率信息。这两个函数的具体信息如表 6.9所示。 表6.9 cfgetispeed函数和cfgetospeed函数 头文件 <termios.h> <unistd.h> 函数形式 speed_t cfgetispeed(const struct termios *termios_p); speed_t cfgetospeed(const struct termios *termios_p); 返回值 成功 失败 是否设置errno 返回termios_p结构中的输入/输出端口的波特率 ?1 是 cfsetispeed函数和cfsetospeed函数用于设置端口的输入/输出波特率。一般情况下,输入和输出波特率是相等的。cfsetispeed函数和cfsetospeed函数的函数声明信息如表6.10所示。 表6.10 cfsetispeed函数和cfsetospeed函数 头文件 <termios.h> <unistd.h> 函数形式 int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); 返回值 成功 失败 是否设置errno 返回termios_p结构中的输入/输出端口的波特率 ?1 是 cfsetispeed函数和cfsetospeed函数会修改结构体termios_p中的波特率信息,其中参数speed可以使用表6.11中所列出的宏。 表6.11 speed参数常用波特率信息 宏 定 义 波特率(单位:bit/s) 宏 定 义 波特率(单位:bit/s) B0 0 B1800 1800 B50 50 B2400 2400 B75 75 B4800 4800 B110 110 B9600 9600 B134 134 B19200 19200 B150 150 B38400 38400 B200 200 B57600 57600 B300 300

Ⅳ 请问linux下串口向外发送数据要用什么函数,代码要怎么写谢谢

直接open就可以啦
FILE *fp = open(“/dev/ttyS0”, O_RDWR);

注/dev/ttyS*都是linux下串口的设备文件...直接读写就是收发数据...
别问我文件怎么读写...
然后就可以write,read啦...记住一句话:一切都是文件。

Ⅳ linux串口通信代码解释,一句一句来

简单说几句吧,linux下的设备都是文件,流程也无非是open, read/write, close等
当然,串口你得设置各种属性才行对不对,比如在win下的超级终端就设置了波特率啊,停止位啊,奇偶校验啊什么的,这些属性都通过
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);函数来设置。
完整代码吗自己去google,一把一把的,其实最重要的是设置好属性,剩下的就是read,write的问题咯。
希望对你有用
对了,了解终端函数的详情请在linux命令行终端获取: man termios

Ⅵ Linux 用C写串口(modem)(急!)

是的,linux是linus
tovalds当时为了研究一个多用户多任务操作系统,用c代码编写了一个很小的操作系统内核,他把这个源码公布,大家都来修改它和发展它,最终发展成现在的linux操作系统.

Ⅶ linux下的串口编程

这有个友善的串口例程,参考下吧,用gcc编译可以在linux下用
# include <stdio.h>
# include <stdlib.h>
# include <termio.h>
# include <unistd.h>
# include <fcntl.h>
# include <getopt.h>
# include <time.h>
# include <errno.h>
# include <string.h>

int CommFd, TtyFd;

static void Error(const char *Msg)
{
fprintf (stderr, "%s\n", Msg);
fprintf (stderr, "strerror() is %s\n", strerror(errno));
exit(1);
}
static void Warning(const char *Msg)
{
fprintf (stderr, "Warning: %s\n", Msg);
}

static int SerialSpeed(const char *SpeedString)
{
int SpeedNumber = atoi(SpeedString);
# define TestSpeed(Speed) if (SpeedNumber == Speed) return B##Speed
TestSpeed(1200);
TestSpeed(2400);
TestSpeed(4800);
TestSpeed(9600);
TestSpeed(19200);
TestSpeed(38400);
TestSpeed(57600);
TestSpeed(115200);
TestSpeed(230400);
Error("Bad speed");
return -1;
}

static void PrintUsage(void)
{

fprintf(stderr, "comtest - interactive program of comm port\n");
fprintf(stderr, "press [ESC] 3 times to quit\n\n");

fprintf(stderr, "Usage: comtest [-d device] [-t tty] [-s speed] [-7] [-c] [-x] [-o] [-h]\n");
fprintf(stderr, " -7 7 bit\n");
fprintf(stderr, " -x hex mode\n");
fprintf(stderr, " -o output to stdout too\n");
fprintf(stderr, " -c stdout output use color\n");
fprintf(stderr, " -h print this help\n");
exit(-1);
}

static inline void WaitFdWriteable(int Fd)
{
fd_set WriteSetFD;
FD_ZERO(&WriteSetFD);
FD_SET(Fd, &WriteSetFD);
if (select(Fd + 1, NULL, &WriteSetFD, NULL, NULL) < 0) {
Error(strerror(errno));
}

}

int sendUart(char c)
{
WaitFdWriteable(CommFd);
return write(CommFd, &c, 1);
}

char recUart()
{
char c='\0';
if (FD_ISSET(CommFd, &ReadSetFD))
{
if(read(CommFd, &c, 1) == 1) return c;
else printf("No data to receive.\n");
}
}

int main(int argc, char **argv)
{
struct termios TtyAttr;
struct termios BackupTtyAttr;

int DeviceSpeed = B115200;
int TtySpeed = B115200;
int ByteBits = CS8;
const char *DeviceName = "/dev/ttyS0";
const char *TtyName = "/dev/tty";
int OutputHex = 0;
int OutputToStdout = 0;
int UseColor = 0;

printf("Now we start.\n");
opterr = 0;
for (;;) {
int c = getopt(argc, argv, "d:s:t:7xoch");
if (c == -1)
break;
switch(c) {
case 'd':
DeviceName = optarg;
break;
case 't':
TtyName = optarg;
break;
case 's':
if (optarg[0] == 'd') {
DeviceSpeed = SerialSpeed(optarg + 1);
} else if (optarg[0] == 't') {
TtySpeed = SerialSpeed(optarg + 1);
} else
TtySpeed = DeviceSpeed = SerialSpeed(optarg);
break;
case 'o':
OutputToStdout = 1;
break;
case '7':
ByteBits = CS7;
break;
case 'x':
OutputHex = 1;
break;
case 'c':
UseColor = 1;
break;
case '?':
case 'h':
default:
PrintUsage();
}
}
if (optind != argc)
PrintUsage();

CommFd = open(DeviceName, O_RDWR, 0);
if (CommFd < 0)
Error("Unable to open device");
if (fcntl(CommFd, F_SETFL, O_NONBLOCK) < 0)
Error("Unable set to NONBLOCK mode");

memset(&TtyAttr, 0, sizeof(struct termios));
TtyAttr.c_iflag = IGNPAR;
TtyAttr.c_cflag = DeviceSpeed | HUPCL | ByteBits | CREAD | CLOCAL;
TtyAttr.c_cc[VMIN] = 1;

if (tcsetattr(CommFd, TCSANOW, &TtyAttr) < 0)
Warning("Unable to set comm port");

TtyFd = open(TtyName, O_RDWR | O_NDELAY, 0);
if (TtyFd < 0)
Error("Unable to open tty");

TtyAttr.c_cflag = TtySpeed | HUPCL | ByteBits | CREAD | CLOCAL;
if (tcgetattr(TtyFd, &BackupTtyAttr) < 0)
Error("Unable to get tty");

if (tcsetattr(TtyFd, TCSANOW, &TtyAttr) < 0)
Error("Unable to set tty");

for (;;) {
unsigned char Char = 0;
fd_set ReadSetFD;

void OutputStdChar(FILE *File) {
char Buffer[10];
int Len = sprintf(Buffer, OutputHex ? "%.2X " : "%c", Char);
fwrite(Buffer, 1, Len, File);
}

FD_ZERO(&ReadSetFD);

FD_SET(CommFd, &ReadSetFD);
FD_SET( TtyFd, &ReadSetFD);
# define max(x,y) ( ((x) >= (y)) ? (x) : (y) )
if (select(max(CommFd, TtyFd) + 1, &ReadSetFD, NULL, NULL, NULL) < 0) {
Error(strerror(errno));
}
# undef max

if (FD_ISSET(CommFd, &ReadSetFD)) {
while (read(CommFd, &Char, 1) == 1) {

WaitFdWriteable(TtyFd);
if (write(TtyFd, &Char, 1) < 0) {
Error(strerror(errno));
}
if (OutputToStdout) {
if (UseColor)
fwrite("\x1b[01;34m", 1, 8, stdout);
OutputStdChar(stdout);
if (UseColor)
fwrite("\x1b[00m", 1, 8, stdout);
fflush(stdout);
}
}
}

if (FD_ISSET(TtyFd, &ReadSetFD)) {
while (read(TtyFd, &Char, 1) == 1) {
static int EscKeyCount = 0;
WaitFdWriteable(CommFd);
if (write(CommFd, &Char, 1) < 0) {
Error(strerror(errno));
}
if (OutputToStdout) {
if (UseColor)
fwrite("\x1b[01;31m", 1, 8, stderr);
OutputStdChar(stderr);
if (UseColor)
fwrite("\x1b[00m", 1, 8, stderr);
fflush(stderr);
}

if (Char == '\x1b') {
EscKeyCount ++;
if (EscKeyCount >= 3)
goto ExitLabel;
} else
EscKeyCount = 0;
}
}

}

ExitLabel:
if (tcsetattr(TtyFd, TCSANOW, &BackupTtyAttr) < 0)
Error("Unable to set tty");

return 0;
}

Ⅷ 如何在LINUX下编写一个C语言的串口程序

1、参考这个:POSIX操作系统串口编程指南和 UNIX环境高级编程。
2、简单介绍一下:
《POSIX操作系统的串口编程指南》是在UNIX环境或PC上对串口进行编程的教程,每一章提供的例程都使用POSIX(Portable Standard for UNIX)终端控制函数,只需极少的修改就可运行在IRIX 、HP-UX、 SunOS、 Solaris、 Digital UNIX、 Linux等大多数类UNIX操作系统。

Ⅸ Linux C 配置串口

配置串口需要包含头文件

其中最核心的配置结构体为:

如何获取该结构呢?我们操作串口跟操作文件一样,也是调用 open() 函数来打开串口,

这样我们就能够得到一个文件描述符 fd ,然后就可以调用 tcgetattr() 函数来获取上述配置结构体了。

Linux 串口默认的配置为:波特率 9600,数据位 8 位,无奇偶校验,停止位 1 位,无 CTS/RTS 。

以下介绍一些常用的配置项:波特率、奇偶校验、数据位、停止位、硬件控制流。

相关接口:

Linux 将串口的波特率分为了输入波特率和输出波特率,不过最常用的场景是将两者设置成一样。

cfgetispeed() 函数获取输入波特率, cfgetospeed() 函数获取输出波特率。 cfsetispeed() 函数设置输入波特率, cfsetospeed() 函数用于设置输出波特率,当然 cfsetspeed() 函数扩展为同时设置输入和输出波特率。

上述接口中的 speed_t 是一系列波特率的标志位,例如常用的 115200 波特率就为 B115200,参考下述选项:

设置奇偶校验位可以通过修改 termios 结构体中的 c_cflag 成员来实现,若无校验,则将 PARENB 位设为 0;若有校验,则 PARENB 为 1。之后再根据 PARODD 来区分奇偶校验, PARODD 为 1 表示奇校验, PARODD 为 0 表示偶校验。例如设置无奇偶校验位:

设置数据位可以通过修改 termios 结构体中的 c_cflag 成员来实现,CS5、CS6、CS7 和 CS8 分别代表数据位 5、6、7 和 8。不过在设置数据位之前,需要先用 CSIZE 来做屏蔽字段,清楚这几个标志位,例如设置数据位为 8 位:

设置停止位可以通过修改 termios 结构体中的 c_cflag 成员来实现, CSTOPB 位为 1 表示 2 位停止位, CSTOPB 位为 0 标志 1 位停止位。例如设置停止位为 1 位:

设置硬件控制流可以通过修改 termios 结构体中的 c_cflag 成员来实现, CRTSCTS 为 1 表示使用硬件控制流,为 0 表示不使用硬件控制流。例如使能硬件控制流:

当然,最后还需要用 tcflush() 抛弃存储在 fd 里的未接收的数据。

再利用接口 tcsetattr() 函数将配置信息写入文件描述符 fd :

这样整个串口最常用的用法就配置完成了。

具体的配置使用可以参考我的项目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。

参考:

Ⅹ Linux下的串口通信C语言代码和 Windows下的代码一样吗

简单说几句吧,linux下的设备都是文件,流程也无非是open, read/write, close等

当然,串口你得设置各种属性才行对不对,比如在win下的超级终端就设置了波特率啊,停止位啊,奇偶校验啊什么的,这些属性都通过
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);函数来设置。
完整代码吗自己去google,一把一把的,其实最重要的是设置好属性,剩下的就是read,write的问题咯。
希望对你有用
对了,了解终端函数的详情请在linux命令行终端获取: man termios

阅读全文

与linux串口代码相关的资料

热点内容
机器软件用什么编程 浏览:841
java虚拟机指令 浏览:655
shell编程入门书籍 浏览:941
大连桶装水溯源码售价 浏览:302
php怎么跳转到电脑 浏览:414
如何在电脑上创建新网络连接服务器 浏览:61
c语言编译之后如何运行 浏览:568
mfc多线程编程视频 浏览:411
c编译的中文怎么写 浏览:91
单片机连接蜂鸣器电路 浏览:845
程序员买房前后对比照 浏览:988
cmdjava中文乱码 浏览:948
窗口app哪个好 浏览:731
xzforandroid 浏览:577
程序员那么可爱歌曲完整版 浏览:906
为什么购买pdf 浏览:45
操作系统代码编译 浏览:483
程序员东北大学 浏览:426
编译忽略空字符 浏览:119
多店铺阿里云服务器教程 浏览:379