首页 > 代码库 > Linux下的串口编程

Linux下的串口编程

打开串口

在Linux系统下,打开串口是通过使用标准的文件打开函数操作的。

#include <fcntl.h>

/* 以读写的方式打开 */

int fd = open( "/dev/ttyUSB0",O_RDWR);  

设置串口

所有对串口的操作都是通过结构体 struct termios 和 几个函数实现的。

tcgetattr          //获取属性
tcsetattr          //设置属性
cfgetispeed       //得到输入速度
cfsetispeed        //设置输入速度
cfgetospeed        //得到输出速度
cfsetospedd        //设置输出速度
tcdrain             //等待所有输出都被传输
tcflow              //挂起传输或接收
tcflush             //刷清未决输入和输出
tcsendbreak        //送break字符
tcgetpgrp          //得到前台进程组ID
tcsetpgrp          //设置前台进程组ID
tcgetattr( 0,&oldstdio);  //获取默认的配置选项 存储到oldstdio结构体中
tcgetattr( fd,&oldstdio);  //获取当前配置选项 存储到oldstdio结构体中
tcsetattr( fd,TCSANOW,&oldstdio);  //TCSANOW 修改立即生效
cfgetispeed( &oldstdio);      //得到波特率
cfsetispeed(&oldstdio, B115200 )    //设置波特率为115200
即可使用read或open来操作串口的发送与接收。  

测试代码:
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>


int serial_send( int fd, char *Data );

int main()
{
    int fd;
    int num;
    struct termios oldstdio;


    fd = open("/dev/ttyUSB0", O_RDWR );
    if( -1==fd )
    {
        printf("cannot open /dev/ttyUSB0\r\n");
        return -1;
    }
    tcgetattr( fd, &oldstdio);
    cfsetispeed(&oldstdio, B115200);
    tcsetattr( fd, TCSANOW, &oldstdio);
    tcflush( fd, TCIFLUSH );

    num = serial_send( fd,"Serial BAUND is default \r\n" );

    close(fd);
    return 0;
}

int serial_send( int fd, char *Data )
{
    int string_num;
    string_num = strlen(Data);
    return  write( fd,Data, string_num );
}

 

Linux下的串口编程