C++在Linux编写串口通信
时间: 2023-10-11 18:11:34 浏览: 548
以下是一个使用 C++ 在 Linux 上进行串口通信的示例程序:
```cpp
#include <iostream>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <cstring>
int main()
{
int fd; // 串口文件描述符
char portName[] = "/dev/ttyS0"; // 串口设备文件名
char writeBuf[] = "Hello, world!"; // 要发送的数据
char readBuf[1024] = { 0 }; // 接收缓冲区
// 打开串口
fd = open(portName, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0)
{
std::cerr << "无法打开串口" << std::endl;
return 1;
}
// 配置串口参数
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600); // 输入波特率
cfsetospeed(&options, B9600); // 输出波特率
options.c_cflag &= ~PARENB; // 禁用奇偶校验
options.c_cflag &= ~CSTOPB; // 1位停止位
options.c_cflag &= ~CSIZE; // 数据位掩码
options.c_cflag |= CS8; // 8位数据位
tcsetattr(fd, TCSANOW, &options);
// 发送数据
if (write(fd, writeBuf, strlen(writeBuf)) < 0)
{
std::cerr << "无法发送数据" << std::endl;
close(fd);
return 1;
}
// 接收数据
if (read(fd, readBuf, sizeof(readBuf)) < 0)
{
std::cerr << "无法接收数据" << std::endl;
close(fd);
return 1;
}
// 输出接收到的数据
std::cout << "接收到的数据:" << readBuf << std::endl;
// 关闭串口
close(fd);
return 0;
}
```
这个程序会打开 `/dev/ttyS0` 设备文件,配置串口参数后发送一段数据,并等待接收数据。在实际应用中,需要根据具体情况进行修改和完善。
阅读全文