首页/外设速查/USB
🔌

USB 通用串行总线

通信外设
即插即用的通用总线:枚举+端点通信,串口/HID/存储/音频都是它的设备类。
🧩 核心原理
📈 时序 / 工作过程图
USB 设备枚举流程识别 → 复位 → 寻址 → 读描述符 → 配置 → 通信配置就绪SET_CONFIGURATION低速1.5M / 全速12M / 高速480M · 端点(endpoint)通信 · 设备类:CDC/HID/MSC枚举成功后可收发数据:控制传输(0) → 中断/批量/同步传输
⚙️ 配置 / 使用要点
  1. 使能 USB + 时钟(48MHz 来自 PLL)
  2. 配置设备描述符/端点描述符
  3. 选择设备类驱动(CDC/HID/MSC)
  4. 实现回调:SETUP 处理 + 端点收发
🛠️ 项目示例
USB CDC 虚拟串口(printf 重定向到上位机)
// STM32 USB_DEVICE + CDC 类配置后:
extern USBD_HandleTypeDef hUsbDeviceFS;

// 发送一字节到虚拟串口
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);

// printf 重定向:
int _write(int fd, char *ptr, int len){
  CDC_Transmit_FS((uint8_t*)ptr, len);
  return len;
}
// 上位机看到 COM 口,115200 任意波特率,即插即用
❓ 面试高频
USB枚举过程是什么?
设备插入D+拉高→主机总线复位→SET_ADDRESS分配地址→读设备/配置描述符→SET_CONFIGURATION→开始通信
CDC和UART的区别?
CDC是USB设备类,虚拟出串口,速度快(全速12M)免驱动;本质仍是USB协议
USB为什么即插即用?
标准化枚举+描述符机制:主机通过描述符知道设备类型和功能,自动加载驱动
✅ 自查清单 (点击勾选,本地保存)
0/0
会说枚举流程
知道4种传输类型
知道设备类(CDC/HID/MSC)
知道D+上拉识别全速
能说出USB vs UART场景