[STM32H7] 求Azure RTOS USBX 设备端视频类的示例代码

[复制链接]
176|23
咚了个咚 发表于 2026-8-12 20:19 | 显示全部楼层 |阅读模式
我已经在 Nucleo H7A3 开发板的 USBX 演示工程中添加了视频相关配置。
工程里原本带有 CDC_ACM 以及大容量存储的范例,运行均正常。但我没有找不到设备端视频类的相关示例代码。
我使用 CubeIDE 生成工程后,软件产出了两个文件:ux_device_video.cux_device_video.h
可这两个文件内部只给出了需要自行实现的回调函数声明,没有具体实现内容。如下所示
UINT USBD_VIDEO_StreamRequest(UX_DEVICE_CLASS_VIDEO_STREAM *video_stream,
UX_SLAVE_TRANSFER *transfer)
{
UINT status = UX_SUCCESS;

/* USER CODE BEGIN USBD_VIDEO_StreamRequest */
UX_PARAMETER_NOT_USED(video_stream);
UX_PARAMETER_NOT_USED(transfer);
/* USER CODE END USBD_VIDEO_StreamRequest */

return status;
}

FranklinUNK 发表于 2026-8-13 16:18 | 显示全部楼层
试试看用USB摄像头模块测试,然后根据摄像头返回的帧率调整流请求处理。
麻花油条 发表于 2026-8-13 16:44 | 显示全部楼层
CubeIDE生成的两个文件只包含空回调,说明ST官方USBX库对Video类只提供了框架,实际数据传输逻辑需要开发者自己实现,这跟CDC_ACM完全不一样
classroom 发表于 2026-8-13 18:10 | 显示全部楼层
ST官方提供了一个完整的设备端Video示例工程Ux_Device_Video,针对NUCLEO-H723ZG板,可以直接去GitHub或X-CUBE-AZRTOS-H7软件包里找这个工程拿来参考
cr315 发表于 2026-8-13 20:27 | 显示全部楼层
那个USBD_VIDEO_StreamRequest回调是用来处理主机发来的UVC类请求,你必须在这里解析标准UVC请求并回复,否则主机识别不到正确的视频设备
duo点 发表于 2026-8-13 22:46 | 显示全部楼层
官方示例里包含了两种流格式的演示:stream1是MJPEG压缩格式(320x236),stream2是未压缩的原始格式(176x144),你可以在ux_device_video.c里切换
flycamelaaa 发表于 2026-8-14 11:12 | 显示全部楼层
有人在社区反馈过,如果Video端点的地址小于0x83,Windows相机应用会显示黑屏,需要把端点地址设到0x83或更高才能正常出图
jcky001 发表于 2026-8-14 13:47 | 显示全部楼层
如果你把Video类和MSC、CDC_ACM做成复合设备,Windows可能会报参数错误,这时需要修改设备的PID值让Windows重新识别驱动
onlycook 发表于 2026-8-14 15:30 | 显示全部楼层
官方X-CUBE-AZRTOS-H7软件包V3.0.0里已经增加了USBX的Video应用案例,建议直接下载这个包,不用自己从零填回调
powerantone 发表于 2026-8-14 19:48 | 显示全部楼层
高带宽等时传输模式下,端点最大包长不能直接设成3072,USB规范要求高速等时端点最大包长是1024字节,多事务是靠微帧内的交易数量实现的,直接改包长会导致枚举失败
probedog 发表于 2026-8-14 21:32 | 显示全部楼层
回调函数里的UX_PARAMETER_NOT_USED宏只是用来消除编译警告,实际开发中你需要在这里处理主机发来的SET_CUR、GET_CUR等UVC控制请求,并维护当前流状态。
solty 发表于 2026-8-15 12:49 | 显示全部楼层
官方示例工程里除了回调实现,还包含完整的设备描述符、配置描述符和UVC类描述符,这些东西CubeIDE自动生成的不一定全,需要对照着补
七毛钱 发表于 2026-8-15 15:15 | 显示全部楼层
如果只想让设备被识别为视频类而不关心实际图像数据,至少要在StreamRequest里正确处理VS_PROBE_CONTROL和VS_COMMIT_CONTROL请求,否则主机会认为设备未就绪。
stormwind123 发表于 2026-8-15 18:50 | 显示全部楼层
视频流的数据传输要用等时端点,不能用批量端点,而USBX的Video类框架默认就是等时传输,你只需要填充数据缓冲区并调用发送函数即可。
又见江南雨 发表于 2026-8-15 20:59 | 显示全部楼层
有人成功跑通了Video示例,但建议先用单Video设备调试通,再往复合设备里加其他类,否则问题会叠加难以排查
七毛钱 发表于 2026-8-16 14:52 | 显示全部楼层
可以去ST官方社区搜"Ux_Device_Video"关键词,有人贴出了完整的工程配置和描述符修改方法,直接套用比看文档效率高。
AloneKaven 发表于 2026-8-14 14:10 | 显示全部楼层
查官方文档,根据USB类规范解析请求,然后按需求构造应答数据包,再回调transfer发送出去。别忘记检查传输状态哦。
深渊之海 发表于 2026-8-15 11:22 | 显示全部楼层
直接在USBD_VIDEO_StreamRequest里实现视频帧的读取和发送,参考官方示例工程Ux_Device_Video中的实现。记得检查传输状态和错误处理。
CarterERO 发表于 2026-8-17 21:18 | 显示全部楼层
视频流处理,重点在于USBD_VIDEO_StreamRequest的回调函数实现,解析UVC请求并回复,可以参考Ux_Device_Video示例工程中的处理逻辑。
时光迷宫 发表于 2026-8-18 16:10 | 显示全部楼层
官方示例里的stream1和stream2格式都看了吗?这两个可以根据实际需求切换,记得调整USB视频类端点配置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

200

帖子

0

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