0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术嵌入式Linux主板Qt串口应用程序简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-17 09:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

串口和其他设备一样,在Linux系统中都是以设备文件的形式存在的,在英创公司提供的Linux主板配套光盘中,已经提供了基于C/C++ 的Linux标准串口操作例程,使用open函数来打开串口设备文件:'/dev/ttyS1',设置串口参数,创建一个单独的线程来对数据进行收发,使用read函数读取数据,write函数发送数据。并且英创公司将其封装成一个serial类,可以使用serial类方便的操作英创工控主板的串口资源。

本文介绍如何在英创公司提供的Linux工控主板的串口例程Step2_serialtest的基础上,加入了Qt显示,实现在LCD显示屏上控制串口通讯。基本的思想是利用Qt的信号和插槽机制进行对象间的通讯,当串口接收的数据的时候,发出Signal,Qt 的显示事件循环中接收到这个信号,调用定义好的Slot显示串口的数据,如下图:

串口和Qt显示

先使用Qt Creator创建一个工程,加入英创公司提供的Linux工控主板串口例程中的serial.h和serial.cpp文件,因为要在Step2_serialtest例程的基础上加入Qt显示单元,所以我们需要让英创公司封装好的serial类继承QObject类的属性,使QObject成为serial类的基类,然后在serial类中加入一个signal,让serial类和Qt显示通过信号和插槽的机制连接。但是对于串口的操作部分并不用做修改。

QObject类是所有Qt对象的基类并且是Qt对象模型的中心。这个模型的中心特征就是一种用于无缝对象通讯的被叫做信号和槽的非常强大的机制。只有继承了 QObject 类的类,才具有信号和槽的能力。所以,为了使用信号和槽,必须继承 QObject。凡是 QObject 类(不管是直接子类还是间接子类),都应该在第一行代码写上 Q_OBJECT。不管是不是使用信号和槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号和槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。所以在serial.h中作如下修改:

class CSerial: public QObject //继承QObject
{
Q_OBJECT
signals:
void readyRead(QString);
};

在serial.cpp中,串口数据接收线程检测到有数据可读时,添加发送信号的语句,提示显示对象有数据可以显示,并把数据发送给显示对象:

emit pSer->readyRead(pSer->DatBuf);

对串口程序的修改已经完成,在工程中加入Qt设计师界面,根据需要设计显示界面,本例程中的界面如下:

设计的界面

可以看到,在界面中添加了三个按钮,分别为“打开串口”,“关闭串口”和“清除数据”,两个组合框,用来选择串口的端口号和比特率,一个文本浏览器用来显示串口接收的数据。在工程中加入窗口显示程序:widget.h和 widget.cpp,首先要对显示界面进行初始化,实现代码如下:

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //显示界面的初始化
setActionsEnabled(true); //使能组件
setComboBoxEnabled(true);
}

定义接收串口发送信号的插槽,在窗口的文本浏览器中显示串口接收的数据:

void Widget::readMyCom(QString buf)
{
//将串口的数据显示在窗口的文本浏览器中
ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
}

将串口发送的Signal和显示窗口类中Slot连接起来,以便响应:

QObject::connect(myCom,SIGNAL(readyRead(QString)),this,SLOT(readMyCom(QString)),Qt::QueuedConnection);

这里需要特别说明一点,由于串口例程会打开一个线程对数据进行处理,所以这里发送Signal的是串口处理数据的线程,而接收Signal是在显示的线程中,所以他们的连接方式需要采用Qt::QueuedConnection,这样使用跨线程的Signal和Slot连接,Signal发送以后,会等到控制权返回到接收者线程的事件循环后才调用槽,就是说槽在接收者的线程中被执行,如果采用其他方式连接,显示可能就会出现各种错误。

如果在显示界面中添加了一些其他功能组件,比如按钮等,可以在这里编写组件的事件响应函数,实现想要的功能,在本例程中,添加了一些组合框和按钮,用来选择串口的端口号和波特率,并且打开或者关闭串口,部分实现代码如下:

void Widget::on_openpushButton_clicked() //打开按钮
{
qint8 i;
portno=ui->portNamecomboBox->currentText(); //读取端口号
ba = portno.toLatin1();
m_portno=ba.data(); //转换为字符串
ba.clear();
baudRate=ui->baudRatecomboBox->currentText(); //读取波特率
m_baudRate=baudRate.toInt(); //转换为整形
myCom=new CSerial;
i=myCom ->OpenPort( m_portno, m_baudRate, '8', '1', 'N' ); //打开串口
if(i<0)
{
QMessageBox::information(this, tr('打开失败'), tr('打开串口失败') , QMessageBox::Ok); //打开失败弹出提示框
delete myCom;
myCom = NULL;
return;
}

void Widget::on_closeopenpushButton_clicked() //关闭按钮
{
myCom->ClosePort(); //关闭串口
delete myCom;
myCom = NULL;
setComboBoxEnabled(true);
ui->closeopenpushButton->setEnabled(false);
}

最后在工程中添加main.cpp,在main函数中,主要是对字体进行设置,并且显示我们设计的窗口:

int main( int argc,char* argv[] )
{
QApplication a(argc, argv);
QFont font('simsun',11,QFont::Bold); //设置字体
a.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName('utf8'));
Widget w;
w.showFullScreen(); //显示窗口
return a.exec();
}

运行程序,例程的效果如下:

程序运行效果

可以通过显示界面选择开启哪一路串口,设置波特率,显示接收到的数据。本例程只是简单的把Step2_serialtest和Qt的显示连接起来,将串口收到的数据显示在Qt的界面中,并且进行回发,客户的使用方法还是和以前的Step2_serialtest一样只是增加了显示界面。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11829

    浏览量

    219637
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    37177
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是嵌入式应用开发?

    。 · ‌医疗设备‌:如心电图仪、血压计等。 开发工具和技术 嵌入式开发过程中常用的工具包括: · ‌集成开发环境(IDE)‌:用于编写、编译和调试代码。 · ‌编译器‌:将高级语言代码转换为机器语言
    发表于 01-12 16:13

    arm嵌入式主板优缺点

    Windows CE、Linux等主流的嵌入式操作系统。   ARM的优点   一、高可靠性、高稳定性:在工业控制领域,性能稳定可靠是自动控制基本的要求,ARM嵌入式主板有着很特殊
    发表于 01-08 07:08

    从小白到大牛:Linux嵌入式系统开发的完整指南

    编写简单的 Shell 脚本(如自动备份文件、批量编译程序)巩固技能。​ 二、能力进阶:攻克核心技术模块​ 入门后需聚焦嵌入式 Linux 的核心
    发表于 12-16 10:42

    开源 | 60余套STM32单片机、嵌入式Linux、物联网、人工智能项目(开发板+教程+源码)

    嵌入式实战项目推荐15个嵌入式Linux+Qt综合应用项目,涉及家居、医疗、农业等多种应用领域,案例中使用了嵌入式、物联网、人工智能多技术
    的头像 发表于 12-04 11:42 1008次阅读
    开源 | 60余套STM32单片机、<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>、物联网、人工智能项目(开发板+教程+源码)

    嵌入式主板的选型与应用

    一、嵌入式主板核心元器件选型的关键考量在嵌入式主板设计中,核心元器件的选型直接决定产品性能与可靠性,需结合场景需求精准匹配。以处理器为例,除算力与功耗外,还需关注工业级温度范围——如
    的头像 发表于 11-03 17:20 898次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>的选型与应用

    嵌入式从入门到进阶,怎么学?

    嵌入式从入门到进阶,怎么学? 嵌入式学习的核心是 “软硬结合的技术壁垒”,科学分层才能高效突破。以下是从入门到高阶的精简路线,帮你避开弯路: 1、基础奠基层:构建技术底座 C 语言聚焦
    发表于 09-02 09:44

    嵌入式工程师为什么要学QT?

    Qt嵌入式工程师来说,真的很重要吗? Qt是一个跨平台的C++应用程序开发框架,非常适合嵌入式系统的开发,
    发表于 08-14 15:15

    高效开发 | 瑞迅基于瑞芯微系列主板QT移植部署(上)

    嵌入式开发的浪潮中,RK3568平台以其强劲性能成为诸多领域的宠儿,而QT凭借出色的跨平台特性和丰富功能,是界面开发的利器。将QT5移植到RK3568平台的深度融合,是嵌入式硬件标准
    的头像 发表于 07-11 15:39 1268次阅读
    高效开发 | 瑞迅基于瑞芯微系列<b class='flag-5'>主板</b><b class='flag-5'>QT</b>移植部署(上)

    嵌入式软件开发常用的软件有哪些?

    软件功能。 2. Visual Studio 简称VS: 它是一个IDE,集成开发环境。验证C程序或是进行c#程序开发,可以用它。一些与嵌入式相关的模拟器也是基于VS的。帮助开发人员更稳定,更有
    发表于 07-03 17:06

    一文带你了解嵌入式主板

    嵌入式主板是专为嵌入式系统设计的计算机主板。它与我们常见的台式机或笔记本电脑主板有着显著的区别,核心在于它不是为了通用计算,而是为了执行特定
    的头像 发表于 06-30 16:12 924次阅读
    一文带你了解<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>

    Linux嵌入式和单片机嵌入式的区别?

    :使用Linux操作系统,可以运行各种复杂的应用程序和驱动程序。 4. 资源需求 : 单片机嵌入式 :对硬件资源的需求较低,通常只需要一个单片机芯片,内存和存储空间较小。
    发表于 06-20 09:46

    嵌入式主板详解与选购指南

    什么是嵌入式主板嵌入式主板是专为嵌入式系统设计的核心计算平台。它与我们日常使用的台式机或笔记本电脑主板
    的头像 发表于 06-06 13:23 994次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>详解与选购指南

    嵌入式主板特点与应用场景解析

    嵌入式主板(EmbeddedMotherboard)是专为嵌入式系统设计的重要硬件平台,通常集成处理器、内存、存储、接口等关键组件,用于控制和管理特定设备或应用。与通用计算机主板不同,
    的头像 发表于 05-26 15:12 1016次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>特点与应用场景解析

    在金融发展领域,嵌入式主板有什么优点?

    在金融发展领域,嵌入式主板能够有力推动金融行业的智能化与高效化进程。主板的强大计算能力可以保障业务高效运行。
    的头像 发表于 05-19 09:22 843次阅读

    浪潮下,国产主板有什么新的发展机遇?

    信息技术应用创新浪潮的推动下,国产主板迎来了诸多新的发展机遇。信产业旨在实现信息技术领域的自主可控,这一战略目标为国产主板的发展提供了广
    的头像 发表于 05-09 09:24 896次阅读
    信<b class='flag-5'>创</b>浪潮下,国产<b class='flag-5'>主板</b>有什么新的发展机遇?