• 正文
  • 相关推荐
申请入驻 产业图谱

APM32F4xx USB OTG 开发全攻略:从主机 / 从机到枚举 / 传输一次搞定

19小时前
159
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

APM32F4xx 系列内置高速 + 全速双 USB OTG 控制器,自带高速 PHY,支持主机、从机自动切换,可直接实现 USB 串口、U 盘读写、HID 设备等功能。AN1087 应用笔记基于官方 OTG SDK,把 USB 原理、从机开发、主机状态机、枚举流程、数据收发全部讲透,新手也能快速做出稳定 USB 项目。

资料获取:AN1087_APM32F4xx_OTG应用笔记

1. APM32F4xx OTG 核心特性(先看懂再开发)

  • 支持 USB 2.0,OTG 双角色:ID 脚自动识别主机 / 从机
  • 内置高速 PHY,高速 / 全速兼容
  • 从机模式:4IN+4OUT端点,端点 0 为控制端点
  • 主机模式:8 个主机通道,支持低速 / 全速 / 高速
  • 支持 HNP 角色切换、SRP 低功耗会话请求
  • 配套官方 OTG SDK,含HID/MSC/CDC三大类例程

角色识别逻辑

  • ID = 低电平 → 主机(Host)
  • ID = 高电平 → 从机(Device)

2. USB 从机(Device)开发实战(最常用)

从机模式用于连接电脑,实现虚拟串口、键盘鼠标、U 盘等。

2.1 开发步骤(官方标准流程)

  1. 配置 USB 时钟与 GPIO(PA11/PA12 为 USB_DM/DP)
  2. 调用USBD_Init初始化从机
  3. 编写描述符:设备、配置、字符串、报告
  4. 实现回调:标准请求、类请求、收发完成
  5. 使能 USB 中断,等待枚举与通信

2.2 关键初始化结构体

typedef struct {
    USBD_Descriptor_T *pDeviceDesc;       // 设备描述符
    USBD_Descriptor_T *pConfigurationDesc;// 配置描述符
    USBD_Descriptor_T *pStringDesc;       // 字符串描述符
    USBD_StdReqCallback_T *pStdReqCallback; // 标准请求回调
    USBD_ReqHandler_T classReqHandler;    // 类请求回调
    USBD_EPHandler_T inEpHandler;         // IN端点完成回调
    USBD_EPHandler_T outEpHandler;        // OUT端点完成回调
} USBD_InitParam_T;

2.3 数据收发函数(直接复制)

// 从机发送数据(IN)
USBD_TxData(USB_EP_1, data, len);

// 从机接收数据(OUT)
USBD_RxData(USB_EP_1, buf, len);

2.4 典型从机应用

  • VCP 虚拟串口:串口打印、调试、上位机通信
  • MSC 大容量存储:单片机做 U 盘
  • HID 设备:鼠标、键盘、自定义设备

3. USB 主机(Host)开发实战(读 U 盘、挂设备)

主机模式用于外接 USB 设备,如 U 盘、鼠标、键盘等。

3.1 核心:状态机必须轮询

while(1){
    USBH_CoreHandler(); // 主机状态机,必须循环调用
}

3.2 主机状态流程

  1. 设备断开 → 空闲 → 设备插入
  2. 枚举:获取描述符→设置地址→配置设备
  3. 类请求 → 类运行(如 MSC 读写)
  4. 挂起 / 唤醒 / 异常处理

3.3 枚举流程(SDK 自动完成)

  • 获取设备描述符 → 设置地址 → 全描述符
  • 获取配置 → 获取字符串 → 设置配置

3.4 典型主机应用

  • 读写 U 盘(FATFS)
  • 读取 HID 设备(鼠标 / 键盘)
  • 连接 USB 摄像头、打印机等外设

4. 必改关键配置(usb_config.h)

  • USB_VBUS_SWITCH:VBUS 检测开关
  • USB_EP0_PACKET_SIZE:端点 0 包长
  • USB_FS_RX_FIFO_SIZE:接收 FIFO 大小
  • USB_FS_TX_FIFO_x_SIZE:发送 FIFO 大小

5. 硬件设计要点(一次稳定)

  1. PA11/PA12 为 USB_DM/DP,必须配置AF10
  2. 增加上拉 / 下拉 / ESD保护电路
  3. 电源稳定,USB 走线短、差分、等长
  4. ID 脚用于主机 / 从机自动切换

6. 常见问题速解(AN1087 重点)

  • 电脑不识别:描述符错误、FIFO 配置错误、GPIO 配置错
  • 枚举失败:端点 0 未处理、控制请求没响应
  • 数据发不出:FIFO 溢出、未启动传输
  • 主机找不到设备:未轮询 USBH_CoreHandler ()

AN1087 是 APM32F4xx USB OTG 最完整的官方开发手册,覆盖原理 + 从机 + 主机 + 状态机 + 枚举 + 收发,搭配官方 SDK 直接跑通 VCP、MSC、HID 三大类应用。不管是做 USB 串口、U 盘还是外接设备,照着文档配置就能稳定量产。

相关推荐