You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Pico实现HID键盘:设备被识别但无按键输入

排查与解决

1. HID接口协议配置错误

你在TUD_HID_DESCRIPTOR中将协议参数设为HID_ITF_PROTOCOL_NONE,但标准键盘设备必须指定HID_ITF_PROTOCOL_KEYBOARD。系统依赖该字段识别设备为标准键盘,否则会将其当作自定义HID设备,不会处理键盘输入事件。

修改配置描述符中的HID部分:

TUD_HID_DESCRIPTOR(0,
                   4,
                   HID_ITF_PROTOCOL_KEYBOARD,  // 替换为键盘协议
                   sizeof(desc_hid_report),
                   EPNUM_HID,
                   CFG_TUD_HID_EP_BUFSIZE,
                   1),

2. 字符串描述符索引越界

配置描述符中HID接口的字符串索引是4,CDC接口的是5,但string_desc_arr仅定义了索引0-3的字符串。系统请求这些不存在的描述符时会返回NULL,可能导致设备识别异常,影响系统对设备功能的解析。

补充字符串描述符数组:

char const* string_desc_arr[] = {
    (const char[]){0x09, 0x04},  // 0: 支持语言为英语(0x0409)
    "AwA",                       // 1: 制造商
    "ComposeBoard",              // 2: 产品
    "123456",                    // 3: 序列号
    "HID Keyboard",              // 4: HID接口字符串
    "CDC Serial"                 // 5: CDC接口字符串
};

3. 其他验证点

  • GPIO电平逻辑正确:按键按下时引脚为低电平,button_state = gpio_get(BUTTON_PIN) == 0的判断符合上拉电阻的配置。
  • 主循环中tud_task()和hid_task()的调用顺序正确,确保USB栈能及时处理报告传输。
  • 若不需要CDC功能,可暂时移除该配置,减少复合设备的复杂度,优先确保HID键盘功能正常。

修改后重新编译固件,设备应能被系统识别为标准键盘,按下按键后会输出大写字母A。


内容的提问来源于stack exchange,提问作者Patchouli9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:45:53