Qt上第三方串口类QExtSerialPort的使用

由于项目中需要用到串口,在Qt4下没有串口库,发现大多数人使用的是qextserialport,于是我也选择使用它。

qextserialport的源代码可以去http://sourceforge.net/projects/qextserialport/下载。

如果是在windows下串口编程,则使用到的文件是qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextserialport.cpp和win_qextserialport.h


如果在linux下使用,则需将win_qextserialport.cpp和win_qextserialport.h 换为 posix_qextserialport.cpp和posix_qextserialport.h。

在linux下使用时编译会出现错误,错误定位在setTimeout(Settings.Timeout_Sec, Settings.Timeout_Millisec)函数,直接将第一个参数Settings.Timeout_Sec删除即可。



接下来就是串口使用的设置了:

struct PortSettings portSettings;
portSettings = { BAUD57600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 2 };
定义一个串口参数结构体,分别存放串口波特率,数据位,校验位,停止位,数据流控制位和延时时间。

改结构体和这些参数都来自于qextserialbase.h中的枚举类型:




定义串口

Win_QextSerialPort *SerialPort;


QString _SerialPortName = "\\\\.\\";
_SerialPortName.append(PortName);
SerialPort = new Win_QextSerialPort(_SerialPortName, portSettings, QextSerialBase::Polling);
SerialPort->open(QIODevice::ReadWrite)
然后进行读写,发现串口设置并未生效。

在网上找到了解决方案在http://download.youkuaiyun.com/source/1763251里面说到串口设置时需要先将串口打开,然后将串口的设置参数传入。

于是将前面代码稍作修改:

QString _SerialPortName = "\\\\.\\";
_SerialPortName.append(PortName);
SerialPort = new Win_QextSerialPort(_SerialPortName, QextSerialBase::Polling);

if (SerialPort->open(QIODevice::ReadWrite))
{
	SerialPort->setBaudRate(portSettings.BaudRate);
	SerialPort->setParity(portSettings.Parity);
	SerialPort->setStopBits(portSettings.StopBits);
	SerialPort->setDataBits(portSettings.DataBits);
	//	SerialPort->setTimeout(5);
}
这样就可以完成了串口的基本设置,接下来就可以进行读写了
QSerialPort->putChar(c);
QSerialPort->getChar(c);
字节读写。


也可以将readyRead()信号关联到自己的槽函数利用SerialPort->readAll();读取所有数据。



评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值