• 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 //启动

    一键三连呀!
  • 相关阅读:
    每日总结59
    每日总结58
    每日总结57
    每日总结56
    每日总结55
    每日总结54
    每日总结53
    每日总结52
    学习日报
    学习日报
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095357.html
Copyright © 2020-2023  润新知