这一章在干嘛?

USB 虚拟串口实验:USB CDC 类、ACM 子类、串口参数协商。从此开发板插上 USB 就是一根虚拟串口线。

40.1 USB 虚拟串口简介

40.2 硬件设计

40.3 程序设计

40.4 下载验证

40.1 USB 虚拟串口简介

USB CDC(Communication Device Class)= 通信设备类。

  • ACM 子类(Abstract Control Model)模拟串口;
  • 在 PC 上虚拟出 COMx 端口;
  • 串口助手/IDE 直接当串口使用。

原书图 40.1.1:USB CDC 通信流程原书图 40.1.1:USB CDC 通信流程

项目USB CDC vs 物理串口
传输速度理论 12 Mbps(FS)
握手无(流控可选)
电平数字
功耗

CDC 比物理 UART 优势:速率高、不占 IO、不用电平转换芯片。劣势:需 ST 完整 USB 库。

40.2 硬件设计

USB OTG FS 接口即可(PA11/PA12)。

40.3 程序设计

40.3.1 CubeMX 配置

  • USB_DEVICE → Class = Communication Device Class (Virtual Com Port)

40.3.2 关键代码

// 发送
CDC_Transmit_FS(buf, len);

// 接收(中断模式)
usbd_cdc_SetRxBuffer(&hUsbDeviceFS, rx_buf);
usbd_cdc_ReceivePacket(&hUsbDeviceFS);

在 usbd_cdc_if.c 里的 CDC_Receive_FS 回调:

static int8_t CDC_Receive_FS(uint8_t *Buf, uint32_t *Len) {
    CDC_Transmit_FS(Buf, *Len);   // 回环
    USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
    USBD_CDC_ReceivePacket(&hUsbDeviceFS);
    return USBD_OK;
}

原书图 40.3.2.1:CDC 收发流程图原书图 40.3.2.1:CDC 收发流程图

原书图 40.3.2.2:CDC 数据回环测试原书图 40.3.2.2:CDC 数据回环测试

40.4 下载验证

USB 接 PC → 设备管理器看到 COMx → 串口助手 115200 收发测试。

注意:同时使用 CH340(PA9/PA10)和 USB CDC 时注意串口不要搞混。