主题 : 关于mini2440串口通讯助手 附上资料 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 81259
精华: 0
发帖: 29
金钱: 145 两
威望: 29 点
综合积分: 58 分
注册时间: 2012-11-06
最后登录: 2018-02-08
楼主  发表于: 2013-02-24 12:15

 关于mini2440串口通讯助手 附上资料

我使用的是mini6410 Qt4和qtopia编程开发指南里的串口通讯例程,但是出现了诡异的一幕,电脑的超级终端可以发生信息至mini2440,但是mini2440无法发生信息至电脑的超级终端
附上main_form.cpp,其余资料在附件。希望有高手能解答!!
#include "main_form.h"
#include <qmultilineedit.h>
#include <qprogressbar.h>
#include <qtimer.h>
#include <qapplication.h>
#include <qmessagebox.h>
#include <qstringlist.h>

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fs.h>
#include <errno.h>
#include <string.h>
#include <termio.h>



TMainForm::TMainForm(QWidget * parent, const char * name, WFlags f):TMainFormBase(parent, name, f), m_notifier(0)
{
    m_fd = openSerialPort();
    if (m_fd < 0) {
        QMessageBox::warning(this, tr("Error"), tr("Fail to open serial port!"));
        return ;
    }

    m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
    connect (m_notifier, SIGNAL(activated(int)), this, SLOT(remoteDataIncoming()));
}

TMainForm::~TMainForm()
{
    if (m_notifier) {
        delete m_notifier;
        m_notifier = 0;
    }

    if (m_fd >= 0) {
        ::close(m_fd);
        m_fd = -1;
    }

}

void TMainForm::sendButtonClicked()
{
    QString text( m_sendEdit->text() );
    if (text.isEmpty()) {
        return ;
    }
    ::write(m_fd, text.latin1(), text.length());
    m_sendEdit->setText("");
}


int TMainForm::openSerialPort()
{
    int fd = -1;

    const char *devName = "/dev/ttySAC2";
    fd = ::open(devName, O_RDWR|O_NONBLOCK);
    if (fd < 0) {
        return -1;
    }

    termios serialAttr;
    memset(&serialAttr, 0, sizeof serialAttr);
    serialAttr.c_iflag = IGNPAR;
    serialAttr.c_cflag = B115200 | HUPCL | CS8 | CREAD | CLOCAL;
    serialAttr.c_cc[VMIN] = 1;
    if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) {
        return -1;
    }
    return fd;
}


void TMainForm::remoteDataIncoming()
{
    char c;
    if (read(m_fd, &c, sizeof c) != 1) {
        QMessageBox::warning(this, tr("Error"), tr("Receive error!"));
        return;
    }
    m_receiveEdit->insert(QString(QChar(c)));
}
附件: serialport.zip (6 K) 下载次数:7