前面已经了解了串口的基础知识,下面将介绍在Linux下如何编程。以下的程序是,直接串口读,读完写的例程。
串口编程思路:
打开串口,设置波特率,数据位,停止位,奇偶校验位;
读写串口;(直接用read,write函数)
关闭串口。
直接见代码
串口的头文件,先定义一个结构体,含有其串口必备的要设置的数据位,奇偶校验位,停止位,是否连接,波特率,设备名等。
声明串口初始化函数,设置端口,关闭串口,打开串口的函数。
/********************************************************************************
* Copyright: (C) 2018 NULL
* All rights reserved.
*
* Filename: comport.h
* Description: This head file is for the common TTY/Serial port operator library.
*
* Version: 1.0.0(7/30/2018)
* Author: DingHuanhuan <736787419@qq.com>
* ChangeLog: 1, Release initial version on "2018年07月30日 11时16分20秒"
*
********************************************************************************/
#ifndef _COMPORT_H
#define _COMPORT_H
#include <stdio.h> /*standard input and output definition*/
#include <string.h>
#include <stdlib.h> /*standard function library definition*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <unistd.h> /*UNIX standard function definition*/
#include <termios.h> /* PPSIX terminal control definition*/
#include <fcntl.h> /*file control definition*/
#include <errno.h> /*error number definition*/
#include <sys/wait.h>
#define DEVNAME_LEN 64
#define buf_size 4096
typedef struct _COM_PORT
{
unsigned char databit,parity,stopbit,flowctrl,is_connect;
char dev_name[DEVNAME_LEN];
int fd;
int frag_size;
long baudrate;
} COM_PORT;
COM_PORT *Comport_Init(const char *dev_name,unsigned long baudrate, const char *settings);
void Setting_Comport(COM_PORT *comport, const char *settings);
void Comport_close(COM_PORT *comport);
int Comport_open(COM_PORT *comport);
#endif
串口源文件详解
1.按照头文件声明的顺序来,先串口初始化函数,返回一个结构体指针;在初始化函数里含有设置端口函数,结构体指针作为设置端口函数的入口参数;
2.设置端口函数:根据传进来的参数来设置结构体的数据位,奇偶校验位和停止位;
3.关闭串口函数:关闭之前 的串口文件描述符并设置其连接状态为0;
4.打开串口函数:
先来介绍一个最重要的结构体:很多系统都支持POSIX终端(串口)接口.程序可以利用这个接口来改变终端的参数,比如,波特率,字符大小等等.要使用这个端口的话,你必须将
struct termios
{
tcflag_t c_iflag; //输入选项
tcflag_t c_oflag; //输出选项
tcflag_t c_cflag; //控制选项
tcflag_t c_lflag; //行选项
cc_t c_cc[NCCS]; //控制字符
};
这个结构中最重要的是c_cflag,通过对它赋值,用户可以设置数据传输率、字符大小、数据位、停止位、奇偶效验位和硬件流控等。另外c_iflag和c_cc也是比较常用的标志。
c_cflag支持很多常量名称,其中设置数据传输率为相应的数据传输率前要加上“B”。
c_cflag成员不能直接对其初始化,而要将其通过与、或操作使用其中的某些选项。
输入模式c_iflag成员控制端口接收端的字符输入处理;c_cc包含了超时参数和控制字符的定义。
其具体意义如下。
c_iflag:输入模式标志,控制终端输入方式,具体参数如表1所示。
表1 c_iflag参数表
c_oflag:输出模式标志,控制终端输出方式,具体参数如表2所示。
表2 c_oflag参数
c_cflag:控制模式标志,指定终端硬件控制信息,具体参数如表3所示。
表3 c_cflag参数
c_lflag:本地模式标志,控制终端编辑功能,具体参数如表4所示。
表