当前位置:网站首页>Qt | 串口通信 QSerialPort
Qt | 串口通信 QSerialPort
2022-08-02 14:12:00 【华为云】
环境:VS2017+Qt5.14.2
1.添加 SerialPort 模块。
下面是在 VS 中添加 NetWork 模块的流程,两个流程,任选一个就可以了。
右键项目->选择属性->选择 Qt Project Settings->Qt Modules->勾选 SerialPort 点击导航栏 Qt VS Tools->选择 Qt Project Settings->Qt Modules->勾选 SerialPort
2.声明 QSerialPort 成员变量。
QSerialPort *m_serialPort;m_serialPort = new QSerialPort();QSerialPort 类提供访问串口的功能,还可以通过 QSerialPortInfo 类获取可用串口的信息。QSerialPortInfo 类允许枚举系统中所有串口的信息,包括串口名称、系统位置、描述和制造商。QList<QSerialPortInfo) QSerialPortInfo::availablePorts();返回系统上可用串口的列表。
3.设置串口信息。
设置串口名: m_serialPort->setPortName(“COM3”);设置波特率: m_serialPort->setBaudRate(QSerialPort::Baud9600);//是一个衡量符号传输速率的参数。
设置数据位: m_serialPort->setDataBits(QSerialPort::Data8);//是衡量通信中实际数据位的参数。
设置奇偶校验: m_serialPort->setParity(QSerialPort::OddParity);//在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。
设置停止位: m_serialPort->setStopBits(QSerialPort::OneStop);//用于表示单个包的最后一位。
设置流控制: m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
设置读取数据的缓存大小: m_serialPort->setReadBufferSize(40960);
串口名称是必须要设置的,剩下的波特率、数据位、奇偶校验位、停止位、流控制不是必须要设置的,如果有特殊需求需要设置的时候,可以再进行设置,以上参数仅为参考,可以根据自己的情况查看参数值都有哪些。读取数据的缓存大小是必须要设置的,它的大小决定了串口收到数据后可以缓存的数据的大小,如果长时间不将数据从缓冲区取出来,会出现溢出丢数据的情况。所以这个缓存的大小可以根据实际的通信速度和数据量进行设置。
4.打开串口。
m_serialPort->open(QIODevice::ReadWrite);参数可以设置串口为只读、只写、读写三种方式。
5.打开监听消息线程。
std::thread pListenThread = std::thread(&Myself::ListenThreadFuc, this);pListenThread.detach();采用开线程的方式定时去读取串口中缓存的数据,这样做是为了不造成堵塞。
6.接收数据。
void Myself::ListenThreadFuc(){if (m_serialPort == nullptr){return;}
while (m_serialPort->isOpen())
{
QByteArray readData = m_serialPort->read(DATA_SIZE);
if (!readData.isEmpty())
{
emit ReadData(readData);
}
Sleep(100);
}
读数据可以使用 read()函数,read()函数指定每次读出的数据的大小。也可以使用 readAll()函数,readAll()函数会将串口中缓存的数据全部读出。
7.发送数据。
QByteArray byteSendData;m_serialPort->write(byteSendData);
8.关闭串口。
m_serialPort->clear();//清除输入输出缓冲区里面的数据 m_serialPort->close();//关闭串口设备 m_serialPort->deleteLater();//不立即销毁,父类销毁时再销毁
边栏推荐
猜你喜欢
随机推荐
C#高级教程
2342. 数位和相等数对的最大和 哈希优化
Summarize computer network super comprehensive test questions
Compilation error D8021: Invalid numeric argument '/Wextra' cl command line error d8021 invalid numeric argument '/Wextra'
动态规划理论篇
第二十七章:时间复杂度与优化
戴森球计划这个游戏牛逼
剑指offer:数值的整数次方
软件测试基础知识(背)
Test case exercises
STM32LL库使用——SPI通信
Detailed introduction to the hierarchical method of binary tree creation
求解斐波那契数列的若干方法
cmake configure libtorch error Failed to compute shorthash for libnvrtc.so
Redis 学习part one
6. Unified logging
Codeforces Round #605 (Div. 3)
Unity插件-NGUI
Yolov5 official code reading - prior to transmission
富文本编辑