打印
[STM32F1]

STM32F107无法枚举成HID+MSC

[复制链接]
472|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2024-9-30 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了很多次尝试,STM32F107 还是无法枚举成 HID+MSC ,哪位能提供下例程?

使用特权

评论回复
沙发
回复就哭哭| | 2024-9-30 23:18 | 只看该作者
// 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
};

使用特权

评论回复
板凳
将爱藏于深海| | 2024-11-3 13:00 | 只看该作者
STM32F107系列微控制器支持USB功能,但要将STM32F107枚举为HID和MSC复合设备,需要正确配置USB库和设备描述符

使用特权

评论回复
地板
月亮一键变蓝| | 2024-11-3 14:00 | 只看该作者
USB库配置问题,确保你使用的USB库支持复合设备功能。STM32的标准外设库和HAL库都支持复合设备配置

使用特权

评论回复
5
未说出口的像你| | 2024-11-3 15:00 | 只看该作者
设备描述符配置,复合设备的设备描述符需要正确配置,以支持多个接口(Interface)。每个接口对应一个设备类(如HID或MSC)

使用特权

评论回复
6
她已醉| | 2024-11-3 16:00 | 只看该作者
报告描述符配置要HID的报告描述符正确配置

使用特权

评论回复
7
在曼谷的春| | 2024-11-3 17:00 | 只看该作者
初始化和处理函数,确保在初始化和处理函数中正确配置和处理HID和MSC的请求

使用特权

评论回复
8
温室雏菊| | 2024-11-3 18:00 | 只看该作者
使用USB分析仪或调试工具(如Bus Hound)来捕获USB通信数据,验证设备描述符和请求是否正确

使用特权

评论回复
9
春日负喧| | 2024-11-3 19:00 | 只看该作者
确保设备描述符、报告描述符和初始化函数正确配置,以支持HID和MSC复合设备。通过调试工具验证USB通信数据,确保设备正确枚举为HID+MSC复合设备

使用特权

评论回复
10
一只眠羊| | 2024-11-3 20:00 | 只看该作者
我觉得这种可以用cubemx来配置试试

使用特权

评论回复
11
失物招領| | 2024-11-3 21:00 | 只看该作者
一般来说是有例程的,网上有很多HID和MSC的符合例程的

使用特权

评论回复
12
我吃小朋友| | 2024-11-3 22:00 | 只看该作者
估计就是描述符没配置好,不过USB的描述符确实麻烦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

379

主题

2033

帖子

3

粉丝