树莓派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
相关产品推荐
相关产品推荐

