Qt调用串口控制步进电机

1.环境配置

    Qt5中有一个QSerialPort类,使用它我们就可以方便的进行串口通信。

    要使用QSerialPort,首先要在pro文件中添加

QT       += serialport

这句话的作用是让Qt加载串口库函数

然后还要在使用串口的文件中添加头文件

#include <QtSerialPort/QSerialPort>  //QSerialPort:提供访问串口的功能
​​​​​​​#include <QtSerialPort/QSerialPortInfo>   //QSerialPortInfo:提供系统中存在的串口的信息

做好这些内容就可以使用串口设备了.

2.串口设置

串口设备一般有这样几个很重要的设置,需要输入设备与输出设备完全对应:

  • 串口号 
  • 波特率 
  • 数据位 
  • 校验位 
  • 停止位 

所以使用串口首先就要新建 QSerialPort串口对象,对这几项参数进行设置。

由于串口设备往往会在不同的函数中被调用,所以我们可以使用全局变量保存串口设备的指针,在初始化函数中创建串口设备的对象,并将全局的指针指向这个对象,以达到在不同函数中使用同一串口设备的作用。以下是对于串口设备进行设置的一个举例:

QSerialPort *serial = new QSerialPort;
    //设置串口名
    serial->setPortName(Portname);
    //打开串口
    serial->open(QIODevice::ReadWrite);
    //设置波特率
    serial->setBaudRate(BaudRate);
    //设置数据位数
    serial->setDataBits(QSerialPort::Data8);
     //设置奇偶校验
    serial->setParity(QSerialPort::NoParity);
    //设置停止位
    serial->setStopBits(QSerialPort::OneStop);
    //设置流控制
    serial->setFlowControl(QSerialPort::NoFlowControl);

在这里我们新建了一个串口设备指针 serial ,并将这个指针指到新建的串口对象上。

设置串口的名字为Portname,这里Portname是一个QString型的变量 表示串口的名字,一般是“COM1”、“COM2”这样的名字,它必须是计算机设备上已经存在的串口设备名字,且没有被其他程序占用,才能被顺利的打开。

以可读可写方式打开串口,设置波特率BaudRate 为整数,常用的波特率有1200、2400、9600、115200、640000等。

设置数据位为8位,校验位为无校验,停止位为一位,不使用流控制。

3.串口读取

配置好串口设置后,我们就要准备串口读取函数和串口写入函数了。当串口设备接收到一组(注1)从串口传来的信息之后,会发送一个readyRead()信号,这时候我们只要设置槽函数Read_Data()与这个信号进行连接,使用readAll()函数就能够实现对串口设备的读取功能了。

void MainWindow::Read_Data()  
{  
     QByteArray buf;  
     buf = serial->readAll();  
}  

//连接串口读取函数
        QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);

设置好连接函数后,当串口数据传来的时候就能自动通过readyRead信号触发Read_Data函数,从而实现串口内容的读取了。

注1:这里我使用了措辞“一组”,而不是说接受信息完毕,是因为发送端发送过来的一串信息场常常被分为几段信息被串口接收设备接收,就比如发送的内容为“beautiful”而接收到的信息可能是“bea”、“uti”、“ful”触发了三次readyRead信号。这对串口数据的读取后的处理有着一定的影响.

4.串口写入

串口写入函数非常简单 

serial->write(bytes);

write函数可以将数据以byte的形式发送出去,这里的bytes推荐使用QByteArray类型保存和处理

未完待续

二、可用串口设备的自动检测(定时器的使用以及黑名单策略)

三、自动保存上一次的串口设备配置(QSettings)

四、串口设备的hex格式读写功能

五、配置完成后能够自动隐藏的串口组件

六、文件读写,串口数据的保存

猜你喜欢

转载自blog.csdn.net/fly_wt/article/details/81670165