linux串口操作

serial.hpp

/******************************************/
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<limits.h>
#include<dirent.h>
#include<termios.h>
#include<errno.h>
#include<stdio.h>
#include<sys/select.h>
#include<string.h>
#include<QUdpSocket>
#include<QHostAddress>

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

/************************************************/
    int tty_fd ;
    int nread;
    QByteArray buff;
    char serial_buf[1024];
    QUdpSocket *sender = nullptr;
     void openH12(void);
     /***********************************************/

open serial.cpp

void UDPLink::openH12()
{

    tty_fd = open("/dev/ttyHS1",O_RDWR | O_NOCTTY | O_NONBLOCK);
    if (-1 == tty_fd)      {
        qDebug()<<"skydroid H12UART:Can't Open Serial Port";
      }else{
        qDebug()<<"skydroid H12UART:Open Serial Port";
    }
    struct termios opt;
    //获取驱动程序默认参数
    tcgetattr(tty_fd,&opt);
    bzero(&opt,sizeof (opt));

    opt.c_cflag |= CLOCAL | CREAD;
    opt.c_cflag &= ~CSIZE;

    opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/
    opt.c_oflag &= ~OPOST;   /*Output*/
    //设置串口输出波特率
    cfsetospeed(&opt, B921600);
    //设置串口输入波特率
    cfsetispeed(&opt, B921600);
    //设置数据位数 8位数据位
    opt.c_cflag |= CS8;
    //校验位 无校验位
    opt.c_cflag &= ~PARENB;
    //设置停止位  1位停止位
    opt.c_cflag &= ~CSTOPB;

    //设置停止time
    opt.c_cc[VTIME]=10;
    opt.c_cc[VMIN]=1;


    //更新配置
    tcflush(tty_fd,TCIOFLUSH);
    fcntl(tty_fd, F_SETFL, 1);    //串口阻塞  0阻塞1非阻塞
    if (tcsetattr(tty_fd, TCSANOW, &opt) != 0)    //激活新设置
    {
        tty_fd = open("/dev/ttyHS1",O_RDWR | O_NOCTTY | O_NDELAY);
        qDebug()<< "激活新设置失败:";
        qDebug() <<  strerror(errno);
    }

    QUdpSocket *sender = new QUdpSocket;
    nread = read(tty_fd,serial_buf,1024);
    qDebug() << serial_buf ;
    for(int i=0;i<nread;i++)
        buff[i]=serial_buf[i];
    sender->writeDatagram(buff,nread,QHostAddress::Broadcast,14550);
    emit bytesReceived(this, buff);
    qDebug()<<"0000000000000000000002222222222222222222222222000000000000000000";

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞同学

随时为您服务

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值