Qt学习之串口通信_qt 创建串口通信教学视频-程序员宅基地

技术标签: QT  qt  

Qt之串口通信

工具:QT5.9

使用了QSerialPort类,并且需在.pro文件上加
QT += serialport

还有QSerialPortInfo
:Provides information about existing serial ports.
该类是一个串口的辅助类类,提供主要是提供系统已经存在串口的信息

好像Qt4 没有这个类


作用

单片机与上位机之间的通信


一、获取可用的串口号(QSerialPortInfo)

首先要获取当前可用的串口号,要用到QSerialPortInfo


 QSerialPort *m_Usart = new QserialPort;
 //遍历输出所有可用串口
 foreach(QSerialPortInfo info, QSerialPortInfo::availablePorts())
 {
    
     qDebug()<<info.portName();
     //添加到comboBox菜单里
     ui->comboBox->addItem(info.portName());
 }
 

二、串口创建&连接 (QSerialPort)

1.创建

QSerialPort *m_Usart = new QSerialPort();

bool Usart_Connect()
{
    
	//断开并清空正在连接的串口
    if(m_Usart->isOpen())
    {
    
        m_Usart->clear();
        m_Usart->close();
    }
    if(ui->comboBox->currentText().isNull())
    {
    
        qDebug()<<"PortName Error!";
        return false;
    }
    //配置串口信息
    m_Usart->setPortName(ui->comboBox->currentText());

    m_Usart->setBaudRate(115200);
    m_Usart->setDataBits(QSerialPort::Data8);
    m_Usart->setStopBits(QSerialPort::OneStop);
    m_Usart->setParity(QSerialPort::NoParity);
    if((m_Usart->baudRate()==-1) ||(m_Usart->dataBits()==-1) ||(m_Usart->stopBits()==-1) ||(m_Usart->parity()==-1))
        return false;

    m_Usart->setFlowControl(QSerialPort::NoFlowControl);//无流控制
    if(!m_Usart->open(QIODevice::ReadWrite))//以读写方式打开串口
    {
    
        qDebug()<<"Usart open Error!";
        return false;
    }

    //当串口有数据时,由槽函数接收并处理                  
    connect(m_Usart, SIGNAL(readyRead()), this, SLOT(Usart_RecvFunc()));
    qDebug()<<"m_Usart_Connect executed";
    return true;
}

2.读/写数据

	//读取数据
	QByteArray Recv_Data;
	Recv_Data.resize(m_Usart->readBufferSize());
	Recv_Data = m_Usart->readAll();
	
	//然后把收到的数据做处理
	...

	//写入数据
	QString buf("abcde");
	m_Usart->write(buf.toLatin1());

3.数据发送的格式

一般与单片机交互都是以16进制的格式进行交互,所以这里写一个互转函数(ByteArray转16进制的QString的互转)

//ByteArray转16进制的QString显示
QString BytearrayToHexstring(QByteArray data)
{
    
    QString ret(data.toHex().toUpper());
    qDebug()<<ret;
    int len = ret.length()/2;
    for(int i=1; i<len; i++)
    {
    
        qDebug()<<i;
        ret.insert(3*i-1, " ");
    }
    qDebug()<<ret;
    return ret;
}


//16进制的QString转ByteArray
QByteArray HexstringToBytearray(QString hexstring)
{
    
    bool ok;
    QByteArray ret;
	
	//除去"/r/n/t"等字符
    hexstring = hexstring.trimmed();
    hexstring = hexstring.simplified();
    QStringList str_list = hexstring.split(" ");
    foreach(QString str, str_list)
    {
    
        if(!str_list.isEmpty())
        {
    
            char c = str.toInt(&ok, 16) & 0xFF;//转16进制并保持二进制补码的一致
            if(ok)
            {
    
                ret.append(c);
            }else
            {
    
                qDebug()<<"hex->byte ERROR!";
                return hexstring.toLatin1();
            }
        }
    }
    qDebug()<<ret;
    return ret;
}


总结

主要用了QSerialPort和QSerialPortInfo两个类实现串口通信。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/crissby/article/details/120002814

智能推荐

轻量级web服务器-Nginx的入门-程序员宅基地

文章浏览阅读746次。Nginx轻量级web服务器目录Nginx轻量级web服务器前言一、如何进行nginx的安装1、首先要检查nginx是否已经安装​2、使用yum命令安装​二、使用nginx进行反向代理1、首先安装两个tomcat,端口分别是8081和80822、配置两个tomcat3、修改host文件4、配置nginx服务器总结前言Nginx是一款轻量级Web服务器,也是一款反向代理服务器。使用nginx可以帮助实现前端动静分离,可以作为邮件代理服务器,也可以_轻量级web服务器

lua学习笔记14 函数多返回值_lua函数多返回值-程序员宅基地

文章浏览阅读181次。lua学习笔记14 函数多返回值_lua函数多返回值

人工智能入门实战:如何在人工智能中实施可解释性_可解释性人工智能的应用-程序员宅基地

文章浏览阅读891次,点赞17次,收藏24次。人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能的科学。在过去的几十年里,人工智能技术已经取得了显著的进展,例如机器学习、深度学习、自然语言处理、计算机视觉等。然而,这些技术仍然存在一个重要的问题:它们的决策过程通常是不可解释的,这意味着人们无法理解这些算法如何到达某个决策。这种不可解释性可能导致许多问题,例如隐私问题、法律问题、道德问题和可靠性问题。为了解决这个问题,人工智能社区开始关注可解释性(Explainable AI, XAI)。_可解释性人工智能的应用

云上攻防-云原生篇&amp;Kubernetes&amp;K8s安全&amp;API&amp;Kubelet未授权访问&amp;容器执行(1)-程序员宅基地

文章浏览阅读974次,点赞14次,收藏10次。Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察。

[android] 将Java程序移植到android上_安卓 java层 移植-程序员宅基地

文章浏览阅读8.4k次。将Java程序移植到android上_安卓 java层 移植

对象存储入门 [ minIo ozone ]_对象存储minio和apache ozone-程序员宅基地

文章浏览阅读3k次。一. 前言OSS(Object Storage Service)俗称对象存储,主要提供图片、文档、音频、视频等二进制文件的海量存储功能。目前除了公有云提供对象存储服务外,一般私有云比较关心一些开源的分布式对象存储解决方案。公有云一般都提供对象存储服务,如阿里云的OSS,华为云的OBS,腾讯云的COS。一些开源的对象存储都会遵循Amazon s3协议。Amazon s3协议定义了操作对象存储的Resestfull风格的API。通过在pom中引用aws-java-sdk-s3可以实现对存储的操作。 _对象存储minio和apache ozone

随便推点

URI URL区别及转换_uri转url-程序员宅基地

文章浏览阅读6.4k次。https://www.iteye.com/blog/dingbuoyi-836621 String urlString = "http://192.168.21.77:8080/swp/mainPage?aa=11&bb%3D22"; URI uri = URI.create(urlString); System.out.println(uri.getPat..._uri转url

那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable-程序员宅基地

文章浏览阅读151次。好久没写过文章了,渐渐的发现自己懒了,o(︶︿︶)o 唉 懒惰是魔鬼.废话不多说了。 1、首先看一个简单的例子 int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Reset(); while ..._ienumerator ilist icollection

IDEA用Maven打包Spark(去掉不需要的依赖) POM文件_idea如何打没有依赖的包-程序员宅基地

文章浏览阅读2.3k次。1. 根据项目需要添加依赖;服务器上已经有大数据组件的依赖都无需打包依赖,所以可以在依赖加上<scope>provided</scope>2. 如果使用IDEA,在本地运行项目时要在运行配置勾选【Include dependencies with “Provided” scope】,否则会编译出错以下是POM.xml文件<?xml version="1.0" ..._idea如何打没有依赖的包

linux下实现录音和播放_linux c语言 应用 一边录音 一边播放-程序员宅基地

文章浏览阅读3.4k次。linux下编写本地录音和播放demo测试代码:1. 通过读.wav格式的音频流,将音频流写入DMA缓存区,实现语音播放;2. 通过读DMA缓存区的音频流,实现录音。首先要配置硬件参数,包括设置采样位数、通道数、采样率等,然后向DMA缓存区写或者读,实现播放和录音,具体见下文:/************************************************************************* > File Name: local_player.c_linux c语言 应用 一边录音 一边播放

PHP中几种常见的超时处理全面总结_除了 file_get_contents 还有哪些能卡死进程-程序员宅基地

文章浏览阅读943次。在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面处理性能差而导致无法访问其他页面,则会对某些页面操作设置 3. 对于某些上传或者不确定处理时间的场合,则需要对整个流程中所有超时设置为无限,否则任何一个环节设置不当,都会导致莫名执行中断 4_除了 file_get_contents 还有哪些能卡死进程

【数学建模】元胞自动机-程序员宅基地

文章浏览阅读3.1k次,点赞55次,收藏63次。【数学建模】元胞自动机_元胞自动机

推荐文章

热门文章

相关标签