embedded - 用于 STM32 微 Controller 的 UART over USB

标签 embedded usb stm32 uart usbserial

我正在尝试通过 STM324x9I-EVAL 开发板上的 USB 接口(interface)实现 UART。目的是将命令串行发送到伺服 Controller (或其他硬件)。我已经在开发板上成功实现了 USB_Device_CDC 示例,但我不确定如果没有另一端带有驱动程序的 PC,它究竟是如何工作的。就其他硬件而言,USB 端口现在是否会简单地看起来像一个串行端口?还是在另一端仍然需要驱动程序或某种接口(interface)?

我确实想指出,我知道以下帖子:

Emulating UART over USB

但我不相信我的问题在该答案的范围内得到了完全回答。

最佳答案

USB 连接不像 UART 那样是点对点连接。它需要主机和设备处于主/从关系。设备无法发起数据传输;它必须由主机不断轮询。

CDC/ACM 类设备在 PC 主机上提供虚拟 COM 端口,但这不允许设备与 UART 接口(interface)通信。它在软件层面看起来像一个串行端口,但没有实现 UART 物理层。引擎盖下发生了很多事情,使它看起来像一个 PC 串行端口,但在物理层面上没有一个类似于 UART 通信。

有些设备充当 UART/USB 桥接器(例如来自 FTDI 和 Prolific),您可以(有点昂贵)从具有 USB 设备 Controller 和 UART 的微 Controller 构建自己的设备,但桥接器是 USB 设备和仍必须连接到 USB 主机;这些通常用于将 PC 连接到缺少 USB Controller 或使用 USB Controller 的软件/CPU 开销太大的微 Controller 。

从理论上讲,您可以将具有 USB 主机 Controller 的微 Controller 连接到具有 USB 设备 Controller 的微 Controller ,但是您需要分别在每个微 Controller 上安装主机和设备软件堆栈,并且一旦有了 USB 连接,实现 CDC/ACM 的效率就有些低了使用可用带宽。 CDC/ACM 类的主要目的是允许“旧版”软件在 PC 上运行。

如果您需要连接到“真正的”串行端口,您应该使用真正的 UART - 在任何情况下,它都比微 Controller 上的 USB Controller 更普遍。

关于embedded - 用于 STM32 微 Controller 的 UART over USB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602485/

相关文章:

c - "static/extern uint8_t array[2] = {0};"是否符合 ANSI C 规范?

C# 从条码扫描仪读取 USB HID

c - 带寄存器的 Stm32 定时器计数器

c - map 文件中 STM32 的 IAR 堆栈使用情况

eclipse - GDB 和 OpenOCD - 调试结束后重置或恢复

Qt 嵌入式编译错误。修复 "Error: no such instruction"错误

c - 使用 DMA 读取 SPI (SSP) 总线上的 EEPROM

rust - 如何使用嵌入式 HAL 在 Rust 中配置 UART?

linux - 找不到哪个USB端口是前面的

c# - 从连接到 .net 中的 USB 端口或串行端口的扫描仪获取输入