串口是一种常见的通信方式,在 C++ 中可以通过串口库来实现串口的创建和通信。

使用 Windows API 创建串口

以下是一个简单的 C++ 程序,用于创建串口:

#include <iostream>
#include <windows.h>

int main()
{
    HANDLE hComm;
    hComm = CreateFile('COM1', GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (hComm == INVALID_HANDLE_VALUE) {
        std::cout << 'Failed to open the serial port!' << std::endl;
        return 1;
    }
    // 设置串口参数
    DCB dcb;
    GetCommState(hComm, &dcb);
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    SetCommState(hComm, &dcb);
    // 关闭串口
    CloseHandle(hComm);
    return 0;
}

上面的程序创建了一个名为'COM1'的串口,设置了波特率为9600,数据位为8,无校验位,停止位为1。程序执行完毕后关闭了串口。

需要注意的是,在 Windows 系统中,串口的名称通常为'COM1'、'COM2'等,而在 Linux 系统中,串口通常为'/dev/ttyS0'、'/dev/ttyS1'等。

使用 Boost.Asio 库实现串口读写

同时,需要使用串口库来实现串口的读写操作。常见的串口库有 Boost.Asio、Qt Serial Port 等。以下是使用 Boost.Asio 库来实现串口读写的示例代码:

#include <iostream>
#include <boost/asio.hpp>

int main()
{
    boost::asio::io_service io;
    boost::asio::serial_port port(io);
    port.open('COM1');
    port.set_option(boost::asio::serial_port_base::baud_rate(9600));
    port.set_option(boost::asio::serial_port_base::character_size(8));
    port.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::none));
    port.set_option(boost::asio::serial_port_base::stop_bits(boost::asio::serial_port_base::stop_bits::one));
    while (true) {
        char data[1024];
        boost::asio::read(port, boost::asio::buffer(data, 1024));
        std::cout << data << std::endl;
    }
    return 0;
}

上面的程序使用 Boost.Asio 库来创建一个串口,设置了波特率为9600,数据位为8,无校验位,停止位为1。程序进入一个无限循环,不断读取串口传来的数据,并输出到控制台上。可以根据需要进行修改。

总结

本文介绍了使用 C++ 创建和操作串口的步骤,并提供了使用 Windows API 和 Boost.Asio 库的示例代码。了解如何设置串口参数、进行读写操作以及处理错误。在实际应用中,您可能需要根据具体的场景选择合适的串口库和方法。


原文地址: https://www.cveoy.top/t/topic/npqj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录