有谁用过“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.
希望能够帮到你
------解决方案--------------------
------解决方案--------------------权限不够吧。minicom都得sudo的