在C++中設置串口參數可以使用系統提供的API函數來實現,以下是一個簡單的示例代碼,用于設置串口的波特率、數據位、停止位和校驗位:
#include <iostream>
#include <cstring>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
int main() {
int serial_fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
if (serial_fd < 0) {
std::cerr << "Error opening serial port" << std::endl;
return 1;
}
struct termios tty;
memset(&tty, 0, sizeof(tty));
if(tcgetattr(serial_fd, &tty) != 0) {
std::cerr << "Error getting serial port attributes" << std::endl;
return 1;
}
cfsetospeed(&tty, B9600); // 設置波特率為9600
cfsetispeed(&tty, B9600);
tty.c_cflag |= (CLOCAL | CREAD); // 本地連接和使能接收
tty.c_cflag &= ~PARENB; // 不使用校驗位
tty.c_cflag &= ~CSTOPB; // 1位停止位
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8; // 8位數據位
if(tcsetattr(serial_fd, TCSANOW, &tty) != 0) {
std::cerr << "Error setting serial port attributes" << std::endl;
return 1;
}
close(serial_fd);
return 0;
}
在這個示例中,我們首先打開串口設備文件/dev/ttyUSB0
,然后獲取當前的串口屬性。接著使用cfsetospeed()
和cfsetispeed()
函數設置波特率,通過設置c_cflag
來配置其他參數,最后使用tcsetattr()
函數將配置的屬性應用到串口上。