Linux C RS485 串口通信应用程序示例
RS485 通讯是一种串行通讯协议,可以在一个总线上连接多个设备。在 Linux 系统下,可以通过串口驱动程序来实现 RS485 通讯功能。下面是一个简单的 RS485 应用程序示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#define SERIAL_PORT "/dev/ttyS0"
int main(int argc, char *argv[])
{
int fd;
struct termios options;
// 打开串口设备
fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
// 设置串口参数
tcgetattr(fd, &options);
options.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
options.c_iflag = IGNPAR;
options.c_oflag = 0;
options.c_lflag = 0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
// 发送数据
char buf[256] = 'Hello, RS485!';
write(fd, buf, strlen(buf));
// 接收数据
memset(buf, 0, sizeof(buf));
read(fd, buf, sizeof(buf));
printf("Received data: %s\n", buf);
// 关闭串口设备
close(fd);
return 0;
}
该程序首先打开串口设备,然后设置串口参数,包括波特率、数据位、停止位等参数。接着向串口发送数据,然后等待接收数据,并将接收到的数据打印出来。最后关闭串口设备。
需要注意的是,在 RS485 通讯中,需要将发送和接收方向进行切换,以便正确地进行通讯。可以通过控制 RTS 和 DTR 信号来实现切换。例如,在发送数据前,可以将 RTS 信号设置为高电平,表示发送方向;在接收数据时,可以将 RTS 信号设置为低电平,表示接收方向。具体实现方法可以参考串口驱动程序的文档。
另外,需要注意的是,在 Linux 系统下,串口设备通常以 "/dev/ttyS0"、"/dev/ttyS1" 等方式命名,需要根据实际情况进行修改。
原文地址: https://www.cveoy.top/t/topic/nT4T 著作权归作者所有。请勿转载和采集!