zoukankan      html  css  js  c++  java
  • 自己在UWP程序上调用usb转串口的路程

    之前一直是在普通的framework环境下写串口,使用的类为 SerialPort 这个类大家可能比较熟悉。但是在UWP的开发里,使用的是 SerialDevice 这个类,是不一样的。

    1. 清单文件配置

    首先,你需要建立UWP项目(Universal Windows),之后配置 Package.appxmanifest 文件。我们就叫它清单文件吧,如果你直接双击打开是以界面的方式编辑的,我们想要编辑的是 Capabilities 节点,因为我们要启用设备访问权限。但是微软的配置此节点的相关文章也指出了,在这个操作界面里有一些节点并不会列出,需要手动修改清单文件。

    为了手动修改清单文件的xml节点,我们右击这个清单文件,选择“Open With...”,也就是所谓的打开方式,之后选择使用“XML Editor”打开,便可以以XML代码的方式编辑了。

      <Capabilities>
        <Capability Name="internetClient" />
        <DeviceCapability Name="serialcommunication">
          <!--<Device Id="any">-->
          <Device Id="vidpid:1A86 7523">
            <Function Type="name:serialPort"/>
          </Device>
        </DeviceCapability>
      </Capabilities>

    清单文件XML根节点为Package,当然如果你之前启用了其他权限,比如我这里有一个internetClient权限启用过。

    配置串口访问功能,除了Device行,其他的都是固定写法。本行可以指定想访问的设备,设备的vid和pid标识可以在设备管理器中定位到设备并查看属性得到,一般会根据驱动提供商的公司和产品系列不同而不同。至于不指定标识直接写any我并没有试过,但是在网站上翻阅资料时,见到好几个地方是这么写的,如果你不确定设备到底有没有固定型号,或者插了多个不同型号的设备之后手动选择,这里指定any应该就能达到不筛选的效果。

    2. 访问串口并收发数据

        public async Task StartAsync()
        {
          string filter = SerialDevice.GetDeviceSelector();
          var devices = await DeviceInformation.FindAllAsync(filter);
    
          foreach (var jd in devices)
          {
            try
            {
              Debug.WriteLine("即将尝试握手串口:" + jd.Name);
              var client = await SerialDevice.FromIdAsync(jd.Id);
              client.BaudRate = 115200;
    
              // send
              var sendDatas = new byte[] { 0x83, 0xC1, 0x00, 0x00, 0x42 };
              var wBuffer = CryptographicBuffer.CreateFromByteArray(sendDatas);
              var sw = await client.OutputStream.WriteAsync(wBuffer);
    
              // read
              var rBuffer = await client.InputStream.ReadAsync(new Windows.Storage.Streams.Buffer(11), 11, InputStreamOptions.None);
              string rString = CryptographicBuffer.EncodeToHexString(rBuffer);
              Debug.WriteLine("received:" + rString);
            }
            catch (Exception ex)
            {
              Debug.Fail(ex.Message, ex.ToString());
            }
          }
        }

    上面的连接串口收发功能,是最简单的。

  • 相关阅读:
    asp.net程序集冲突解决笔记(未能加载文件或程序集"XXXXXXXXX")
    让Asp.net mvc WebAPI 支持OData协议进行分页查询操作
    jQuery Select 自动选择默认值
    nuget在jenkins上不能自动还原项目依赖包---笔记
    Ubuntu 14.04 server ssh 远程服务遇到的一点事儿
    Unbunt vi 编辑器键盘按键不正确的一次经历与解决方案
    Ubuntu root 密码 sudo passwd
    Visual Studio 2015 下 编译 libpng
    .NET使用Com组件的一点点教训笔记~
    Linux透明大页(Transparent Huge Pages)对ES性能对影响
  • 原文地址:https://www.cnblogs.com/3Tai/p/10059758.html
Copyright © 2011-2022 走看看