读书人

有哪位高手用过“http://www.yafeilin

发布时间: 2012-03-16 16:34:56 作者: rapoo

有谁用过“http://www.yafeilinux.com/?p=820”编的lincom吗?串口打不开是什么原因?
我完全按照“http://www.yafeilinux.com/?p=820”编写的linux下的串口调试程序lincom,串口为“/dev/ttyS0”,运行是没有问题的,但是不能接收和发送数据。调试发现串口好像没打开,另外用minicom测试串口是可以正常收发数据的,说明串口本身是没有问题的,问题是在用Qt编写的lincom程序。但是我是严格按照yafeilinux介绍的编写的,不知各位网友有没有出现过这种问题?是怎么解决的?下面是wiget.cpp的代码。
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
myCom = new
Posix_QextSerialPort("/dev/ttyS0",QextSerialBase::Polling );
//定义串口对象,指定串口名和查询模式,这里使用事件驱动Polling


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(500);
//延时设置,延时500MS

readTimer = new QTimer(this);

readTimer->start(100);
connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()) );
//信号和槽函数关联,延时一段时间,进行读串口操作

}

//实现槽函数

void Widget::on_pushButton_clicked() //发送数据
{
myCom->write(ui->lineEdit->text().toAscii() );
//以ASCII码形式将数据写入串口
}
void Widget::readMyCom() //读取串口数据并显示出来
{
QByteArray temp=myCom->readAll();
//读取串口缓冲区临时变量temp
ui->textBrowser->insertPlainText(temp);
//将串口的数据显示在窗口的文本浏览器中
}

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

void Widget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}


[解决办法]
1.QextSerialBase::Polling 这是轮询机制不是事件驱动机制,更正一下。
2.终端看看/etc/dev下面串口ttys0应该是有人占用吧,还有你用的是U转串的线吧,所以啊你要建立一个符号链接吧USB口和ttys*进行连接 *号是一个未被占用的号码,随便都行只要没被占用就好。建立符号链接的命令ln 参数是s.
希望能够帮到你
[解决办法]

探讨
不是USB转串口的啊,就是台式机上的RS232口,串口也没被占用,不知道是什么原因。下载了几个网友上传的代码如linucom2.2.0来运行也是打不开串口,我装的是国产的中标麒麟操作系统,是不是系统原因啊。linux版本的程序是不是不能在麒麟下运行?麒麟的内核好像又是linux,不太明白,求高人指点!

[解决办法]
权限不够吧。minicom都得sudo的

读书人网 >UNIXLINUX

热点推荐