[USB编程] stm32f10系列使用usb,d+直接接IO口可以吗?

[复制链接]
5632|4
 楼主| danieljustice 发表于 2014-6-19 10:34 | 显示全部楼层 |阅读模式
我现在使用stm32f10系列在学习usb,自己做了一块板,画板的时候d+没有使用三极管电路,而是直接连到一个IO口上去了。现在usb插上之后电脑能够检测到设备,但是安装不了驱动,请问是什么原因呢?
我检查了一下usb_desc.c下面的device、config、report的descriptor,没有发现什么问题。像我这种情况安装不了驱动是因为d+的电路问题,还是我的软件上配置错误了呢?下面是我的几个descriptor的配置。

  1. /* USB Standard Device Descriptor */
  2. const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
  3. {
  4.     0x12,                       /*bLength */
  5.     USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
  6.     0x00,                       /*bcdUSB */
  7.     0x02,
  8.     0x00,                       /*bDeviceClass*/
  9.     0x00,                       /*bDeviceSubClass*/
  10.     0x00,                       /*bDeviceProtocol*/
  11.     0x40,                       /*bMaxPacketSize40*/
  12.     0x83,                       /*idVendor (0x0483)*/
  13.     0x04,
  14.     0x50,                       /*idProduct = 0x5750*/
  15.     0x57,
  16.     0x00,                       /*bcdDevice rel. 2.00*/
  17.     0x02,
  18.     1,                          /*Index of string descriptor describing manufacturer */
  19.     2,                          /*Index of string descriptor describing product*/
  20.     3,                          /*Index of string descriptor describing the device serial number */
  21.     0x01                        /*bNumConfigurations*/
  22. }; /* CustomHID_DeviceDescriptor */


  23. /* USB Configuration Descriptor */
  24. /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
  25. const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
  26. {
  27.     0x09, /* bLength: Configuation Descriptor size */
  28.     USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
  29.     CUSTOMHID_SIZ_CONFIG_DESC,
  30.     /* wTotalLength: Bytes returned */
  31.     0x00,
  32.     0x01,         /* bNumInterfaces: 1 interface */
  33.     0x01,         /* bConfigurationValue: Configuration value */
  34.     0x00,         /* iConfiguration: Index of string descriptor describing
  35.                                  the configuration*/
  36.     0xC0,         /* bmAttributes: Bus powered */
  37.                   /*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */
  38. //    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */
  39.     0x96,         /* MaxPower 300 mA: this current is used for detecting Vbus */
  40.     /************** Descriptor of Custom HID interface ****************/
  41.     /* 09 */
  42.     0x09,         /* bLength: Interface Descriptor size */
  43.     USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
  44.     0x00,         /* bInterfaceNumber: Number of Interface */
  45.     0x00,         /* bAlternateSetting: Alternate setting */
  46.     0x02,         /* bNumEndpoints */
  47.     0x03,         /* bInterfaceClass: HID */
  48.     0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
  49.     0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
  50.     0,            /* iInterface: Index of string descriptor */
  51.     /******************** Descriptor of Custom HID HID ********************/
  52.     /* 18 */
  53.     0x09,         /* bLength: HID Descriptor size */
  54.     HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
  55.     0x10,         /* bcdHID: HID Class Spec release number */
  56.     0x01,
  57.     0x00,         /* bCountryCode: Hardware target country */
  58.     0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
  59.     0x22,         /* bDescriptorType */
  60.     CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
  61.     0x00,
  62.     /******************** Descriptor of Custom HID endpoints ******************/
  63.     /* 27 */
  64.     0x07,          /* bLength: Endpoint Descriptor size */
  65.     USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

  66.     0x82,          /* bEndpointAddress: Endpoint Address (IN) */               
  67.                    // bit 3...0 : the endpoint number
  68.                    // bit 6...4 : reserved
  69.                     // bit 7     : 0(OUT), 1(IN)
  70.     0x03,          /* bmAttributes: Interrupt endpoint */
  71.     0x40,          /* wMaxPacketSize: 64 Bytes max */
  72.     0x00,
  73.     0x02,          /* bInterval: Polling Interval (2 ms) */
  74.     /* 34 */
  75.            
  76.     0x07,        /* bLength: Endpoint Descriptor size */
  77.     USB_ENDPOINT_DESCRIPTOR_TYPE,        /* bDescriptorType: */
  78.                         /*        Endpoint descriptor type */
  79.     0x01,        /* bEndpointAddress: */
  80.                         /*        Endpoint Address (OUT) */
  81.     0x03,        /* bmAttributes: Interrupt endpoint */
  82.     0x40,        /* wMaxPacketSize: 64 Bytes max  */
  83.     0x00,
  84.     0x02,        /* bInterval: Polling Interval (2 ms) */
  85.     /* 41 */
  86. }; /* CustomHID_ConfigDescriptor */
  87. const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  88. {
  89.         0x05, 0x8c, /* USAGE_PAGE (ST Page) */
  90.         0x09, 0x01, /* USAGE (Demo Kit) */
  91.         0xa1, 0x01, /* COLLECTION (Application) */
  92.        
  93.         // The Input report
  94.         0x09,0x03, // USAGE ID - Vendor defined
  95.         0x15,0x00, // LOGICAL_MINIMUM (0)
  96.         0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
  97.         0x75,0x08, // REPORT_SIZE (8bit)
  98.         0x95,0x40, // REPORT_COUNT (64Byte)
  99.         0x81,0x02, // INPUT (Data,Var,Abs)

  100.         // The Output report
  101.         0x09,0x04, // USAGE ID - Vendor defined
  102.         0x15,0x00, // LOGICAL_MINIMUM (0)
  103.         0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
  104.         0x75,0x08, // REPORT_SIZE (8bit)
  105.         0x95,0x40, // REPORT_COUNT (64Byte)
  106.         0x91,0x02, // OUTPUT (Data,Var,Abs)

  107.         0xc0 /* END_COLLECTION */
  108. }; /* CustomHID_ReportDescriptor */
希望各位大神帮我看看,究竟是什么问题,感激不尽了~
 楼主| danieljustice 发表于 2014-6-23 08:49 | 显示全部楼层
我大概用了四种方法进行实验,只有两种成功。
第一种,把D+线先当作IO来用等待枚举成功再转换成USB数据功能。结果失败,能检测到USB设备但是读不了descriptor信息安装不了驱动。
第二种,把D+线接到另一个IO口上。结果失败,情况跟上一个一样。
第三种,把D+线通过一个1.5k的电阻接到另一个IO口上。成功。
第四种,按照标准接法,用一个IO口控制三极管基极,集电极接VBUS的5V电压,发射极通过一个1.5k上拉电阻接D+线。成功。
但是用呀呀usb的上位机,无法通讯,最后我从网上下载了这个上位机,成功通讯能收发数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
djxf 发表于 2014-6-23 09:45 | 显示全部楼层
根据你的描述,感觉是D+没有上拉的原因。
amwrdfe 发表于 2014-6-23 20:37 | 显示全部楼层
你不会直接把两个io连在一起吧。
 楼主| danieljustice 发表于 2014-6-25 08:49 | 显示全部楼层
amwrdfe 发表于 2014-6-23 20:37
你不会直接把两个io连在一起吧。

是啊,一开始直接连了。后来发现不行,还是加了一个电阻,就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

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