QT串口通信的问题,急!!

xie169268 2014-05-14 01:36:58
自己写了个串口程序,一点打开串口,就会提示Unexpected flow control settings,求大神指点,急!

下面是串口设置的部分代码


...全文
858 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵转世 2014-10-13
  • 打赏
  • 举报
回复
路过,学习,顶。用libcssl,linux下的串口通信库试试。
菜园小火车 2014-10-13
  • 打赏
  • 举报
回复
这段代码有意义,虎的一塌糊涂的一段 QSerialPortInfo* info; for(int i=1; i<11; i++) { s1 = "COM"; s2 = s2.setNum(i); s1 += s2; info = new QSerialPortInfo(s1); if(info->isValid()) { ui->PortcomboBox->addItem(s1); } }
bigPillow 2014-10-08
  • 打赏
  • 举报
回复
官方给出了现成的例子,为啥不直接利用呢。
Pokeeeer 2014-10-08
  • 打赏
  • 举报
回复
请问问题解决了吗,我也遇到了相同的问题
vcf_reader 2014-05-17
  • 打赏
  • 举报
回复
你的设置有问题
大石头1987 2014-05-15
  • 打赏
  • 举报
回复
int SerialPort::connect(const char *port) 
{ 
	int error=-1;
	DCB dcb;

	serialPortHandle = CreateFileA(port, 
		GENERIC_READ | GENERIC_WRITE, 
		0,
		NULL,
		OPEN_EXISTING,
		0,
		NULL);

	if (serialPortHandle != INVALID_HANDLE_VALUE)
	{ 
		error = 1;
		OutputDebugString(L"Open com success!");
		
		memset(&dcb,0,sizeof(dcb));
		GetCommState(serialPortHandle,&dcb);
		dcb.BaudRate = 115200;
		dcb.Parity = NOPARITY;
		dcb.fParity = 0;
		dcb.StopBits = ONESTOPBIT;
		dcb.ByteSize = 8;
		dcb.fDtrControl = DTR_CONTROL_ENABLE; 
		dcb.fRtsControl = RTS_CONTROL_ENABLE; 

		SetCommState(serialPortHandle,&dcb);
		SetupComm(serialPortHandle,SENDBUF,RECVBUF); //输入缓冲区和输出缓冲区的大小都是1024;

		COMMTIMEOUTS TimeOuts;
		////设定读超时;
		//TimeOuts.ReadIntervalTimeout=1000;	//读间隔超时;
		//TimeOuts.ReadTotalTimeoutMultiplier=500;	//读时间系数;
		//TimeOuts.ReadTotalTimeoutConstant=5000;	//读时间常量 ;
		////设定写超时;
		//TimeOuts.WriteTotalTimeoutMultiplier=500;	//读时间常量;
		//TimeOuts.WriteTotalTimeoutConstant=2000;	//写时间常量;
		
		//设定读超时;
		//在读一次输入缓冲区的内容后读操作就立即返回;
		//而不管是否读入了要求的字符;
		TimeOuts.ReadIntervalTimeout=MAXDWORD;	//读间隔超时;
		TimeOuts.ReadTotalTimeoutMultiplier=0;	//读时间系数;
		TimeOuts.ReadTotalTimeoutConstant=0;	//读时间常量;

		//设定写超时;
		TimeOuts.WriteTotalTimeoutMultiplier=100;	//读时间常量;
		TimeOuts.WriteTotalTimeoutConstant=500;	//写时间常量;

		SetCommTimeouts(serialPortHandle,&TimeOuts); //设置超时;
	} 
	else
	{ 
		OutputDebugString(L"Open com fail!");
		error=0;
	}   

	if (error == 0) { 
		disconnect(); 
	} 
	else { 
		clear(); 
		OutputDebugString(L"clear called PurgeComm() function. ");
	}   
	return error;
}
xie169268 2014-05-14
  • 打赏
  • 举报
回复
不要沉啊,在线等!!
xie169268 2014-05-14
  • 打赏
  • 举报
回复
引用 1 楼 sdu_hanson 的回复:
上代码啊~~~
main函数是自动生成的,头文件都是些声明和变量定义就不用了吧。。处女贴,不懂规矩。。话说这版块人怎么这么少?
xie169268 2014-05-14
  • 打赏
  • 举报
回复
引用 1 楼 sdu_hanson 的回复:
上代码啊~~~
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QSerialPortInfo> #include <QDebug> #include <QTextStream> #include <QByteArray> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->OpenpushButton->setEnabled(true); ui->ClosepushButton->setEnabled(false); ui->SendpushButton->setEnabled(false); tempString.clear(); file = new QFile("Receive.txt"); if(!file->open(QIODevice::ReadWrite|QIODevice::Text)) return; QString s1; QString s2; QSerialPortInfo* info; for(int i=1; i<11; i++) { s1 = "COM"; s2 = s2.setNum(i); s1 += s2; info = new QSerialPortInfo(s1); if(info->isValid()) { ui->PortcomboBox->addItem(s1); } } } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_OpenpushButton_clicked() { QString s1,s2,s3; QString portname = ui->PortcomboBox->currentText(); Mycom = new QSerialPort(portname,this); bool flag = Mycom->open(QIODevice::ReadWrite); if(flag ==false) { QMessageBox::warning(this,"Warning","串口不存在或已经占用!",QMessageBox::Yes); } QString state; state.clear(); state += portname; state += ","; state += ui->BaudcomboBox->currentText(); state += ","; state += ui->DatacomboBox->currentText(); state += ","; state += ui->JiaoYancomboBox->currentText(); state += ","; state += ui->StopBitscomboBox->currentText(); if(ui->BaudcomboBox->currentText()==tr("9600")) // Mycom->setBaudRate(QSerialPort::Baud9600); else if(ui->BaudcomboBox->currentText()==tr("115200")) Mycom->setBaudRate(QSerialPort::Baud115200); if(ui->DatacomboBox->currentText()==tr("8")) Mycom->setDataBits(QSerialPort::Data8); else if(ui->DatacomboBox->currentText()==tr("7")) Mycom->setDataBits(QSerialPort::Data7); s1 = s1.fromLocal8Bit("无"); s2 = s2.fromLocal8Bit("奇"); s3 = s3.fromLocal8Bit("偶"); if(ui->JiaoYancomboBox->currentText()==s1) Mycom->setParity(QSerialPort::NoParity); else if(ui->JiaoYancomboBox->currentText()==s2) Mycom->setParity(QSerialPort::OddParity); else if(ui->JiaoYancomboBox->currentText()==s3) Mycom->setParity(QSerialPort::EvenParity); if(ui->StopBitscomboBox->currentText()==tr("1")) Mycom->setStopBits(QSerialPort::OneStop); else if(ui->StopBitscomboBox->currentText()==tr("2")) Mycom->setStopBits(QSerialPort::TwoStop); Mycom->setFlowControl(QSerialPort::NoFlowControl); connect(Mycom,SIGNAL(readyRead()),this,SLOT(ReadMycom())); ui->Statelabel->setText(state); ui->ClosepushButton->setEnabled(true); ui->OpenpushButton->setEnabled(false); ui->SendpushButton->setEnabled(true); } void MainWindow::ReadMycom() { // QByteArray temp = Mycom->readAll(); // QTextStream out(file); // ui->textBrowser->append(temp); // out<<temp; QByteArray temp = Mycom->readAll(); int length; length=temp.size(); for(int i=0;i<length;i++) //将一子帧从缓存区取出 { if (temp.mid(i,1)=="$") { int m,n; for(m=i;m<length;m++) { if(temp.mid(m,1)=="0x0A"&&temp.mid(m-1,1)=="0x0D") n=m; } QByteArray Udecode=temp.mid(i,n-i+1); QByteArray data=Udecode.mid(20,n-i+1-3);//卫星导航数据存放于此 QByteArray num=Udecode.mid(9,2);//取卫星号 int Satellitenum=num.toInt(); QString s; s.number(Satellitenum,10); ui->textBrowser->append(s); } } } void MainWindow::on_SendpushButton_clicked() { if(!(Mycom->isOpen()))return; QString sdata= ui->lineEdit->text(); if(sdata.isEmpty())return; sdata += "\r\n"; QByteArray aa = sdata.toLatin1(); Mycom->write(aa); } void MainWindow::on_ClosepushButton_clicked() { Mycom->close(); ui->OpenpushButton->setEnabled(true); //关闭串口后“打开串口”按钮可用 ui->ClosepushButton->setEnabled(false); //关闭串口后“关闭串口”按钮不可用 ui->SendpushButton->setEnabled(false); //关闭串口后“发送数据”按钮不可用 ui->BaudcomboBox->setEnabled(true); //设置各个组合框可用 ui->DatacomboBox->setEnabled(true); ui->JiaoYancomboBox->setEnabled(true); ui->StopBitscomboBox->setEnabled(true); ui->PortcomboBox->setEnabled(true); }
sdu_hanson 2014-05-14
  • 打赏
  • 举报
回复
上代码啊~~~

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧