以前一直是在普通的framework环境下写串口,使用的类为 SerialPort 这个类你们可能比较熟悉。可是在UWP的开发里,使用的是 SerialDevice 这个类,是不同的。app
首先,你须要创建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
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