[STM32F4] 控制 3 个 LED(NumLock、Caps Lock 和 Scroll Lock 状态灯)

[复制链接]
185|10
铁头电子player 发表于 2025-10-28 14:24 | 显示全部楼层 |阅读模式
我想在 STM32CubeIDE 的 USB 主机库中添加此功能,控制 3 个 LED(NumLock、Caps Lock 和 Scroll Lock 状态灯)用于键盘输出指示
写了这段代码:
u8 c=3;
USBH_StatusTypeDef res = USBH_BUSY;
do {res=USBH_Set_Report(&USB_OTG_Host_Hnd,&USB_Host,0x02,0x00,0x01,&c);} while(res != USBH_OK);
来源:https://community.st.com/s/question/0D50X00009XkZ11/caps-lock-led-turn-onoff
我在库中没有找到这个函数(USBH_Set_Report),只找到了 USBH_HID_SetReport,但不知道如何实现。
有没有相关 ST 的文档?


公羊子丹 发表于 2025-10-29 07:24 | 显示全部楼层
我记得库里确实有 USBH_HID_SetReport 这个接口,可以用来发 Output 报告给键盘,参数一般是 (phost, reportType(0x02), reportId, buf, len),你可以试试把 LED 位放进 buf 里发一次看效果。 sourcevu.sysprogs.com
周半梅 发表于 2025-10-29 07:25 | 显示全部楼层
先抓一下键盘的 Report Descriptor,确认 Output report 的 ID 和长度再发,不然发错长度/ID 很可能被设备忽略。用 USB 协议分析器或在 PC 上用 Wireshark+USBPcap 捕包看主机怎么发,会很有帮助。 studylib.net
帛灿灿 发表于 2025-10-29 07:26 | 显示全部楼层
实战建议:先用 PC 上的键盘驱动(比如 Windows)把 Num/Caps/Scroll 的 Set_Report 抓下来,确认 bmRequestType=0x21、bRequest=0x09(SET_REPORT),然后在 STM 端复现同样的控制传输。抓包能让你少走很多弯路。 studylib.net
童雨竹 发表于 2025-10-29 07:27 | 显示全部楼层
有人在社区帖子里分享过用法,示例大致是 USBH_HID_SetReport(phost, 0x02, 0x00, rep, 0x01) 这种调用,你可以先在 HID class 的回调里调用,不要直接绕过类驱动。 community.st.com
万图 发表于 2025-10-29 07:28 | 显示全部楼层
小技巧:如果键盘是带 Report ID 的,reportId 不同,数据偏移也不同。查看设备的 HID 描述符(GetDescriptor)能直接告诉你 Output report 的格式和 ID。抓好描述符再写代码省心。 studylib.net
Wordsworth 发表于 2025-10-29 07:29 | 显示全部楼层
别忘了先把接口 claim(类初始化成功后再发),如果设备是复合设备(比如同时有媒体键等),可能需要先找到正确的 HID 接口索引再发 Set_Report。否则请求可能被转给错接口。 studylib.net
Bblythe 发表于 2025-10-29 07:30 | 显示全部楼层
试一个简单的验证代码:uint8_t led = 0x02; USBH_HID_SetReport(phost, 0x02, 0x00, &led, 1); 看看 Caps Lock 是否亮。若不行,再把 reportId 改成实际的 ID 或增加长度尝试。 (这是常见快速排查法) sourcevu.sysprogs.com+1
Pulitzer 发表于 2025-10-29 07:31 | 显示全部楼层
如果你找不到该函数的实现,可能是用的库版本不一样,检查 STM32Cube 的中间件目录(STM32_USB_HOST_Library)里 HID 类源码,函数通常在那里声明/实现。更新固件包也可能带来该接口。 studylib.net
Uriah 发表于 2025-10-29 07:31 | 显示全部楼层
另外一个思路:先用主机向键盘发送简单的控制请求(标准 control transfer),手工实现 SET_REPORT(bRequest=9),这样更底层也能确认设备响应,再把逻辑移回 USBH_HID_SetReport 封装里。 studylib.net
Clyde011 发表于 2025-10-29 07:32 | 显示全部楼层
最后提醒:有些键盘厂商会用固件限制外来主机更改 LED(不常见但有),如果按标准方法都失败,换一把普通键盘或试试不同厂商的设备做对比,能判断是代码问题还是设备策略。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部