Linux 串口读取

这是一个使用C语言编写的Linux串口通信程序,它实现了打开串口、配置波特率、数据位、校验位、停止位以及接收数据的功能。程序首先打开指定的串口设备(如/dev/ttyUSB0),然后设置串口参数,包括设置波特率为115200,数据位为8,无校验,一个停止位,并进入无限循环接收串口数据。接收的数据会立即打印到控制台。
#include <stdlib.h>
#include  <fcntl.h>
#include  "stdio.h"
#include  "termios.h"
#include  "unistd.h"
#include  "limits.h"
#include  <stdint.h>
#include  "time.h"
 //===================
#include <sys/select.h>
#include <sys/time.h>
 //===================


#define   UART_DEV   "/dev/ttyUSB0" //根据电脑插入的串口号定义


void main()
{
    int fd =0;
    int RxLen=0;
    uint8_t RxBuff[1024]={0};

    //==========串口打开============//
    fd = open(UART_DEV ,O_RDWR|O_NOCTTY);
    if(fd<0){
      printf("COM (%s) Open Fail ! \n",UART_DEV); //必须要权限.
      return;
    }
    
  
    printf("COM (%s) Open Success ! Watting recv...\n\n",UART_DEV);
    //==========配置串口============//
    struct  termios opt;          //配置串口的属性定义在结构体struct termios中
    tcgetattr(fd, & opt);         //获取终端控制属性

    cfsetispeed(& opt, B115200);  //指定输入波特率(若不设置系统默认9600bps)
    cfsetospeed(& opt, B115200);  //指定输出波特率(若不设置系统默认9600bps)

    /* c_lflag 本地模式 */
    opt.c_cflag &= ~ INPCK;           //不启用输入奇偶检测
    opt.c_cflag |= (CLOCAL |  CREAD); //CLOCAL忽略 modem 控制线,CREAD打开接受者

    /* c_lflag 本地模式 */
    opt.c_lflag &= ~(ICANON | ECHO | ECHOE |  ISIG); //ICANON启用标准模式;ECHO回显输入字符;ECHOE如果同时设置了 ICANON,字符 ERASE 擦除前一个输入字符,WERASE 擦除前一个词;ISIG当接受到字符 INTR, QUIT, SUSP, 或 DSUSP 时,产生相应的信号

    /* c_oflag 输出模式 */
    opt.c_ofla
Linux系统下,进行串口读写操作是常见的需求,以下为相关方法和实现介绍。 ### 方法概述 在Linux中,串口设备通常以文件的形式存在于`/dev`目录下,如`/dev/ttyS0`或`/dev/ttyUSB0` 。串口读写操作本质上是对这些设备文件进行读写,其基本步骤包括:打开串口设备文件、配置串口参数(如波特率、数据位、停止位、校验位等)、进行数据的读写操作,最后关闭串口设备文件。 ### 代码示例 以下是一个简单的C++代码示例,用于在Linux下实现串口的读写操作,该示例主要实现打开串口,配置串口参数波特率为115200、停止位1、数据位8、无校验位,发送数据并接收数据: ```cpp #include <iostream> #include <fcntl.h> #include <termios.h> #include <unistd.h> #include <cstring> // 配置串口参数 void setupSerial(int fd) { struct termios options; tcgetattr(fd, &options); // 设置波特率 cfsetispeed(&options, B115200); cfsetospeed(&options, B115200); // 设置数据位为8位 options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // 设置无校验位 options.c_cflag &= ~PARENB; // 设置停止位为1位 options.c_cflag &= ~CSTOPB; // 其他设置 options.c_cflag |= (CLOCAL | CREAD); options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_oflag &= ~OPOST; tcsetattr(fd, TCSANOW, &options); } int main() { // 打开串口设备 int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { std::cerr << "无法打开串口设备" << std::endl; return -1; } // 配置串口参数 setupSerial(fd); // 发送数据 const char* sendData = "Hello"; ssize_t sentBytes = write(fd, sendData, strlen(sendData)); if (sentBytes == -1) { std::cerr << "数据发送失败" << std::endl; } else { std::cout << "发送了 " << sentBytes << " 字节数据" << std::endl; } // 接收数据 char buffer[256]; ssize_t receivedBytes = read(fd, buffer, sizeof(buffer)); if (receivedBytes == -1) { std::cerr << "数据接收失败" << std::endl; } else { buffer[receivedBytes] = '\0'; std::cout << "接收到 " << receivedBytes << " 字节数据: " << buffer << std::endl; } // 关闭串口设备 close(fd); return 0; } ``` ### 技术指南 - **打开串口设备**:使用`open`函数打开串口设备文件,可根据实际情况设置打开模式,如`O_RDWR`表示读写模式。 - **配置串口参数**:使用`termios`结构体来配置串口的各项参数,通过`tcgetattr`获取当前串口参数,修改后使用`tcsetattr`设置新的参数。 - **数据读写**:使用`write`函数向串口发送数据,使用`read`函数从串口接收数据。 - **错误处理**:在每个关键步骤(如打开设备、读写数据等)都要进行错误检查,确保程序的健壮性。 - **资源管理**:使用完串口设备后,要使用`close`函数关闭设备文件,释放资源。 此外,在QT窗体程序里也可以实现串口读写操作,如配置串口参数波特率为115200、停止位1、数据位8、无校验位,发送2个数据,等待接收24个数据,并在界面上显示相关信息 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值