C++ 串口通讯封装代码
时间: 2024-10-09 16:14:06 浏览: 59
在C++中,串口通讯通常涉及到底层的硬件访问,这需要对操作系统特定的API有了解,例如Windows下的Win32 API或者Linux下的POSIX API。以下是一个简单的基于跨平台库`SerialPort`(如Poco C++库)的封装示例:
```cpp
#include <Poco/SerialPort.h>
#include <Poco/Timespan.h>
class SerialManager {
public:
// 构造函数配置默认串口参数
explicit SerialManager(const std::string& portName, int baudRate = 9600)
: m_port(portName), m_baudRate(baudRate) {
open();
}
// 打开串口连接
void open() {
try {
m_port.setBaudRate(m_baudRate);
m_port.setDataBits(Poco::SerialPort::Data8);
m_port.setStopBits(Poco::SerialPort::One);
m_port.setParity(Poco::SerialPort::None);
m_port.open();
} catch (const Poco::Exception& ex) {
// 处理打开失败
std::cerr << "Error opening serial port: " << ex.displayText() << std::endl;
}
}
// 发送数据
void send(const std::string& data) {
m_port.write(data.c_str(), data.length());
}
// 接收数据
std::string receive(size_t maxLength) {
char buffer[maxLength];
size_t bytesRead = m_port.readBytes(buffer, maxLength);
return std::string(buffer, bytesRead);
}
// 关闭串口
~SerialManager() {
close();
}
private:
Poco::SerialPort m_port;
int m_baudRate; // 默认波特率
};
// 使用示例
int main() {
SerialManager serial("COM1");
if (!serial.isOpen()) {
std::cout << "Failed to open serial port." << std::endl;
return -1;
}
serial.send("Hello, Serial!");
std::string received = serial.receive(50);
std::cout << "Received: " << received << std::endl;
serial.close();
return 0;
}
```
阅读全文