TinyUSB
+ -

tinyusb回调函数

2026-06-14 本文链接为:http://www.usbzh.com/article/detail-1716.html ,欢迎转载,转载请附上本文链接。

TinyUSB 的回调函数采用“按名调用”机制:不需要注册,只需实现特定名称的函数,协议栈就会自动调用。

这些回调主要分为两类:USB 核心描述符回调(定义设备结构)和各类设备功能回调(实现具体通信逻辑)。

核心描述符回调 (必须实现)

用于向主机报告 USB 设备的能力和结构,是枚举过程的必经环节。

回调函数 功能说明 调用时机
tud_descriptor_device_cb 返回设备描述符(Device Descriptor) 主机请求获取设备信息(如 VID/PID、版本号)
tud_descriptor_configuration_cb 返回配置描述符(Configuration Descriptor) 主机请求获取配置信息(如供电方式、总功耗、接口和端点数量)
tud_descriptor_string_cb 返回字符串描述符(String Descriptor) 主机请求获取可读的文本信息(如制造商名、产品名、序列号)
tud_descriptor_device_qualifier_cb 返回设备限定符描述符 用于支持高速模式的设备,查询在其他速度下的信息
tud_descriptor_other_speed_configuration_cb 返回其他速率配置描述符 用于支持高速模式的设备,获取在其他速度下的配置
tud_descriptor_bos_cb 用于向主机返回 BOS(Binary Device Object Store,二进制设备对象存储)描述符 可选 的回调函数

注意:如果没有正确实现上述核心回调(特别是前两个),编译时会直接报 undefined reference 错误,这也是最常见的入门问题。

厂商自定义回调

函数 功能说明 调用时机 典型用途
tud_vendor_control_xfer_cb 厂商自定义控制传输回调 主机通过端点 0 发送厂商请求(bmRequestType 的接收方为 TUSB_REQ_RCPT_VENDOR) 实现自定义控制协议(如配置参数、读取状态、执行特殊命令)

设备回调

函数 功能说明 调用时机 典型用途
tud_mount_cb 设备挂载成功回调 USB 枚举完成,主机已配置设备,可以开始通信 初始化应用层状态、点亮指示灯、记录日志表示设备已就绪
tud_umount_cb 设备卸载回调 主机断开连接或去配置设备 清理资源、关闭指示灯、进入待机模式
tud_suspend_cb 总线挂起回调 主机进入睡眠或空闲模式,USB 总线进入挂起状态 执行省电操作(如降低时钟、关闭外设)、记录挂起事件
tud_resume_cb 总线恢复回调 主机从挂起状态唤醒,总线恢复正常通信 恢复全速运行、重新初始化通信通道

设备功能回调 (按需实现)

根据你在 tusb_config.h 中开启的 CFG_TUD_XXX 宏来选择性实现,未使用的类无需实现。

1. CDC (通信设备类)

实现虚拟串口功能,用于与 PC 或其他主机进行双向数据通信。

回调函数 功能说明 常用场景
tud_cdc_rx_cb 收到数据时触发 读取主机发来的数据
tud_cdc_tx_complete_cb 数据发送完成时触发 确认数据已成功发出,可用于流控
tud_cdc_line_state_cb 主机端串口状态变化时触发(DTR, RTS) 通知 MCU 主机是否已打开串口终端,可用于控制数据发送
tud_cdc_line_coding_cb 主机端串口配置改变时触发(波特率、数据位等) 获取主机设置的波特率参数,同步应用逻辑
tud_cdc_rx_wanted_cb 接收到预设的特定字符时触发 实现命令识别、快速响应特定信号
tud_cdc_notify_complete_cb 通知消息发送完成时触发 确认串口状态通知已送达主机
tud_cdc_send_break_cb 主机发送 Break 信号时触发 检测到通信中断信号,执行复位或特殊处理

2. MSC (海量存储设备类)

模拟 U 盘、SD 卡读卡器等块存储设备。

回调函数 功能说明 调用时机
tud_msc_inquiry_cb 响应 SCSI 询问命令,返回设备信息 主机查询设备类型、厂商、产品 ID 等
tud_msc_capacity_cb 响应读容量命令,返回存储介质信息 主机获取磁盘的扇区数量和扇区大小
tud_msc_read10_cb 响应读 (READ10) 命令 主机要从设备读取数据块
tud_msc_write10_cb 响应写 (WRITE10) 命令 主机要向设备写入数据块
tud_msc_test_unit_ready_cb 响应测试就绪命令,报告设备状态 主机检查存储介质是否已准备好(如 SD 卡是否插入/初始化完成)
tud_msc_start_stop_cb 响应启停命令,处理介质加载/弹出 主机请求加载或卸载存储介质
tud_msc_is_writable_cb 响应写保护查询,报告介质是否可写 主机在写入前检查设备是否为只读状态
tud_msc_scsi_cb 处理其他 SCSI 命令 当需要实现标准 SCSI 命令集以外的特殊功能时

3. HID (人机接口设备类)

模拟键盘、鼠标、游戏手柄等输入设备。

回调函数 功能说明
tud_hid_report_complete_cb HID 报告发送完成时触发,可用于确认数据已发出
tud_hid_set_report_cb 收到主机发来的 SET_REPORT 请求时触发(如键盘 LED 状态、输出报告)
tud_hid_get_report_cb 收到主机发来的 GET_REPORT 请求时触发
tud_hid_set_protocol_cb 收到 SET_PROTOCOL 请求时触发(在启动协议和报告协议间切换)

4. Audio & MIDI (音频与音乐设备接口)

回调函数 功能说明
tud_audio_rx_done_pre_read_cb 音频数据接收完成,准备读取前调用
tud_audio_set_itf_close_other_cb 切换备用音频接口时调用
tud_midi_rx_cb 收到 MIDI 消息时触发,用于读取实时演奏数据
tud_midi_tx_complete_cb MIDI 消息发送完成时触发

5. Vendor (自定义类)

实现自定义协议或 WinUSB 设备,使用批量端点进行高速数据传输。

回调函数 功能说明
tud_vendor_control_xfer_cb 处理端点 0 的厂商自定义控制请求
tud_vendor_rx_cb 批量 OUT 端点收到数据时触发
tud_vendor_tx_complete_cb 批量 IN 端点数据发送完成时触发

设备状态与总线事件回调

回调函数 功能说明 触发场景
tud_mount_cb 设备挂载成功(已被主机识别和配置) USB 枚举成功,主机准备就绪
tud_umount_cb 设备卸载(主机断开连接或去配置) USB 线缆拔出,或主机禁用设备
tud_suspend_cb USB 总线挂起 主机进入睡眠或空闲状态以省电
tud_resume_cb USB 总线恢复 主机从挂起状态唤醒设备

一个关键点:这些回调函数本质上都是可选的弱符号定义(TU_ATTR_WEAK),这意味着如果你不实现它们,协议栈会使用一个空的默认实现,不会导致编译错误。

本文链接为:http://www.usbzh.com/article/detail-1716.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

STM32F407的USB用户回调函数USBD_Usr_cb_TypeDef
前面了解过USBD_Usr_cb_TypeDef结构体中是用户的回调函数。用户的回调函数位于usbd_user.c文件中。typedef struct _USBD_USR_PROP{ void (*Init)(void); void (*DeviceReset)(uint8_t s......
STM32F407的USB获取描述符请求回调函数USBD_DEVICE
STM32F407的USB获取描述符请求回调函数使用结构体USBD_DEVICE来整合。typedef struct _Device_TypeDef{ uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length); ......
STM32F407的USB类请求回调函数USBD_Class_cb_TypeDef
前面介绍了获取描述会和USB设备状态的回调函数,这里界绍USB在实际使用过程中的USB请求通讯。这里还是以STM32F407的U盘为示例来说明。STM32F407的USB类请求使用结构体USBD_Class_cb_TypeDef来整合回调函数。typedef struct _Device_cb......
tinyusb回调函数
TinyUSB 的回调函数采用“按名调用”机制:不需要注册,只需实现特定名称的函数,协议栈就会自动调用。这些回调主要分为两类:USB 核心描述符回调(定义设备结构)和各类设备功能回调(实现具体通信逻辑)。核心描述符回调 (必须实现)用于向主机报告 USB 设备的能力和结构,是枚举过程的必经环节。......
关注公众号
  • HID人机交互
  • Linux&USB
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!