📖 第 40 章:USB虚拟串口(Slave)实验(USB VCOM (Slave))

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 40
🗨️ 「USB 虚拟串口:再也不用 USB-TTL 模块。」
这一章在干嘛? USB 虚拟串口实验:USB CDC 类、ACM 子类、串口参数协商。从此开发板插上 USB 就是一根虚拟串口线。
40.1 USB 虚拟串口简介40.2 硬件设计40.3 程序设计40.4 下载验证

40.1 USB 虚拟串口简介

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

原书图 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 配置

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 时注意串口不要搞混。

🧠 小测验
USB CDC 是什么?
USB Communication Device Class,模拟串口。
USB CDC 在 PC 上表现为什么?
虚拟 COM 端口。
接收完成后为什么要再调 `USBD_CDC_ReceivePacket`?
启动下一次接收,否则只接收一次。
← 上一篇🏠 顶层目录下一篇 →