要使用C語言讀取串口數據,可以使用以下步驟:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int serial_fd = open("/dev/ttyS0", O_RDWR);
if (serial_fd == -1) {
perror("無法打開串口");
exit(1);
}
這里的/dev/ttyS0
是串口設備的路徑,對于Linux系統,通常是/dev/ttyS0
或/dev/ttyUSB0
。需要根據實際情況修改。
struct termios options;
tcgetattr(serial_fd, &options);
cfsetispeed(&options, B9600); // 設置波特率為9600
cfsetospeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD); // 啟用接收和本地模式
options.c_cflag &= ~PARENB; // 無校驗位
options.c_cflag &= ~CSTOPB; // 1個停止位
options.c_cflag &= ~CSIZE; // 數據位掩碼
options.c_cflag |= CS8; // 8個數據位
tcsetattr(serial_fd, TCSANOW, &options);
這里的配置是設置波特率為9600,無校驗位,1個停止位,8個數據位。根據需要修改配置。
char buffer[255];
int length = read(serial_fd, buffer, sizeof(buffer));
if (length > 0) {
printf("讀取到了%d個字節的數據:%s\n", length, buffer);
}
這里使用read
函數從串口讀取數據,將數據存儲在buffer
中,并返回讀取的字節數。可以根據實際情況修改緩沖區大小。
close(serial_fd);
完整的示例代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int serial_fd = open("/dev/ttyS0", O_RDWR);
if (serial_fd == -1) {
perror("無法打開串口");
exit(1);
}
struct termios options;
tcgetattr(serial_fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
tcsetattr(serial_fd, TCSANOW, &options);
char buffer[255];
int length = read(serial_fd, buffer, sizeof(buffer));
if (length > 0) {
printf("讀取到了%d個字節的數據:%s\n", length, buffer);
}
close(serial_fd);
return 0;
}
請注意,以上示例代碼只是一個簡單的示例,實際應用中需要根據需求進行適當的修改和錯誤處理。