打印

STM32 MASS+CDC 复合

[复制链接]
8227|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1375343860|  楼主 | 2013-4-4 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32 USB模拟串口CDC和大容量存储器复合.rar (638.21 KB)



沙发
cjhk| | 2013-4-4 18:36 | 只看该作者
呵呵  谢谢了  楼主  呵呵   谢谢你的共享   很不错  呵呵   顶一个

使用特权

评论回复
板凳
1375343860|  楼主 | 2013-4-4 23:28 | 只看该作者
cjhk 发表于 2013-4-4 18:36
呵呵  谢谢了  楼主  呵呵   谢谢你的共享   很不错  呵呵   顶一个

呵呵。。关于STM32 USB的有什么问题尽管说。。

使用特权

评论回复
地板
hawksabre| | 2013-4-5 19:45 | 只看该作者
呵呵  谢谢楼主的共享资料   谢谢了   呵呵   顶一个   呵呵

使用特权

评论回复
5
leixingmin| | 2013-4-8 10:13 | 只看该作者
感谢分享!
我最近在做 stm32 mass设备和hid 复合设备 ,描述符中先描述 mass 还是hid ? ,这个有没有区分!
现在我mass在前,hid在后,pc上只能枚举出mass设备,也可以用,但是不能发现hid设备 ,
能否给见一下!

使用特权

评论回复
6
1375343860|  楼主 | 2013-4-8 20:07 | 只看该作者
leixingmin 发表于 2013-4-8 10:13
感谢分享!
我最近在做 stm32 mass设备和hid 复合设备 ,描述符中先描述 mass 还是hid ? ,这个有没有区分 ...

不能发现的原因是应该是你的ID没有更改。。。就是设备描述符里面的。。

使用特权

评论回复
7
leixingmin| | 2013-4-9 10:33 | 只看该作者
这个是我的设备描述: 只能枚举出mass,不能枚举出hid  ,找不出问题在哪里?


const uint8_t MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC] =  {

    0x09,   // bLength: Configuation Descriptor size
    0x02,   // bDescriptorType: Configuration
    MASS_SIZ_CONFIG_DESC,
    0x00,
    0x02,   // bNumInterfaces: 2 interface
    0x01,   // bConfigurationValue:
    0x00,   // iConfiguration:
    0xC0,   // bmAttributes:
    0x32,   // MaxPower 100 mA

    /******************** Descriptor of Mass Storage interface ********************/
    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType:
    0x00,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x02,   // bNumEndpoints*/
    0x08,   // bInterfaceClass: MASS STORAGE Class
    0x06,   // bInterfaceSubClass : SCSI transparent*/
    0x50,   // nInterfaceProtocol
    4,      // iInterface:

    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x81,   // Endpoint address (IN, address 1)------------------------------------------------------------------------------------
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds

    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x02,   // Endpoint address (OUT, address 2)--------------------------------------------------------------------------------------
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds
   
        /* usb hid */
            //Interface Descriptor
    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType: Interface
    0x01,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x02,   // bNumEndpoints: 3 endpoints used
    0x03,   // bInterfaceClass: Communication Interface Class
    0x00,   // bInterfaceSubClass: Abstract Control Model
    0x00,   // bInterfaceProtocol: Common AT commands
    0x00,   // iInterface:

        /******************** Descriptor of HID  ******************端点描述符**/
    /*41*/
    0x09,         /*bLength: HID Descriptor size*/
    0x21,//HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
    0x10,         //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。/* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /*bCountryCode: Hardware target country*/
    0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
    0x22,         /*bDescriptorType*/
    33, //HID_SIZ_REPORT_DESC,/*wItemLength: Total length of Report descriptor*/
    0x00,
            
    /*****/
    0x07,          /*bLength: Endpoint Descriptor size*/
    0x05,//USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/

    0x82,          /*bEndpointAddress: Endpoint Address (OUT)*/
    0x03,          /*bmAttributes: Interrupt endpoint*/
    0x40,          /*wMaxPacketSize: 64 Byte max */
    0x00,
    0x0A,   
    /******************** Descriptor of  endpoint ********************/

        /*48*/
    0x07,          /*bLength: Endpoint Descriptor size*/
    0x05,//USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/

    0x01,          /*bEndpointAddress: Endpoint Address (IN)*/
    0x03,          /*bmAttributes: Interrupt endpoint*/
    0x40,          /*wMaxPacketSize: 64 Byte max */
    0x00,
    0x0A          /*bInterval: Polling Interval (10 ms)*/
    /* 55 */
  
    /******************** Descriptor of  endpoint ********************/     
};

使用特权

评论回复
8
leixingmin| | 2013-4-9 12:34 | 只看该作者
本帖最后由 leixingmin 于 2013-4-9 12:35 编辑
1375343860 发表于 2013-4-8 20:07
不能发现的原因是应该是你的ID没有更改。。。就是设备描述符里面的。。

嗯,感谢 1375343860 ,就是idProduct没改,随便改了一个 ,pc就能重新识别了,现在能识别到 usb composite设备了!

但是现在不可用 ?
在问下 楼上的兄弟 ,我是从一个 usb mass 设备改过来的,之前u盘没有问题,可以是被识别,可以正常使用,改成上面的复合设备后,都不可用了 ,增加了一个hid自定义设备 ,端点响应代码应该怎么移植 ,请指导一下!

使用特权

评论回复
9
1375343860|  楼主 | 2013-4-10 20:34 | 只看该作者
leixingmin 发表于 2013-4-9 12:34
嗯,感谢 1375343860 ,就是idProduct没改,随便改了一个 ,pc就能重新识别了,现在能识别到 usb composit ...

我怎么看着这么少呢。。我要看你的设备描述符!才可以确定怎么回事?

使用特权

评论回复
10
seanwood| | 2013-4-11 08:41 | 只看该作者
啊啊啊 非常感谢! 正想做这个呢,可惜不是stm32f4的,认真研究ing

使用特权

评论回复
11
leixingmin| | 2013-4-11 14:57 | 只看该作者
1375343860 发表于 2013-4-10 20:34
我怎么看着这么少呢。。我要看你的设备描述符!才可以确定怎么回事?

实在搞不定,拿你的工程在改了 ,改掉cdc ,换成hid ,mass 正常,hid 一个小叹号,不可用! 请看描述符:
const uint8_t MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC] =  {
    0x12,   // bLength
    0x01,   // bDescriptorType
    0x00,   // bcdUSB, version 2.00
    0x02,
    0x00,   // bDeviceClass : each interface define the device class
    0x00,   // bDeviceSubClass
    0x00,   // bDeviceProtocol
   
    0x40,   // bMaxPacketSize0 0x40 = 64
   
    0x83,   // idVendor     (0283)
    0x02,
    0x52,   // idProduct
    0x57,
   
    0x00,   // bcdDevice 2.00*/
    0x02,
    1,      // index of string Manufacturer
    2,      // index of string descriptor of product*/
    3,      //
    0x01    //bNumConfigurations
};

const uint8_t MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC] =  {

    /** 配置描述符 */
        0x09,   // bLength: Configuation Descriptor size
    0x02,   // bDescriptorType: Configuration
    MASS_SIZ_CONFIG_DESC,
    0x00,
    0x02,   // bNumInterfaces: 2 interface
    0x01,   // bConfigurationValue:
    0x00,   // iConfiguration:
    0xC0,   // bmAttributes:
    0x32,   // MaxPower 100 mA

        /* size: 9 */
    /******************** Mass 接口描述 ********************/
    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType:
    0x00,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x02,   // bNumEndpoints*/
    0x08,   // bInterfaceClass: MASS STORAGE Class
    0x06,   // bInterfaceSubClass : SCSI transparent*/
    0x50,   // nInterfaceProtocol
    4,      // iInterface:

        /* size: 18 */
        /******************** Mass 端点(IN) 描述 ********************/
    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x81,   // Endpoint address (IN, address 1)------------------------------------------------------------------------------------
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds

        /* size: 25 */
        /******************** Mass 端点(OUT) 描述 ********************/
    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x02,   // Endpoint address (OUT, address 2)--------------------------------------------------------------------------------------
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds
    /* size: 32 */  
    /******************** HID 接口描述 ********************/

    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType: Interface
    0x01,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x02,   // bNumEndpoints: 3 endpoints used
    0x03,   // bInterfaceClass: Communication Interface Class   bInterfaceClass: HID
    0x00,   // bInterfaceSubClass: Abstract Control Model
    0x00,   // bInterfaceProtocol: Common AT commands
    0x00,   // iInterface:
        /* size: 41 */

        /******************** HID 子类型描述 ********************/
    0x09,         /* bLength: HID Descriptor size */
    0x21,                   /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country */
    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
    0x22,         /* bDescriptorType */
    0x40,                  /* wItemLength: Total length of Report descriptor */
    0x00,
        /* size: 50 */
   
        /******************** HID 端点(IN) 描述 ********************/
        //Endpoint 3 Descriptor
    0x07,   // bLength: Endpoint Descriptor size
    0x05,    // bDescriptorType: Endpoint
    //0x85,   // bEndpointAddress: (IN2)
        0x83,
    0x03,   // bmAttributes: Interrupt
    0x40,   // wMaxPacketSize:
    0x00,
    0x0A,   // bInterval:
        /* size: 57 */
   
        /******************** HID 端点(OUT) 描述 ********************/
    //Endpoint 4 Descriptor
    0x07,   // bLength: Endpoint Descriptor size
    0x05,   // bDescriptorType: Endpoint
    //0x06,   // bEndpointAddress: (OUT3)
        0x04,
    //0x02,   // bmAttributes: Bulk
        0x03,
    0x40,   // wMaxPacketSize:
    0x00,
    0x0A,   // bInterval: ignore for Bulk transfer
        /* size: 64 */
}

呵呵,还请兄弟能提供个email ,能快速交流 ,搞了快一周了,就卡这里了!

使用特权

评论回复
12
1375343860|  楼主 | 2013-4-11 18:47 | 只看该作者
leixingmin 发表于 2013-4-11 14:57
实在搞不定,拿你的工程在改了 ,改掉cdc ,换成hid ,mass 正常,hid 一个小叹号,不可用! 请看描述符: ...

1375343860

使用特权

评论回复
13
leixingmin| | 2013-4-12 13:55 | 只看该作者
配置描述符终于搞定了,可以识别mass 和 hid设备 ,
感谢 1375343860 兄弟的鼎力相助,提供很多资料 ,hid需要有报告描述符的,可以从下面**获得!
bbs.cepark.com/thread-37361-1-1.html   

后续再加入交互响应代码,再次感谢 1375343860 !!

使用特权

评论回复
14
香水城| | 2013-4-12 16:31 | 只看该作者
感谢1375343860leixingmin两位网友的热心分享

使用特权

评论回复
15
icicicici| | 2013-4-24 13:31 | 只看该作者
可以用到bulk传输数据到PC吗?还有,楼主用的是啥版本的keil?我找不到bulk的in与out

使用特权

评论回复
16
1375343860|  楼主 | 2013-4-28 18:40 | 只看该作者
icicicici 发表于 2013-4-24 13:31
可以用到bulk传输数据到PC吗?还有,楼主用的是啥版本的keil?我找不到bulk的in与out ...

不会啊。里面有的。。

使用特权

评论回复
17
leo_z| | 2013-5-21 01:18 | 只看该作者
非常感谢lz分享....

使用特权

评论回复
18
li880wert| | 2014-1-7 15:51 | 只看该作者
顶,刚想做这测试就找到例程

使用特权

评论回复
19
wangzhihai1986| | 2014-1-7 21:11 | 只看该作者
有空了我也把HID从方式的鼠标和键盘复合上传

使用特权

评论回复
20
KC_CEC| | 2014-3-5 15:17 | 只看该作者
F4的CDC和MSC搞了好几天了都没有搞好

使用特权

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

本版积分规则

4

主题

12

帖子

1

粉丝