c++ 串口 linux
时间: 2023-07-30 14:10:00 浏览: 154
在Linux上使用C++进行串口通信,可以使用串口设备文件来实现。下面是一个简单的示例代码,演示如何打开一个串口设备、读取和写入数据:
```cpp
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
const char *device = "/dev/ttyUSB0"; // 串口设备文件路径
int fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); // 打开串口设备
if (fd == -1) {
std::cerr << "无法打开串口设备文件" << std::endl;
return 1;
}
struct termios options;
tcgetattr(fd, &options); // 获取当前串口配置
// 设置串口波特率、数据位、停止位等
cfsetispeed(&options, B9600); // 输入波特率为9600
cfsetospeed(&options, B9600); // 输出波特率为9600
options.c_cflag |= (CLOCAL | CREAD); // 必要的控制标志
options.c_cflag &= ~PARENB; // 禁用奇偶校验
options.c_cflag &= ~CSTOPB; // 1位停止位
options.c_cflag &= ~CSIZE; // 清除数据位设置
options.c_cflag |= CS8; // 设置数据位为8
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 禁用规范模式和回显
options.c_iflag &= ~(IXON | IXOFF | IXANY); // 禁用软件流控制
options.c_oflag &= ~OPOST; // 禁用输出处理
tcsetattr(fd, TCSANOW, &options); // 设置串口配置
// 从串口读取数据
char buffer[256];
int bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead > 0) {
std::cout << "读取到 " << bytesRead << " 字节的数据: " << buffer << std::endl;
}
// 向串口写入数据
const char *data = "Hello, serial!";
int bytesWritten = write(fd, data, strlen(data));
if (bytesWritten > 0) {
std::cout << "写入了 " << bytesWritten << " 字节的数据" << std::endl;
}
close(fd); // 关闭串口设备
return 0;
}
```
请注意,上述代码仅是一个简单的示例,可能需要根据实际需求进行修改和完善。另外,还要确保你有足够的权限来访问串口设备文件(通常需要root权限或者将当前用户添加到dialout组)。
阅读全文