可靠的虚拟串口通信(STM32)
Reliable virtual serial communication (STM32)
我有一个 NUCLEO-F746ZG
板通过 ST-Link USB 连接连接到我的 PC。 PC 向微控制器发送不同的命令,微控制器将数据流 (~15 KByte/s) 发送回 PC。除了控制器板通过以太网与另一个设备通信之外,还有一些定时器中断可以改变输出引脚的状态等。
现在我遇到的问题是,在从 PC 到控制器的传输过程中,有时会完全丢失一个字节。控制器使用 MBed 编程并使用 BufferedSerial(使用串行中断填充内部缓冲区)。 BufferedSerial 连接的大小应该大到足以容纳数据直到它被处理。波特率目前设置为 500000 - 所以应该没问题。
我认为我可以期待与控制器板的可靠连接,因为它只是一个基于 USB 的虚拟串行端口。这个假设是不是不正确,我必须在它之上实现一个可靠的协议?如果它应该正常工作 - 有没有人知道问题可能是什么?
您想在 UART 实例上启用硬件流控制。您可以通过平台上的 __HAL_UART_HWCONTROL_CTS_ENABLE 宏来执行此操作。
编辑: Mbed OS 库中似乎实际上支持 hardware flow control。不确定它是否在 F746ZG 上实现,但值得一试。
我有一个 NUCLEO-F746ZG
板通过 ST-Link USB 连接连接到我的 PC。 PC 向微控制器发送不同的命令,微控制器将数据流 (~15 KByte/s) 发送回 PC。除了控制器板通过以太网与另一个设备通信之外,还有一些定时器中断可以改变输出引脚的状态等。
现在我遇到的问题是,在从 PC 到控制器的传输过程中,有时会完全丢失一个字节。控制器使用 MBed 编程并使用 BufferedSerial(使用串行中断填充内部缓冲区)。 BufferedSerial 连接的大小应该大到足以容纳数据直到它被处理。波特率目前设置为 500000 - 所以应该没问题。
我认为我可以期待与控制器板的可靠连接,因为它只是一个基于 USB 的虚拟串行端口。这个假设是不是不正确,我必须在它之上实现一个可靠的协议?如果它应该正常工作 - 有没有人知道问题可能是什么?
您想在 UART 实例上启用硬件流控制。您可以通过平台上的 __HAL_UART_HWCONTROL_CTS_ENABLE 宏来执行此操作。
编辑: Mbed OS 库中似乎实际上支持 hardware flow control。不确定它是否在 F746ZG 上实现,但值得一试。