C++ 串口编程:创建和通信
串口是一种常见的通信方式,在 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 著作权归作者所有。请勿转载和采集!