Linux下的串口编程(FL2440实现串口接收发送)

前面已经了解了串口的基础知识,下面将介绍在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所示。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的例子,用于在Linux下使用C语言实现串口通信。本例实现了从串口接收数据并将其打印到终端上,同时也可以向串口发送数据。代码包含了文注释,以便于理解。 ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <string.h> int main(int argc, char *argv[]) { int fd; struct termios options; char buffer[256]; // 打开串口设备 fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } // 获取串口属性 tcgetattr(fd, &options); // 设置串口输入和输出波特率为115200 cfsetspeed(&options, B115200); cfsetispeed(&options, B115200); cfsetospeed(&options, B115200); // 设置字符大小和流控制方式 options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~CRTSCTS; // 设置为无奇偶校验和1位停止位 options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; // 禁用软件控制流控制 options.c_iflag &= ~(IXON | IXOFF | IXANY); // 设置为非规范模式,禁用回显和系统信号 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 禁用输出处理 options.c_oflag &= ~OPOST; // 设置串口属性 tcsetattr(fd, TCSANOW, &options); // 设置非阻塞模式 fcntl(fd, F_SETFL, FNDELAY); while (1) { // 从串口读取数据 int n = read(fd, buffer, sizeof(buffer)); if (n > 0) { // 打印接收到的数据 buffer[n] = '\0'; printf("Received data: %s\n", buffer); } // 从终端读取数据并发送串口 fgets(buffer, sizeof(buffer), stdin); if (strlen(buffer) > 0) { write(fd, buffer, strlen(buffer)); } } // 关闭串口设备 close(fd); return 0; } ``` 在此代码,我们首先打开了串口设备`/dev/ttyS0`,并获取了其属性。然后,我们设置了输入和输出波特率为115200,字符大小为8位,停止位为1位,无奇偶校验,禁用了软件流控制和回显,并使用非阻塞模式。在主循环,我们从串口读取数据并打印,同时也从终端读取数据并发送串口。最后,我们关闭了串口设备。 请注意,此代码串口设备为`/dev/ttyS0`,这是Linux系统的一个串口设备文件,对应于计算机上的物理串口。如果您的计算机没有物理串口,则需要使用USB转串口适配器等外部设备。另外,请根据您的实际需求更改串口属性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值