在C語言中,可以使用相應的庫函數來實現串口通信。以下是一個簡單的串口通信的C代碼示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
int main() {
int serial_port;
struct termios tty;
// 打開串口
serial_port = open("/dev/ttyUSB0", O_RDWR);
if (serial_port < 0) {
perror("打開串口失敗");
return -1;
}
// 配置串口
memset(&tty, 0, sizeof(tty));
if (tcgetattr(serial_port, &tty) != 0) {
perror("獲取串口配置失敗");
return -1;
}
// 設置波特率
cfsetospeed(&tty, B9600);
cfsetispeed(&tty, B9600);
// 設置數據位、停止位和校驗位
tty.c_cflag &= ~PARENB; // 不使用奇偶校驗
tty.c_cflag &= ~CSTOPB; // 1個停止位
tty.c_cflag &= ~CSIZE; // 清除字符大小的位
tty.c_cflag |= CS8; // 設置字符大小為8位
// 設置為原始模式
tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
// 禁用軟件流控制
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
// 禁用硬件流控制
tty.c_cflag &= ~CRTSCTS;
// 保存設置
if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
perror("保存串口配置失敗");
return -1;
}
// 從串口讀取數據
char buffer[255];
memset(buffer, '\0', sizeof(buffer));
int bytes_read = read(serial_port, buffer, sizeof(buffer) - 1);
if (bytes_read > 0) {
printf("接收到的數據:%s\n", buffer);
} else {
perror("讀取串口數據失敗");
return -1;
}
// 向串口寫入數據
char *message = "Hello, Serial Port!";
int bytes_written = write(serial_port, message, strlen(message));
if (bytes_written > 0) {
printf("成功寫入 %d 字節的數據\n", bytes_written);
} else {
perror("向串口寫入數據失敗");
return -1;
}
// 關閉串口
close(serial_port);
return 0;
}
在代碼中,首先使用open()
函數打開串口設備文件(例如/dev/ttyUSB0
),然后使用tcgetattr()
和tcsetattr()
函數獲取和設置串口的配置參數。配置參數包括波特率、數據位、停止位、校驗位等。接下來,使用read()
函數從串口讀取數據,并使用write()
函數向串口寫入數據。最后,使用close()
函數關閉串口。
請注意,上述代碼僅為簡單示例,并未進行錯誤處理和完整的數據讀寫操作。在實際應用中,需要根據具體需求進行修改和完善。