本身在UWP程序上調用usb轉串口的路程

以前一直是在普通的framework環境下寫串口,使用的類爲 SerialPort 這個類你們可能比較熟悉。可是在UWP的開發裏,使用的是 SerialDevice 這個類,是不同的。app

1. 清單文件配置

首先,你須要創建UWP項目(Universal Windows),以後配置 Package.appxmanifest 文件。咱們就叫它清單文件吧,若是你直接雙擊打開是以界面的方式編輯的,咱們想要編輯的是 Capabilities 節點,由於咱們要啓用設備訪問權限。可是微軟的配置此節點的相關文章也指出了,在這個操做界面裏有一些節點並不會列出,須要手動修改清單文件。async

爲了手動修改清單文件的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權限啓用過。spa

配置串口訪問功能,除了Device行,其餘的都是固定寫法。本行能夠指定想訪問的設備,設備的vid和pid標識能夠在設備管理器中定位到設備並查看屬性獲得,通常會根據驅動提供商的公司和產品系列不一樣而不一樣。至於不指定標識直接寫any我並無試過,可是在網站上翻閱資料時,見到好幾個地方是這麼寫的,若是你不肯定設備到底有沒有固定型號,或者插了多個不一樣型號的設備以後手動選擇,這裏指定any應該就能達到不篩選的效果。code

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());
        }
      }
    }

上面的鏈接串口收發功能,是最簡單的。orm

相關文章
相關標籤/搜索