qt 设置串口起始位_Linux下QT5以上版本串口的最简单实现(测试可用)

Linux下QT5以上版本串口的最简单实现(测试可用)

1. 简介

简简单单一个串口,在Linux环境下踩了无数的雷。这里用最简单的方式实现串口通讯。

把串口的TX和RX短接,就可以收到我们发的数据了。

2. 查看串口名称

打开终端,输入命令行,看看现在设备上有的串口。看看你想用哪一个。

//查看串口名称

ls -l /dev/ttyS*

//终端输出

crw-rw---- 1 root dialout 4, 67 7月 28 08:51 /dev/ttyS1

crw-rw---- 1 root dialout 4, 67 7月 28 08:51 /dev/ttyS2

crw-rw---- 1 root dialout 4, 67 7月 28 08:51 /dev/ttyS3

3. QT代码

QT5以上的版本,可以使用“serialport”非常方便。

在.pro文件中加入一句话

QT += serialport

简单说,串口总共分三步:

第一步初始化

myCom = new QSerialPort();//这个在.h中定义了 QSerialPort *myCom;//声明对象

myCom->setPortName("/dev/ttyS3");//串口的名称

myCom->open(QIODevice::ReadWrite);//读写模式

myCom->setBaudRate(QSerialPort::Baud9600);//波特率

myCom->setBaudRate(QSerialPort::Data8);//8位数据

myCom->setParity(QSerialPort::NoParity);//无校验位

myCom->setStopBits(QSerialPort::OneStop);//1位停止

myCom->setFlowControl(QSerialPort::NoFlowControl);//无数据流控制

connect(myCom,SIGNAL(readyRead()),this,SLOT(getdata()));//连接接收的槽函数

第二步发送

void MainWindow::on_pushButton_clicked()

{

char sd[2];

sd[0]='O';

sd[1]='K';

qWarning()<

myCom->write(sd,2);//发送两位

}

第三步接收

void MainWindow::getdata()

{

QByteArray buf_data; //接收数据,qByteArray是最常用的类

buf_data = myCom->readAll(); //接收数据

qWarning()<

qWarning()<

}

界面,就一个按钮发送用。

输出结果:

我们需要把串口的TX和RX短接,就可以收到我们发的数据了。

这里的意思是收到两次数据,第一次一个’O’,第二次一个’K’。

但是我们发送的是两位数据“OK”。

出现这种情况是因为程序运行速度远远超过发送的速度。

第二个数没到呢,第一个数据已经处理完了。

这里就需要协议了,定义数据的长度和起始位和停止位,然后整合数据。

但是能收到数据就表示串口好使了。

4. 存在的问题的问题

问题1:上文已经提到的数据断开的问题。

需要协议,定义数据的长度和起始位和停止位,然后整合数据。

问题2:权限不足有可能导致串口打不开。

部分linux系统的串口权限只开放给root,需要用命令行打开QT再运行程序。

su root

密码://我的是00000000

/usr/bin/qtcreator

问题3:qWarning的使用

再linux下,qDebug()是用不了的。

只能使用qWarning,目前来看功能完全一样,头文件是:

#include

本文地址:https://blog.csdn.net/qq_36353009/article/details/107632116

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值