i.max283基于Qt5实现串口收发
最近将板子上的Qt版本升级到了Qt5,基于原生库实现了串口收发1、对串口进行参数配置
2、打开了一个定时器,每3S发送一条命令
3、使用信号与槽机制,将收到的数据打印
//---------------mainwindow.cpp
#define DefaultPortName "/dev/ttySP0"
#define DefaultBaud BAUD115200
MainWindow::MainWindow(QObject *parent) : QObject(parent)
{
}
MainWindow::~MainWindow()
{
pMSerialPort->deleteLater();
delete(readMeterTimer);
}
void MainWindow::show(void)
{
////////////串口初始化
if(SerialPortInit())
{
qDebug() << "Open SerialPort OK";
}
else
{
qDebug() << "Open SerialPort Error";
}
////////////定时器初始化
PollTimerInit();
}
bool MainWindow::SerialPortInit(void)
{
pMSerialPort = new MSerialPort(DefaultPortName);
pMSerialPort->MSerialsetBaudRate(QSerialPort::Baud115200);
pMSerialPort->MSerialsetDataBits(QSerialPort::Data8);
pMSerialPort-> MSerialsetParity(QSerialPort::NoParity);
pMSerialPort->MSerialsetStopBits(QSerialPort::OneStop);
if(!pMSerialPort->MSerialPortOpen())
{
pMSerialPort->deleteLater();
pMSerialPort= NULL;
return false;
}
else
{
connect(pMSerialPort,SIGNAL(SignalRxTimeout()),this,SLOT(SlotSerialPortRx()));
return true;
}
}
void MainWindow::SerialPortClose()
{
pMSerialPort->MSerialPortClose();
}
void MainWindow::SlotSerialPortRx(void)
{
char rxBuf;
int rxBufLen = 0;
rxBufLen = pMSerialPort->MSerialPortRead(rxBuf,256);
qDebug() << "Receive Data " << rxBufLen;
SerialPortConsoleBufLen(rxBuf,rxBufLen);
}
quint64 MainWindow::SerialPortWrite(char *str)
{
return pMSerialPort->MSerialPortWrite(str,strlen(str));
}
void MainWindow::SerialPortRead()
{
}
void MainWindow::SerialPortConsoleBufLen(char *buf,int buflen)
{
QString strText="";
int i;
for(i=0;i<buflen;i++)
{
strText += QString("%1 ").arg(buf,2,16,QChar('0'));
}
strText = strText.toUpper();
qDebug() << strText;
}
void MainWindow::PollTimerInit(void)
{
readMeterTimer = new QTimer();
readMeterTimer->start(3000);
connect(readMeterTimer,SIGNAL(timeout()),this,SLOT(SlotReadMeter()));
}
void MainWindow::SlotReadMeter(void)
{
qDebug() << "Hello PC";
qDebug() << SerialPortWrite((char*)"Hello Pc");
}
//---------------mainwindow.h
#include <QObject>
#include <QDebug>
#include <QTimer>
#include "mserialport.h"
class MainWindow : public QObject
{
Q_OBJECT
public:
explicit MainWindow(QObject *parent = 0);
~MainWindow();
void show(void);
bool SerialPortInit(void);
void SerialPortOpen();
void SerialPortClose();
quint64 SerialPortWrite(char *str);
void SerialPortRead();
void SerialPortConsoleBufLen(char *buf,int buflen);
void PollTimerInit(void);
private:
QTimer* readMeterTimer;
QTimer *pollTimer,*waitForAckTimer,*intervalTimer;
MSerialPort *pMSerialPort;
signals:
public slots:
void SlotSerialPortRx(void);
void SlotReadMeter(void);
};
工程文件见附件
用Qserialport或者QextSerialport写,会比较好移植{:smile:} donglaile 发表于 2016-5-14 14:29
用Qserialport或者QextSerialport写,会比较好移植
底层就是用QSerialPort写的啊 我也写了一个简单的串口助手。 不错,正好我最近也买了IMX287,可以跟着一起学习 mark一下 新建qmake的时候提示如下,请问一下楼主知道如何解决吗?
页:
[1]