#include #include // 包含open函数 #include // 包含close函数 #include // 包含termios结构体 #include // 包含memset函数 #include // 包含std::string #include "GetFrame.h" // 串口配置参数 const char* SERVO_PORT_NAME = "/dev/ttyS3"; // 串口设备文件,根据实际情况修改 const speed_t BAUDRATE = B115200; // 波特率 bool setupSerialPort(int& fd, const char* portName, speed_t baudRate); bool sendSerialData(int fd, const std::string& data); int main() { int uart_fd; // 串口文件描述符 // 开启并配置串口 if (!setupSerialPort(uart_fd, SERVO_PORT_NAME, BAUDRATE)) { std::cerr << "Failed to setup serial port" << std::endl; return 1; } // 要发送的数据帧 //std::string data_frame = "Hello, servo!"; // 字符串数据 std::string data_frame = GetFrame(); // 通过串口发送数据 if (!sendSerialData(uart_fd, data_frame)) { std::cerr << "Failed to send data" << std::endl; close(uart_fd); // 关闭串口 return 1; } std::cout << "Data frame sent successfully" << std::endl; close(uart_fd); // 关闭串口 return 0; } bool setupSerialPort(int& fd, const char* portName, speed_t baudRate) { fd = open(portName, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { std::cerr << "Error opening serial port: " << portName << std::endl; return false; } struct termios options; tcgetattr(fd, &options); // 获取当前串口配置 // 设置输入输出波特率 cfsetispeed(&options, baudRate); cfsetospeed(&options, baudRate); // 本地模式 | 接收使能 options.c_cflag |= (CLOCAL | CREAD); // 设置数据位数 options.c_cflag &= ~CSIZE; // 清空数据位设置 options.c_cflag |= CS8; // 8位数据位 // 设置无奇偶校验 options.c_cflag &= ~PARENB; // 设置停止位 options.c_cflag &= ~CSTOPB; // 设置原始输入输出模式 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_iflag &= ~(IXON | IXOFF | IXANY); options.c_oflag &= ~OPOST; // 应用配置 if (tcsetattr(fd, TCSANOW, &options) != 0) { std::cerr << "Error applying serial port settings" << std::endl; return false; } return true; } bool sendSerialData(int fd, const std::string& data) { if (write(fd, data.c_str(), data.size()) < 0) { std::cerr << "Error writing to serial port" << std::endl; return false; } return true; }