Linux下C语言实现串口通讯例程

一、分析需求

        我们的目标,是在Linux系统中实现一个C语言的串口通讯程序,能与插入的串口通讯设备进行通讯。所以代码层面的目标可以拆解为三个:

        1.正确配置串口。

        2.实现写入功能。

        3.实现读取功能

        在分化需求之后,我们来从代码层面逐个实现。

二、串口配置及初始化

        “Linux中一切皆文件”想必大家耳熟能详。随着不断的学习和运用,对这句话的理解也逐渐加深。"Linux下一切皆文件" 是对Linux操作系统中一种重要设计理念的简化描述。这个理念强调了Linux系统中几乎所有对象和资源都可以被抽象为文件,并通过文件系统接口进行访问和操作。

        在Linux中,硬件设备(如硬盘、串口、USB设备等)通常被表示为设备文件,位于/dev目录下。例如,/dev/sda可能代表第一个SCSI硬盘。通过读写这些设备文件,用户空间程序可以与硬件设备进行交互。而我们的串口USB在插入并经过Linux驱动识别后,会以/dev/ttyUSB*的格式出现:

root@dlpprinter:/# ls /dev/ttyUSB*
/dev/ttyUSB0

        通过操作这个文件,我们可以对串口进行一系列配置,以下是一个串口初始化的函数:

int serial_init(const char *port, speed_t baudrate) {
	int fd = open(port, O_RDWR | O_NOCTTY); // 打开串口设备文件
	if (fd == -1) {
		perror("open_port: Unable to open serial port"); // 输出错误信息
		return -1;
	}

	struct termios tty;
	memset(&tty, 0, sizeof(tty));
	if (tcgetattr(fd, &tty) != 0) { // 获取串口属性
		perror("tcgetattr");
		close(fd);
		return -1;
	}

	cfsetispeed(&tty, baudrate); // 设置输入波特率
	cfsetospeed(&tty, baudrate); // 设置输出波特率

	tty.c_cflag &= ~PARENB;

你可能感兴趣的:(linux,c语言,服务器)