uwp - UWP C# UART RS485 通信问题
问题描述
我一直在使用 Windows IoT Core 测试 RaspberryPi3,以通过 RS485 与我现有的飞思卡尔硬件进行通信。我一直在使用SerialUART 示例作为参考。在我的 UWP 成功初始化 UART 端口后,我似乎无法接收到我的硬件传输的 RS485 数据。
我的硬件 RS485 UART 配置为 4800 波特率、8 位数据格式、非校验和停止等待模式禁用。我设法4800-8-none-one
在 UWP 示例上成功初始化,但硬件传输的数据没有触发并显示在Read Data
text block
. 从我的硬件传输的数据是十六进制的,即F5-01-55-4B
请告知我错过了什么吗?谢谢。
解决方案
你可以参考下面的代码。请注意,ReadString方法需要一定长度的“代码单元”才能读取。这就是“在线”时每个字符串前面都有其长度的原因。在您的场景中,您无法确保以代码单元从硬件传输的数据。我不确定您是否可以接受在 TextBox 中以十六进制格式显示数据。
private async Task ReadAsync(CancellationToken cancellationToken)
{
Task<UInt32> loadAsyncTask;
uint ReadBufferLength = 1024;
// If task cancellation was requested, comply
cancellationToken.ThrowIfCancellationRequested();
// Set InputStreamOptions to complete the asynchronous read operation when one or more bytes is available
dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
using (var childCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken))
{
// Create a task object to wait for data on the serialPort.InputStream
loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(childCancellationTokenSource.Token);
// Launch the task and wait
UInt32 bytesRead = await loadAsyncTask;
if (bytesRead > 0)
{
//rcvdText.Text = dataReaderObject.ReadString(bytesRead);
var bufferArray = dataReaderObject.ReadBuffer(bytesRead).ToArray();
var content = string.Empty;
foreach(var b in bufferArray)
{
content += Convert.ToString(b,16).ToUpper() + " ";
}
rcvdText.Text = content;
status.Text = "bytes read successfully!";
}
}
}
推荐阅读
- freemarker - 通过拆分方法生成的存储数据的列表
- buildozer - buildozer, kivy/kivy System.err: java.lang.NullPointerException: uri
- ssl - youtube 进行了一些更改,并且 ytdl-core 在更新 ytdl-core 4.8.3 后停止工作,这显示
- python - 我在快速修复中找不到它(减少没有定义)如何解决这个问题
- rust - 使用 Handle 将资产加载到 Bevy 引擎中并在以后使用资产的正确方法?
- html - 如何在输入文本中添加“€”符号
- java - 使用BeanPostProcessor创建代理,但peoxy类字段为空
- javascript - TypeError: moment 不是下一个 js 中的函数?
- c++ - c++ const 参数传递:为什么编译器不会自动设置为按引用传递
- java - 使用 json 文件解析地图。无法弄清楚读取操作的语法