windows下的linux子系统虚拟串口的使用

ps:WSL2无法访问宿主机的串口,如果有使用wsl2,请切换回wsl
一安装

$ sudo apt update
$ sudo  apt install minicom

二串口设置:

sudo minicom -s//进入串口配置界面


使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:
Serial port setup [Enter],我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit推出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。

1、修改串口号
2、修改波特率、校验位、停止位等
我这里的设置是虚拟串口4;8位数据为;1位停止位;无奇偶校验位;波特率9600;无硬件流和软件流控。
在这里插入图片描述

补充知识点: Windows10的串口,在WSL中也可以直接使用,其对应关系就是
COMx对应WSL的/dev/ttySx,例如COM1对应WSL的/dev/ttyS1
查看自己电脑的虚拟串口:计算机属性-管理-设备管理器-端口就可以查看到,如果没有设定好虚拟串口的,自行下载Configure Virtual Serial Port Driver去配置,这里不做赘述。
设置好之后你就会进入minicom界面了。

接下来我们就可以使用仿真来看是否可以正常通信啦,我这里使用的是 proteus进行仿真,没有的伙伴打开串口调试助手也一样可以进行测试。

附:
minicom基本操作如下:
1.需使用Ctrl+a 进入设置状态
2.按z进入设置菜单
O键:打开配置选项;
W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容 换行。这个功能在查看内核的啓动信息时很有用。
C键:清除屏幕的显示内容;
B键:浏览minicom的历史显示;
X键:退出minicom,会提示确认退出。

另外,ubuntu系统中/dev/文件夹是用于存放设备的,常见的设备类型如下:
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/random:随机数设备
/dev/urandom:随机数设备

串口编程测试源码:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>

int main()
{
	int fd;
	char recvbuff[128]; 
	int count=0;
	char buffer[]="Hello,word!
";
	struct termios uart_cfg;
	fd=open("/dev/ttyS1",O_RDWR|O_NONBLOCK|O_NOCTTY);//打开串口
	if(fd<0)
	{
		perror("Failed to open serial:");
		return -1;
	}
    fcntl(fd,F_SETFL,0);//设置串口阻塞办法
	//cfmakeraw(&uart_cfg);//将终端设置为原始模式 8n1没有流控
	cfsetspeed(&uart_cfg,B9600);	//设置波特率
   // uart_cfg.c_cflag|=CLOCAL|CREAD;
//设置数据位
uart_cfg.c_cflag &= ~CSIZE; /* 用数据位掩码清空数据位设置 */
uart_cfg.c_cflag |= CS8;//数据位为8
//设置奇偶校验位
//奇校
//uart_cfg.c_cflag |= (PARODD | PARENB); 
//uart_cfg.c_iflag |= INPCK;
//偶校
uart_cfg.c_cflag |= PARENB;
uart_cfg.c_cflag &= ~PARODD;   /* 清除奇校验标志,则配置为偶校验*/
uart_cfg.c_iflag |= INPCK;
//无校
//uart_cfg.c_cflag &= ~PARENB;
//设置停止位
//uart_cfg.c_cflag &=  ~CSTOPB;	/* 将停止位设置为一个比特 */
uart_cfg.c_cflag |=  CSTOPB;	/* 将停止位设置为两个比特 */
	tcflush(fd,TCIOFLUSH);/* 用于清空输入/输出缓冲区*/
	tcsetattr(fd,TCSANOW,&uart_cfg);//使新的设置生效
	while(1)
	{
		write(fd,buffer,strlen(buffer));	//往串口发送消息	
		sleep(1);
      //  count=read(fd,recvbuff,127);   //读取串口接收数据
       // if(count>0)
     //   {
           // recvbuff[count]=0;
           // printf("STR:%s
",recvbuff);
 //       }
	}
	close(fd);
	return 0;
}

串口编程参考:https://blog.csdn.net/morixinguan/article/details/80898172

//WSL-Ubuntu18.04 LTS 重启方法 //以管理员权限运行cmd net stop LxssManager //停止 net
start LxssManager //启动

一键三连呀!
原文地址:https://www.cnblogs.com/jee-cai/p/14095357.html