QT实现串口打开和关闭

一、查找串口(windows)

//下面这个循环语句用来查找可以用的串口端口
//不确定有多少串口可用,也就不知道循环多少次,所以用foreach(不知道用的就百度)
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())		
{
	QSerialPort serial;		//在循环语句内部实例化类,因为可用串口不一定只就一个
	serial.setPort(info);   //设置能够用的串口端口
	if(serial.open(QIODevice::ReadWrite))		//用ReadWrite可读写的方式打开串口
	{
		//记录可用的uart名字serial.portName(),前面的ui->PortBox->addItem不用管,这个是界面里面的。
		ui->PortBox->addItem(serial.portName());
		//然后关闭串口,因为这段代码打开串口只是为了查找串口可以用不可用而已。
		serial.close();			
	}
}

二、 创建并设置串口

//新建一个串口类
serial = new QSerialPort;		
//设置串口号,这个就是上面我们serial.portName()保存的串口号了
serial->setPortName(ui->PortBox->currentText());	
//设定了串口号,那就是用读写方式打开串口了,前面说了是吧。
serial->open(QIODevice::ReadWrite);		
//设置波特率9600吧 心情好
serial->setBaudRate(QSerialPort::Baud9600);		
        
/*		Baud1200 = 1200,   波特率想设置哪个就设置哪个,这个枚举定义了
        Baud2400 = 2400,	躲起来慢慢试
        Baud4800 = 4800,
        Baud9600 = 9600,
        Baud19200 = 19200,
        Baud38400 = 38400,
        Baud57600 = 57600,
        Baud115200 = 115200,    ********/
		
//设置数据位数,这个就是数据位了,枚举了5、6、7、8位,我们一般都用的8位的
switch (ui->BitBox->currentIndex())
{
	case 5:     serial->setDataBits(QSerialPort::Data5);     break;//设置数据位8
	case 6:     serial->setDataBits(QSerialPort::Data6);     break;//设置数据位8
	case 7:     serial->setDataBits(QSerialPort::Data7);     break;
	case 8:     serial->setDataBits(QSerialPort::Data8);     break;
	default:     break;
}
//设置校验位
switch (ui->ParityBox->currentIndex())
{
	case 0:     serial->setParity(QSerialPort::NoParity);   break;
	default:    break;
}
//设置停止位,串口一般有一个停止位或两个停止位,选择吧 
switch (ui->BitBox->currentIndex())
{
	case 1: serial->setStopBits(QSerialPort::OneStop);  break;	//停止位设置为1
	case 2: serial->setStopBits(QSerialPort::TwoStop);  break;
	default:     break;
}
//设置流控制 无控制流
serial->setFlowControl(QSerialPort::NoFlowControl);		//设置为无流控制

三、 读写串口

serial->write(data);				// 写数据
data = serial->readAll();		//读数据,数据类型可以查看函数原型
serial->close(); //最后关闭串口

你可能感兴趣的:(QT)