你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

实战经验 | STM32H5基于USBx裸机添加OUT端点实现HID类双向通信

[复制链接]
攻城狮Melo 发布时间:2026-5-26 15:01

1. 前言

客户反馈在运行STM32C071固件库Applications/USBX/Ux_Device_HID_Standalone例程时,反馈上位机不能向MCU通过EP OUT1发送数据,每当发数据就STALL。设备描述符正常,端口也是正常状态,MCU可以通过EP IN数据给上位机,如果不添加EP OUT1,通过EP OUT0发数据也不会STALL。

image.png

2. 问题调研与复现

以NUCLEO-H563ZI的板子为例,基于此板子上进行了USBx的跟踪和调试。发现一个标准的USB-HID设备及USB_HID_Custom(用户自定义HID设备),是只有IN端点,没有OUT属性的端点,基于USBx的协议栈创建的USB HID应用默认是不支持OUT端点。如果要进行HID的输入输出,需要使能USBx支持HID类OUT端点传输。

3.实现USBx HID类应用

支持OUT传输的步骤

  1. 由于本文的重点是在USBx内添加OUT端点传输,为方便起见将固件库里面的例程NUCLEO-H563ZI\Applications\USBX\Ux_Device_HID_Standalone拷贝,将该文件夹和.IOC文件重新命名为Ux_Device_HID_Test,如下图所示。

image.png

  1. 打开STM32CubeMX工程使其支持USB HID自定义设备和OUT端点。首先要取消MOUSE类,使能CUSTOM类。

image.png

其次修改行下面的配置:

image.png

配置OUT端点发送缓冲区,请注意这里的修改,这部分内容属于客户自己添加部分,如果大小不适合会出现问题,详情请参考参考手册。

image.png

  1. 在USBx HID Custom自定义类协议栈中添加OUT端点支持,请确认一下,下面参数是否正确。

image.png

  1. 添加支持OUT端点的描述符,以及HID的报告描述符。 image.png

image.png

  1. 添加Application数据收发代码。

image.png

在USBX_DEVICE_HID_CUSTOM_Task()中添加代码实现,请注意原例程可能不是使用这个函数名(原函数为USBX_DEVICE_HID_MOUSE_Task),按一次按键向PC机发送64Byte数据。

image.png

  1. 添加接收代码,PC向OUT1端点发送数据时会接收到HID_Custom_RecvBuf中。

image.png

  1. 运行测试效果,在添加完代码后,适当的添加头文件,保证编译通过。然后下载调试,你可以观察到STM32H5通过IN端点向PC机发送数据演示效果(USB发数据,PC接收)

image.png

PC机向OUT端点发送数据(PC机发送数据,STM32H5 USB接收数据)

image.png

4. 总结

本文旨在实现 USBx HID Custom类的OUT端点通信,限于篇幅原因,读者可以下载本文档的附件工程,并详细阅读源码细节和已有实际调试,以理解USBx协议栈的通信流程,从而高效的开发出自己的USB应用。

经验分享 | LAT1658 STM32H5基于USBx裸机添加OUT端点实现HID类双向通信

收藏 评论0 发布时间:2026-5-26 15:01

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版