找回密码
 立即注册
收起左侧

QT4串口通信

0
回复
6779
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2017-4-2 20:02:05 显示全部楼层 |阅读模式
1Qter豆
环境:linux
qt版本:4.6.2
问题:串口通信实现发送字符并接受字符,现在程序能运行起来,但是发送字符的时候,当次运行发送字符无法接受,在下次运行程序是才接受得到,如图一。

以下是代码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include "posix_qextserialport.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
    Posix_QextSerialPort *myCom;
    QTimer *readTimer;

private slots:
    void on_pushButton_clicked(); //”发送数据”按钮槽函数
    void readMyCom(); //读取串口
};

#endif // MAINWINDOW_H



mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myCom = new Posix_QextSerialPort("/dev/ttySAC3",QextSerialBase:olling);
    //myCom = new Posix_QextSerialPort("/dev/ttys0",QextSerialBase:olling);
    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);
    readTimer = new QTimer(this);
    readTimer->start(1000);
    connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent:anguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::readMyCom()
{
    static int i =0;
    qDebug()<<"read:"<<myCom->bytesAvailable()<<"bytes";
    //qDebug()<<i++;
    QByteArray temp = myCom->readAll();
    //读取串口缓冲区的所有数据给临时变量temp
    ui->textBrowser->insertPlainText(temp);
    //将串口的数据显示在窗口的文本浏览器中
}

void MainWindow:n_pushButton_clicked()
{
    myCom->write(ui->lineEdit->text().toAscii()); //以ASCII码形式将数据写入串口
}




望大神帮忙解决,实现发送字符后立即收到相应的字符。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了