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

ubuntu串口通信碰到个问题

25
回复
21482
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2013-10-27 23:27:34 显示全部楼层 |阅读模式
1Qter豆
环境:虚拟机VM+ubuntu12.04+qt 4.7.2+qt creator;串口使用USB转串口线,设备号为/dev/ttyUSB0

根据《Qt串口通信专题教程》修改代码后,可以编译通过运行,但是在qt软件的“应用程序输出”栏里出现了这样一个问题:

Trying to open File
Could not open File! Error code : 5

看样子应该是串口没有打开。因为发送接收端的LED数据灯都没有任何闪烁。
为了证明串口是好的,我使用minicom,配置相同的波特率设备号等设置后,与外部串口设备进行通信,发现发送接收都完好,而且发送接收端的LED灯都会闪。

看来真的是qt程序里串口没有打开啊!
这到底是怎么回事?

还有个问题就是,我的界面里没有中文显示,如下图,也不知道是什么原因,语言设置肯定没问题因为在qt里写注释什么的用中文都没问题不会显示乱码。

还是主要解决第一个问题比较重要~~不知道为什么串口一直打不开
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

我帮你改了一下,你看看仔细看一下,qextserialprot的版本也给你更换了一下。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-10-27 23:27:35 显示全部楼层
kevincox 发表于 2013-10-29 18:25
谢谢,真是太麻烦您了,您帮我简单看一下就好

我帮你改了一下,你看看仔细看一下,qextserialprot的版本也给你更换了一下。

本帖子中包含更多资源

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

x
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 10:25:09 显示全部楼层
好吧,这问题没有前辈们碰到过么?
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 11:55:35 显示全部楼层
现在出现的问题的,如果我读取“/dev/ttyUSB0”则会出现“Could not open File! Error code : 5”
如果我不使用路径,而是直接读取“ttyUSB0”,此时可以成功打开文件“Opened File succesfully”,但是依旧没有办法发送字符,串口上发送与接收的LED灯均不闪烁
回复

使用道具 举报

累计签到:213 天
连续签到:1 天
2013-10-28 12:36:49 显示全部楼层
如此看来就是程序问题了。贴上来看看。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-10-28 13:07:37 显示全部楼层
你打开串口的时候传递的参数是什么?也就是说串口路径和名字有没有问题?如果可以的话,把代码贴上来。这样更容易判断问题在什么地方。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 13:22:03 显示全部楼层
MLTRwhy 发表于 2013-10-28 12:36
如此看来就是程序问题了。贴上来看看。

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    myCom = new Posix_QextSerialPort("ttyUSB0)",QextSerialBase:olling);
    myCom->open(QIODevice::ReadWrite);
    myCom->setBaudRate(BAUD9600);
    myCom->setDataBits(DATA_8);
    myCom->setParity(PAR_NONE);
    myCom->setStopBits(STOP_1);
    myCom->setFlowControl(FLOW_OFF);
    myCom->setTimeout(10);
    readTimer=new QTimer(this);
    readTimer->start(100);
    connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));

    /*
    struct PortSettings myComsetting={BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
    myCom=new Win_QextSerialPort("COM2",myComsetting,QextSerialBase::EventDriven);
    myCom->open(QIODevice::ReadWrite);
    connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
    */

}

void Widget::readMyCom()
{
    QByteArray temp =myCom->readAll();
    ui->textBrowser->insertPlainText(temp);
}

void Widget:n_pushButton_clicked()
{
    myCom->write(ui->lineEdit->text().toAscii());
    myCom->write("\r");
}

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

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 15:54:47 显示全部楼层
hzzhou 发表于 2013-10-28 13:07
你打开串口的时候传递的参数是什么?也就是说串口路径和名字有没有问题?如果可以的话,把代码贴上来。这样 ...

这个是widget.cpp的代码,使用的Qextserialport版本为:qextserialport-1.2win-alpha
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-10-28 16:54:57 显示全部楼层
kevincox 发表于 2013-10-28 15:54
这个是widget.cpp的代码,使用的Qextserialport版本为:qextserialport-1.2win-alpha

把设备路径改为"/dev/ttyUSB0"试试。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 17:12:37 显示全部楼层
hzzhou 发表于 2013-10-28 16:54
把设备路径改为"/dev/ttyUSB0"试试。

我的设备路径就是"/dev/ttyUSB0".。。。。。。。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-10-28 17:31:59 显示全部楼层
kevincox 发表于 2013-10-28 17:12
我的设备路径就是"/dev/ttyUSB0".。。。。。。。

myCom = new Posix_QextSerialPort("ttyUSB0)",QextSerialBaselling);
这里改成myCom = new Posix_QextSerialPort("/dev/ttyUSB0)",QextSerialBaselling);
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-28 17:34:24 显示全部楼层
hzzhou 发表于 2013-10-28 17:31
myCom = new Posix_QextSerialPort("ttyUSB0)",QextSerialBaselling);
这里改成myCom = new Posix_Qext ...

是这样,我如果用/dev/ttyUSB0的话,会出现:

Trying to open File
Could not open File! Error code : 5

也就是打不开串口设备。
我如果直接用ttyUSB0的话,则可以打开串口设备,出现:

Trying to open File
Opened File succesfully

但是光打开没用,依然不能发送数据
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-10-29 10:15:57 显示全部楼层
kevincox 发表于 2013-10-28 17:34
是这样,我如果用/dev/ttyUSB0的话,会出现:

Trying to open File

如果可以的话,你把代码上传,我帮你调试一下
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-29 18:25:35 显示全部楼层
hzzhou 发表于 2013-10-29 10:15
如果可以的话,你把代码上传,我帮你调试一下

谢谢,真是太麻烦您了,您帮我简单看一下就好

本帖子中包含更多资源

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

x
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-11-1 16:06:52 显示全部楼层
hzzhou 发表于 2013-10-31 13:50
我帮你改了一下,你看看仔细看一下,qextserialprot的版本也给你更换了一下。 ...

真的很谢谢你,我好好研究一下这个
回复

使用道具 举报

尚未签到

2013-11-7 10:09:07 显示全部楼层
kevincox 发表于 2013-11-1 16:06
真的很谢谢你,我好好研究一下这个

能否说一下问题出在哪里?我也遇到这个问题了
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2013-11-9 17:22:10 显示全部楼层
虚拟机需要设置 对于串口有三个设置 其中是使用物理串口 这样才能使用串口的
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2013-11-13 11:41:08 显示全部楼层
请问楼主的问题解决了吗?我也遇到相同的问题,在终端上用monicom可以收发数据,但是用qt编写的程序是就无法接受和发送数据。
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2013-11-13 15:09:44 显示全部楼层
是你当前用户的串口权限不够!不能打开串口,而minicom运行前需要输入sudo
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2014-5-12 23:14:57 显示全部楼层
我现在也遇到同样的问题,在windows下能够很顺利的运行,但是在虚拟机下就会遇到跟楼主完全一样的问题,有谁解决了麻烦告诉一下么
回复

使用道具 举报

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

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