【问题标题】:Transfering a block of data from a microcontroller to a PC using the serial port使用串行端口将数据块从微控制器传输到 PC
【发布时间】:2018-11-07 13:08:28
【问题描述】:

在我的项目中,我有一个微控制器,我需要查询固定数量的数据。 MCU是和STM32,我的GUI应用是基于Qt框架的。

微控制器中有一个 16 位数据的缓冲区,该缓冲区被一些数据填充。我是这样定义的:

uint16_t buffer[0xFFFF] = { 0 };

在 micro 中一切正常,调试器显示缓冲区在某些操作/计算阶段后包含正确的数据。

但现在我需要使用串行端口将此缓冲区传输到 PC。我的问题是,确保在我的 GUI 应用程序中正确获取此缓冲区的每个数据的正确方法是什么?

这应该尽可能快(波特率为 115200)并且尽可能安全,例如所有 65536 元素都应该以正确的顺序传输到 PC 中(从中绘制波形)。

那么,我应该如何处理呢?例如:

  • 我需要同步还是异步连接?
  • 我是否应该一个一个地发送每个元素并等待来自 PC 的 ACK 以进行下一次传输?
  • 如何在突发模式下实现?
  • 我是否需要制作一种数据包,例如6字节
    • _START_BYTE_。 _COUNTER_H_ 。 _COUNTER_L_ 。 _DATA_H_。 _DATA_L_ 。 _END_BYTE_

我不是要代码(但我很感激)。我很想知道最好的方法!

【问题讨论】:

  • 请注意,说你想要尽可能快和安全是没有意义的。您需要选择一个更重要的,因为解决方案可能会因您的选择而异。
  • 您确定要在微控制器上设置 65535 个元素的缓冲区大小吗??
  • @A.R.C.好吧,当它有 1mb ram 时,我认为没问题!
  • 对这种类型的接口采用分组方法总是一个好主意。无论如何,您必须以某种方式建立缓冲区启动。我的偏好是开始指示符、长度和某种校验和。如果长度总是已知/固定的,则跳过它。
  • @DEKKER 1mb ram 好的,您使用的是哪种型号?

标签: c serial-port embedded microcontroller


【解决方案1】:

我需要同步还是异步连接?

UART 始终是异步的,因此得名 Universal Asynchronous Receiver-Transmitter。

我是否应该一个接一个地发送每个元素并等待来自 PC 的 ACK 进行下一次传输?

这是一种安全的方法。如果 PC 回显接收到的每个字符,MCU 可以验证数据是否正确通过。这样你通常可以跳过校验和。缺点是速度减半。

如何在突发模式下实现? 我是否需要制作一种数据包,例如6个字节

使用某种载体协议,包含同步、大小、数据、校验和等。在这里可能有点矫枉过正。

【讨论】:

    【解决方案2】:

    您需要将 USB 电缆从您的 PC 连接到 UART 外围设备。

    这样的事情会起作用

    https://www.amazon.com/3-3V-Serial-Cable-Terminated-Header/dp/B07FXT9YZ5/ref=sr_1_2_sspa?ie=UTF8&qid=1541617175&sr=8-2-spons&keywords=uart+usb&psc=1

    要捕获数据,您可以使用 realterm 等终端程序来记录数据。

    我需要同步还是异步连接?

    异步

    我应该一个一个地发送每个元素并等待来自 PC 的 ACK 进行下一次传输吗?

    这将比它的价值更复杂。你的电脑比微型电脑快得多。如果您决定使用它们,它应该能够处理 CRC 计算。

    如何在突发模式下实现?

    您需要突发模式吗?除非您正在收集此信息的模拟设备不是以恒定速度收集数据,否则突发没有意义,b/c 您可以将波特率提高到 921600 波特率。

    我是否需要制作一种数据包,例如6字节

    如果您使用的是某种类型的终端程序,例如 Realterm,那么它会为您处理所有这些,因为 STM 会根据您初始化外设的方式输出一个 UART 协议。

    我不熟悉 qt,不知道是否有可以从中提取 UART 协议的库。

    如果您不需要实时图表,您可以使用 Realterm 记录数据,然后稍后通过 excel 或任何其他首选方法分析数据。

    我知道 python 有很棒的库,用于实时绘制和捕获 COM 端口数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多