前言
最近学习了USB2.0的一些知识,这里就当笔记,回顾记录一下,参考的资料是B站的刘凯老师STM32 培训教程和龙虎老师的USB应用精粹分析,如果有哪些错误的理解,也希望大佬们指点一二,谢谢!
回到Data_Setup0()函数,如果主机发出“获取描述符” GET_DESCRIPTOR的请求。
那么我们就要判断是 这个 Type_Recipient,他是一个宏定义,取出了USBbmRequestType的低七位,其中包含了请求种类与接收方。
如果是标准请求(STANDARD_REQUEST 0x00)且接收方是设备(DEVICE_RECIPIENT0x00)
接下来需要进一步判断USBwValue1是获取设备,配置还是字符串描述符,然后将相应的函数指针赋给CopyRoutine
获取设备描述符的函数实际是uint8_t *Joystick_GetDeviceDescriptor(uint16_t Length)
其中实际执行的是Standard_GetDescriptorData(Length, &Device_Descriptor);
第一个形参是长度(length)
我们第一次调用Standard_GetDescriptorData(Length, &Device_Descriptor)函数时,
Length传参的是0,
第二次Length传参 传的是发送数据包的字节长度(在DataStagein函数中),
第二个形参是 传的是Device_Descriptor的首地址

本文详细介绍了STM32中USB2.0设备处理GET_DESCRIPTOR请求的过程,包括判断请求类型、识别设备描述符、配置描述符和字符串描述符,以及如何响应GET_STATUS请求,包括设备状态、接口状态和端点状态的获取。此外,还涉及了清除特征请求用于修复端点问题。

755

被折叠的 条评论
为什么被折叠?



