STM32F107无法枚举成HID+MSC
做了很多次尝试,STM32F107 还是无法枚举成 HID+MSC ,哪位能提供下例程? // usb_desc.c#include "usb_desc.h"
// USB标准描述符
const uint8_t USB_DeviceDescriptor[] = {
// Device Descriptor
0x12, // bLength
USB_DESC_TYPE_DEVICE, // bDescriptorType
0x00, 0x02, // bcdUSB (USB 2.0)
0x00, // bDeviceClass
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
USB_MAX_EP0_SIZE, // bMaxPacketSize0
LOBYTE(VENDOR_ID), // idVendor
HIBYTE(VENDOR_ID), // idVendor
LOBYTE(PRODUCT_ID), // idProduct
HIBYTE(PRODUCT_ID), // idProduct
0x00, 0x01, // bcdDevice (v1.00)
1, // Index of manufacturer string descriptor
2, // Index of product string descriptor
3, // Index of serial number string descriptor
0x01 // bNumConfigurations
};
// HID和MSC接口描述符定义
const uint8_t USB_ConfigDescriptor[] = {
// Configuration Descriptor
0x09, // bLength
USB_DESC_TYPE_CONFIG, // bDescriptorType
USB_DESC_LEN_CONFIG, // wTotalLength (to be defined)
0x00, // bNumInterfaces
0x01, // bConfigurationValue
0x00, // iConfiguration
0x80, // bmAttributes
USB_MAX_POWER, // bMaxPower
// HID Interface Descriptor
0x09, // bLength
USB_DESC_TYPE_INTERFACE,// bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x01, // bNumEndpoints
0x03, // bInterfaceClass (HID)
0x01, // bInterfaceSubClass
0x01, // bInterfaceProtocol
0x00, // iInterface
// HID Descriptor
0x09, // bLength
HID_DESCRIPTOR_TYPE, // bDescriptorType
0x11, 0x01, // bcdHID
0x00, // bCountryCode
0x01, // bNumDescriptors
0x22, // bDescriptorType
sizeof(HID_ReportDescriptor), 0x00, // wDescriptorLength
// Endpoint Descriptor
0x07, // bLength
USB_DESC_TYPE_ENDPOINT, // bDescriptorType
HID_EP_IN, // bEndpointAddress
0x03, // bmAttributes (Interrupt)
LOBYTE(HID_EP_SIZE), // wMaxPacketSize
HIBYTE(HID_EP_SIZE), // wMaxPacketSize
0x0A, // bInterval
// MSC Interface Descriptor
0x09, // bLength
USB_DESC_TYPE_INTERFACE,// bDescriptorType
0x01, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
0x08, // bInterfaceClass (Mass Storage)
0x06, // bInterfaceSubClass
0x50, // bInterfaceProtocol
0x00, // iInterface
// Bulk IN Endpoint Descriptor
0x07, // bLength
USB_DESC_TYPE_ENDPOINT, // bDescriptorType
MSC_EP_IN, // bEndpointAddress
0x02, // bmAttributes (Bulk)
LOBYTE(MSC_EP_SIZE), // wMaxPacketSize
HIBYTE(MSC_EP_SIZE), // wMaxPacketSize
0x00, // bInterval
// Bulk OUT Endpoint Descriptor
0x07, // bLength
USB_DESC_TYPE_ENDPOINT, // bDescriptorType
MSC_EP_OUT, // bEndpointAddress
0x02, // bmAttributes (Bulk)
LOBYTE(MSC_EP_SIZE), // wMaxPacketSize
HIBYTE(MSC_EP_SIZE), // wMaxPacketSize
0x00 // bInterval
};
// HID报告描述符
const uint8_t HID_ReportDescriptor[] = {
// Your HID report descriptor here
};
STM32F107系列微控制器支持USB功能,但要将STM32F107枚举为HID和MSC复合设备,需要正确配置USB库和设备描述符 USB库配置问题,确保你使用的USB库支持复合设备功能。STM32的标准外设库和HAL库都支持复合设备配置 设备描述符配置,复合设备的设备描述符需要正确配置,以支持多个接口(Interface)。每个接口对应一个设备类(如HID或MSC) 报告描述符配置要HID的报告描述符正确配置 初始化和处理函数,确保在初始化和处理函数中正确配置和处理HID和MSC的请求 使用USB分析仪或调试工具(如Bus Hound)来捕获USB通信数据,验证设备描述符和请求是否正确 确保设备描述符、报告描述符和初始化函数正确配置,以支持HID和MSC复合设备。通过调试工具验证USB通信数据,确保设备正确枚举为HID+MSC复合设备 我觉得这种可以用cubemx来配置试试 一般来说是有例程的,网上有很多HID和MSC的符合例程的 估计就是描述符没配置好,不过USB的描述符确实麻烦 HID+MSC同时枚举挺麻烦的,建议先单独测试HID和MSC,看哪块出问题了。 STM32官方例程好像有类似的组合功能,可以参考下USB库的Examples目录。 确保用的是最新的USB库版本,旧版本可能在复合设备上支持不太好。 HID+MSC需要修改描述符,检查下设备和配置描述符有没有问题。 枚举不成功可能是电源供电问题,确保USB接口电压稳定。 如果是用STM32CubeMX生成的代码,记得启用USB中断,不然会卡住。 检查下PID和VID配置,有时候重复或者设置错误也会导致枚举失败。 推荐看下USB复合设备的协议栈初始化流程,重点排查USB_Init函数。
页:
[1]
2