|
最近将板子上的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[256];
- 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[i],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);
- };
复制代码
工程文件见附件
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|