qt5.10 串口通信 QSerialPort 的使用

在qt5中,使用QSerialPort进行串口通信。主要用到的QSerialPort

使用步骤

步骤一:在.pro文件中进行声明

QT += serialport         //在.pro文件中添加这个声明

步骤二:实例化 QSrerialPort

  QSerialPort *serial=new QSerialPort   //实例化QSerialPort 并且开辟空间

步骤三:寻找显示目前的所有串口信息

  foreach(const QSerialPortInfo &portinfo,QSerialPortInfo::availablePorts())
     {
         serial->setPort(portinfo);       //此处的serial是在构造函数中QSerialPort 的对象;
         qDebug()<portName();
    }  
//第一步:setPort(portinfo)方法,将serial绑定到了其中一个接口上,
//第二步:利用portname将这个串口信息进行查询

步骤四:打开串口

     serial->setPortName("COM7");  //设置串口名称,在第三步,已经能够获取所有的串口信息
     qDebug()<<"打开串口状态"<open(QIODevice::ReadWrite);//利用open方法,传入参数:打开方式   。并返回打开操作状态,成功打开串口返回true,没有打开串口返回false

步骤五:串口协议设定

void GetData::Init(int baurate, int flow_ctrl, int databits, int stopbits, int parity){
                 //  波特率        数据控制流        数据位          停止位     奇偶校验
  GetData::Open();//如果串口已经打开过,这个可以省略
  //设置波特率
  switch(baurate) //判断波特率,并进行设置。需要注意一点,波特率的值可以直接传入,也可以用qt给的枚举
  {
  case 1200:
      serial->setBaudRate(QSerialPort::Baud1200);
      break;
  case 2400:
      serial->setBaudRate(QSerialPort::Baud2400);
      break;
  case 4800:
      serial->setBaudRate(QSerialPort::Baud4800);
      break;
  case 9600:
      serial->setBaudRate(QSerialPort::Baud9600);
      break;
  case 19200:
      serial->setBaudRate(QSerialPort::Baud19200);
      break;
  case 38400:
      serial->setBaudRate(QSerialPort::Baud38400);
      break;
  case 57600:
      serial->setBaudRate(QSerialPort::Baud57600);
      break;
  case 1382400:
     qDebug()<<"设置波特率状态"<< serial->setBaudRate(1382400);//QSerialPort::Baud115200);
      break;
  default :
      serial->setBaudRate(baurate);
      break;

  }
  //设置数据控制流
  switch (flow_ctrl)   //注意,这里之所以进行判断,是因为QSerialport类中给了枚举,并且设置方法中只能传入枚举参数
      {
      case 0://不使用流控制
          qDebug()<<"流控制设置状态"<setFlowControl(QSerialPort::NoFlowControl);
          break;
      case 1://使用硬件流控制
          serial->setFlowControl(QSerialPort::HardwareControl);
          break;
      case 2://使用软件流控制
          serial->setFlowControl(QSerialPort::SoftwareControl);
          break;
      default:
          serial->setFlowControl(QSerialPort::UnknownFlowControl);
      }
  //设置数据位
  switch (databits)
  {
  case 5:
     serial->setDataBits(QSerialPort::Data5);
      break;
  case 6:
      serial->setDataBits(QSerialPort::Data6);
      break;
  case 7:
     serial->setDataBits(QSerialPort::Data7);
      break;
  case 8:
      qDebug()<<"设置数据位状态"<setDataBits(QSerialPort::Data8);
      break;
  default:
      serial->setDataBits(QSerialPort::UnknownDataBits);
     break;
  }
  //设置奇偶效验
  switch (parity)
      {
      case 'n':
      case 'N': //无奇偶校验位。
          serial->setParity(QSerialPort::NoParity);
          break;
      case 'o':
      case 0://设置为奇校验
           qDebug()<<"设置校验位状态"<setParity(QSerialPort::OddParity);
          break;
      case 'e':
      case 'E'://设置为偶校验
          serial->setParity(QSerialPort::EvenParity);
          break;
      default:
          serial->setParity(QSerialPort::UnknownParity);
          break;
      }
  //设置停止位
  switch(stopbits)
  {
      case 1:  qDebug()<<"设置停止位状态"<setStopBits(QSerialPort::OneStop); break;
      case 2: serial->setStopBits(QSerialPort::TwoStop); break;
      default : serial->setStopBits(QSerialPort::UnknownStopBits); break;
  }

qDebug()<<"串口初始化执行完成";

}

步骤六:读取数据

void getdata(){ //这个方法是负责接收这个数据
  QByteArray buf_data;        //注意,接收数据时,qByteArray是最常用的类
  qDebug()<<"开始接受数据";    
  buf_data=serial->readAll(); //接收数据
  qDebug()<<"数据接受完成";
  qDebug()<

步骤七:关闭数据


int  GetData::Close(){
  serial->clear(); //清除缓存区
  serial->close();//关闭串口
  return 0;
}

总结:这里暂时没有介绍怎样发数据,而且在数据接受处理上也有很大缺陷,需要后续改善,所以未完待续。。。。

你可能感兴趣的:(QT使用过程中的成功总结)