Linux下单片机串口通信实践(linux串口和单片机)

单片机(MCU)可以通过串口与外设互联,进而实现复杂的控制任务。Linux作为一款能够运行在PC机或嵌入式系统的操作系统,也具有十分强大的硬件控制功能。本文结合Linux系统和单片机,结合实际代码,介绍了通过Linux系统控制下的串口通信访问实践过程。

所谓串口通信,就是将数据以一定的格式发送到一个和另外一个设备之间,一般地,一个设备作为数据发送端,另外一个设备作为数据接收端。在Linux下,串口可以通过属性文件进行配置,而且,Linux支持将其作为设备文件在内存中使用,进而可以使用ioctl函数控制它。

首先,我们需要建立Linux进程与串口的关联,这能够从物理硬件入手。以某一标准的RS232端口为例,该接口的地址位于0x3F8-0x3FF,可偏移地址根据连接MCU系统,而系统中可能存在两个以上的串口,地址可以统一调整为0x????。而若要完全配置这条串口,可首先使用Intermr初始化结构体,指定地址等参数,然后调用以下函数:

int fd;
struct termios opt;
//打开串口
fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("Open Serial Port Error!\n");
return -1;
}
//获取串口属性并进行设置
tcgetattr(fd, &opt);
cfsetispeed(&opt, B9600);
cfsetospeed(&opt, B9600);
opt.c_cflag |= CLOCAL;
opt.c_cflag |= CREAD;
opt.c_cflag &= ~CSIZE;
opt.c_cflag &= ~PARENB;
opt.c_cflag &= ~CSTOPB;
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8;
opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
opt.c_iflag &= ~(ISTRIP | IGNCR | IXON | IXOFF);
opt.c_oflag &= ~(OPOST);
opt.c_cc[VMIN] = 1;
opt.c_cc[VTIME] = 0;
tcsetattr(fd, TCSANOW, &opt);

//Multi向MCU发送数据或读取MCU从串口发来的数据
//发送
write(fd,send_buf,strlen(send_buf));
//接收
read(fd,rec_buf,32);

上述内容列出了Linux下单片机串口通信的实践过程,就是通过open()函数建立Linux进程与串口的关联,根据物理硬件进行初始化,然后调用ioctl函数控制串口完成复杂的工作。这样,Linux系统控制下的串口通信访问机械就完成了。


数据运维技术 » Linux下单片机串口通信实践(linux串口和单片机)