Ubuntu下QT4串口通信学习笔记
想做个Ubuntu下的串口通信软件,先粗略的学习了下QT(临时抱佛脚-w-)
下面是串口通信相关的:
一些相关的资料:
Serial Programming Guide for POSIX Operating Systems
http://www.easysw.com/~mike/serial/serial.html#config
QextSerialPort Class Reference
http://qextserialport.sourceforge.net/qextserialport-1.0.x/classQextSerialPort.html
一、基础知识
Linux下串口编程涉及到的文件
qextserialbase.cpp
qextserialbase.h
posix_qextserialport.cpp
posix_qextserialport.h
在QextSerialBase类中涉及到了一个枚举变量QueryMode,它有两个值Polling和EventDriven 。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。
Linux下只支持Polling方式,该方式需要我们自己设置定时器,来不断地读取缓冲区的数据
二、使用查询方式Polling来实现串口通信
1.在widget.h中声明一个定时器对象
添加头文件包含:#include <QTimer>
添加private变量:QTimer *readTimer
2.在widget.cpp文件中的构造函数中更改
(1)串口定义:
myCom = new Posix_QextSerialPort(“/dev/ttyUSB0”,QextSerialBase::Polling);//定义串口对象,指定串口名和查询模式,这里使用Polling
注意这里使用ttyUSB0,是因为我用的笔记本,通常用的是USB转串口
myCom ->open(QIODevice::ReadWrite); //以读写方式打开串口
myCom->setBaudRate(BAUD9600); //波特率设置,我们设置为9600
myCom->setDataBits(DATA_8); //数据位设置,我们设置为8位数据位
myCom->setParity(PAR_NONE); //奇偶校验设置,我们设置为无校验
myCom->setStopBits(STOP_1); //停止位设置,我们设置为1位停止位
myCom->setFlowControl(FLOW_OFF); //数据流控制设置,我们设置为无数据流控制
myCom->setTimeout(10); //延时设置,我们设置为延时10ms
注意这里的时间指的是每隔10ms将读一次串口,将串口中的数据读取到串口缓冲区,在Polling模式下,它影响读取时间
实现槽函数:
void Widget::readMyCom() //读取串口数据并显示出来
{
QByteArray temp = myCom->readAll(); //读取串口缓冲区的所有数据给临时变量temp
ui->textBrowser->insertPlainText(temp); //将串口的数据显示在窗口的文本浏览器中
}
void Widget::on_pushButton_clicked() //发送数据
{
myCom->write(ui->lineEdit->text().toAscii()); //以ASCII码形式将数据写入串口
}
(2)定义定时器,定义关联
readTimer = new QTimer(this);
readTimer->start(100); //设置延时为100ms
connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));//信号和槽函数关联,延时一段时间,进行读串口操作
注意这里是每隔100ms读取的是串口缓冲区,而不是串口本身
还有关于数据发送和数据接收的若干问题~~
浙公网安备 33010602011771号