• 5679阅读
  • 3回复

[提问]新手求助串口发送问题 [复制链接]

上一主题 下一主题
离线yousuozi
 

只看楼主 倒序阅读 楼主  发表于: 2014-06-20
实现功能:定时器控制每100ms向串口四发送一次数据
现象:显示串口打开成功,发送函数也有被调用,但是终端那边还是没有接收信息,而且板子这里推出qt程序后,查看串口,显示数据根本没有发送出去!
代码粘贴如下,小女新手,请各位大神指教,不胜感谢
widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "posix_qextserialport.h"
#include <QTimer>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QString portname="/dev/ttymxc4";
    myCom = new Posix_QextSerialPort(portname,QextSerialBase::Polling);
    if(myCom->open(QIODevice::ReadWrite))
    {
        ui->portnamelineEdit->setText("open"+portname+"successed!");
    }else
    {
        ui->portnamelineEdit->setText("open"+portname+"failed!");
        return;
    }
    myCom->setBaudRate(BAUD115200);
    myCom->setDataBits(DATA_8);
    myCom->setParity(PAR_NONE);
    myCom->setFlowControl(FLOW_OFF);

    QTimer *readTimer=new QTimer(this);

    connect(readTimer,SIGNAL(timeout()),this,SLOT(sendMyCom()));
    readTimer->start(100);
}

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

void Widget::sendMyCom()
{
   myCom->write(ui->sendlineEdit->text().toAscii());
   ui->sendlineEdit->setText("12345678");
   QString str=tr("ok");
   ui->lineEdit->setText(str);
}
离线dbzhang800

只看该作者 1楼 发表于: 2014-06-20
建议使用Qesp 1.2RC

另外,这种polling方式的,是否发送成功,你不是应该检查 write() 的返回值么?
离线yousuozi

只看该作者 2楼 发表于: 2014-06-20
Qesp 1.2RC??? 第三方类的版本么??

我是在开发板终端用cat命令查看的
root@freescale   /jing$ cat /proc/tty/driver/IMX-uart
serinfo:1.0 driver revision:
0: uart:IMX mmio:0x02020000 irq:58 tx:5735 rx:607912 RTS|DTR|DSR|CD
1: uart:IMX mmio:0x021E8000 irq:59 tx:0 rx:0 DSR|CD
2: uart:IMX mmio:0x021EC000 irq:60 tx:0 rx:0 DSR|CD
3: uart:IMX mmio:0x021F0000 irq:61 tx:0 rx:0 DSR|CD
4: uart:IMX mmio:0x021F4000 irq:62 tx:0 rx:0 DSR|CD

tx始终为0。。。。是程序中发送函数没有其作用么??但是明显是执行了啊??

之前有点错误 现在改成了
void Widget::sendMyCom()
{  
   QString str=tr("ok");
    QString str2=tr("not ok");
   ui->sendlineEdit->setText("12345678");
   if(myCom->write(ui->sendlineEdit->text().toAscii()))
{
   ui->lineEdit->setText(str);
}else
{
   ui->lineEdit->setText(str2);
}
}
显示的是ok, 应该是发送成功了把?。。。。。



谢谢了!


本帖提到的人: @freescale
离线yousuozi

只看该作者 3楼 发表于: 2014-06-20
回 dbzhang800 的帖子
dbzhang800:建议使用Qesp 1.2RC
另外,这种polling方式的,是否发送成功,你不是应该检查 write() 的返回值么? (2014-06-20 12:22) 

还有 请问这个1.2RC咋用呢囧。。。。。
快速回复
限100 字节
 
上一个 下一个