打印

usb高手帮帮忙!

[复制链接]
8471|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chengying|  楼主 | 2012-6-8 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用st的STM32_USB-Host-Device_Lib_V2.1.0\库的hid例程,原来例程只有mcu发送数据给pc,现在要增加pc发送数据给mcu,mcu发送数据给pC已成功,端点号为0x81,pc发送数据给mcu老是不成功,端点号为0x01,用bushound看,数据有发下去,mcu就是不响应。下边是我的工程,我在文件Usbd_hid_core.c增加了下边USBD_HID_DataOut,USBD_HID_DataOut,函数如下,为何进不了中断?同样库,虚拟串口例程接收pc数据进得了中断。高手帮忙分析分析,是不是哪里还要改动?
USBD_Class_cb_TypeDef  USBD_HID_cb =
{
  USBD_HID_Init,
  USBD_HID_DeInit,
  USBD_HID_Setup,
  NULL, /*EP0_TxSent*/  
  NULL, /*EP0_RxReady*/
  USBD_HID_DataIn, /*DataIn*/
  //NULL, /*DataOut*/
  USBD_HID_DataOut,
  NULL, /*SOF */
  NULL,
  NULL,      
  USBD_HID_GetCfgDesc,
#ifdef USB_OTG_HS_CORE  
  USBD_HID_GetCfgDesc, /* use same config as per FS */
#endif  
};


static uint8_t  USBD_HID_DataOut (void *pdev, uint8_t epnum)
{      
  uint16_t USB_Rx_Cnt;
  uint8_t data[4]={0x11,0x22,0x33,0x44};
  /* Get the received data buffer and update the counter */
  USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count;
   GPIO_ResetBits(GPIOE, GPIO_Pin_1);
  /* USB data will be immediately processed, this allow next USB traffic being
     NAKed till the end of the application Xfer */
  //APP_FOPS.pIf_DataRx(USB_Rx_Buffer, USB_Rx_Cnt);
  DCD_EP_Tx ( pdev,HID_IN_EP,data,4);
  /* Prepare Out endpoint to receive next packet */
  DCD_EP_PrepareRx(pdev,
                   HID_OUT_EP,
                   (uint8_t*)(USB_Rx_Buffer),
                   HID_OUT_PACKET);

  return USBD_OK;
}

配置描述符
__ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END =//[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END =
{

  #if 1

0x09, /* bLength: Configuation Descriptor size */

    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */

    USB_HID_CONFIG_DESC_SIZ,

    /* wTotalLength: Bytes returned */

    0x00,

     0x01,   // 0x01,         /* bNumInterfaces: 1 interface */

    0x01,         /* bConfigurationValue: Configuration value */

    0x00,         /* iConfiguration: Index of string descriptor describing

                                 the configuration*/

    0xC0,         /* bmAttributes: Bus powered */

                  /*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */

    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */

//    0x96,         /* MaxPower 300 mA: this current is used for detecting Vbus */

    /************** Descriptor of Custom HID interface ****************/

    /* 09 */

    0x09,         /* bLength: Interface Descriptor size */

    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */

    0x00,         /* bInterfaceNumber: Number of Interface */

    0x00,         /* bAlternateSetting: Alternate setting */

   0x02,         /* bNumEndpoints */
   
     
    0x03,         /* bInterfaceClass: HID */

    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */

    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */

    0,            /* iInterface: Index of string descriptor */

    /******************** Descriptor of Custom HID HID ********************/

    /* 18 */

    0x09,         /* bLength: HID Descriptor size */

    HID_DESCRIPTOR_TYPE, /* 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 */

    CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */

    0x00,

    /******************** Descriptor of Custom HID endpoints ******************/

    /* 27 */

    0x07,          /* bLength: Endpoint Descriptor size */

    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */



    HID_IN_EP,          /* bEndpointAddress: Endpoint Address (IN) */               

                   // bit 3...0 : the endpoint number

                   // bit 6...4 : reserved

                    // bit 7     : 0(OUT), 1(IN)

    0x03,          /* bmAttributes: Interrupt endpoint */

    0x40,//0x02,          /* wMaxPacketSize: 20 Bytes max */

    0x00,

   // 0x10,          /* bInterval: Polling Interval (32 ms) */

    0xa,      /* bInterval: Polling Interval (10ms) */
    /* 34 */

           

    0x07,      /* bLength: Endpoint Descriptor size */

    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: */

                     /*    Endpoint descriptor type */

    HID_OUT_EP,      /* bEndpointAddress: */

                     /*    Endpoint Address (OUT) */

    0x03,      /* bmAttributes: Interrupt endpoint */

    0x40,//0x02,   /* wMaxPacketSize: 20 Bytes max  */

    0x00,

    0x10,      /* bInterval: Polling Interval (16 ms) */

    /* 41 */

#endif
   


} ;

#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
    #pragma data_alignment=4   
  #endif
/* USB HID device Configuration Descriptor */
__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END=
{
  /* 18 */
  0x09,         /*bLength: HID Descriptor size*/
  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
  0x11,         /*bcdHID: HID Class Spec release number*/
  0x01,
  0x00,         /*bCountryCode: Hardware target country*/
  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
  0x22,         /*bDescriptorType*/
  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
  0x00,
};
#endif


#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
    #pragma data_alignment=4   
  #endif
#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
  #if 1
  0x05, 0x8c, /* USAGE_PAGE (ST Page) */
0x09, 0x01, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION (Application) */
/* 6 */

// The Input report
0x09,0x03, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
//0x95,0x16, // REPORT_COUNT (20)
0x95,0x40,
0x81,0x02, // INPUT (Data,Var,Abs)
//19
// The Output report
0x09,0x04, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
//0x95,0x16, // REPORT_COUNT (20)
0x95,0x40, // REPORT_COUNT (64)
0x91,0x02, // OUTPUT (Data,Var,Abs)
//32
// The Feature report
/*
0x09, 0x05, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
0x95,0x02, // REPORT_COUNT (2)
0xB1,0x02,
*/
/* 45 */
0xc0 /* END_COLLECTION */
#endif
};

STM32_USB-Host-Device_Lib_V2.1.0.rar

3.72 MB

沙发
chengying|  楼主 | 2012-6-8 11:57 | 只看该作者
香主呀,帮帮忙,看一下问题在哪

使用特权

评论回复
板凳
chengying|  楼主 | 2012-6-8 12:49 | 只看该作者
在线等呀

使用特权

评论回复
地板
chengying|  楼主 | 2012-6-8 14:20 | 只看该作者
自己顶

使用特权

评论回复
5
香水城| | 2012-6-8 15:18 | 只看该作者
ST的例程里用HID_IN_PACKET定义了最大包长度,你把这个定义改了吗?

使用特权

评论回复
6
chengying|  楼主 | 2012-6-8 15:29 | 只看该作者
我都改了,都为64,现在是pc发送数据给mcu,我用bushound发送数据给mcu,数据有发送下来,但跟踪中断函数USBD_OTG_ISR_Handler (&USB_OTG_dev);发现往端口0x01发送数据给mcu,mcu没在中断调用USBD_HID_DataOut函数。

使用特权

评论回复
7
chengying|  楼主 | 2012-6-8 15:34 | 只看该作者
现在问题是怎么解决用hid把PC把数据发给mcu,原来例程是没有把数据发给mcu,只有mcu发给pc。

使用特权

评论回复
8
chengying|  楼主 | 2012-6-8 17:23 | 只看该作者
高手快来呀

使用特权

评论回复
9
chengying|  楼主 | 2012-6-8 18:02 | 只看该作者
:'(

使用特权

评论回复
10
chengying|  楼主 | 2012-6-8 19:57 | 只看该作者
搞出来了,描述符有问题

使用特权

评论回复
11
jgphu| | 2012-6-11 10:05 | 只看该作者
官方的HID例程就可以PC发给MCU啊。

使用特权

评论回复
12
chengying|  楼主 | 2012-6-11 10:27 | 只看该作者
我用的版本没有呀,必须自己加

使用特权

评论回复
13
jldwd| | 2012-12-6 14:52 | 只看该作者
楼主在啊,有问题请教啊!!

使用特权

评论回复
14
jjg809898461| | 2014-5-3 19:29 | 只看该作者
chengying 发表于 2012-6-8 19:57
搞出来了,描述符有问题

请问楼主能给出具体哪出问题了吗?新手学习中

使用特权

评论回复
15
zhanglei1986145| | 2014-8-22 18:06 | 只看该作者
LZ,给个答案,具体是什么地方出了问题,谢谢!

使用特权

评论回复
16
5768340| | 2014-11-25 09:42 | 只看该作者
zhanglei1986145 发表于 2014-8-22 18:06
LZ,给个答案,具体是什么地方出了问题,谢谢!

HI ,你也在弄这个问题吗  ?我现在也在修改这个库 ,死活弄不出来自定义 HID 设备 ,能指点一下吗 ?除了报告描述符还需要改哪里呢

使用特权

评论回复
17
5768340| | 2014-11-25 18:01 | 只看该作者
你好 , 我最近也在用STM32_USB-Host-Device_Lib_V2.1.0 库做 HID 的双向通信 ,同样遇到 MCU 没有反应的情况 ,不知道你当时怎么解决的呢 ?

使用特权

评论回复
18
leicodaisy| | 2014-12-18 18:18 | 只看该作者
有没有人双向通信有成功的经验,求助描述符

使用特权

评论回复
19
leicodaisy| | 2015-1-5 16:50 | 只看该作者
您好,最近在弄USB与PC机双向通信,遇到了几个问题,我的QQ是836839827,不知道方不方便加一下QQ请教一下

使用特权

评论回复
20
leicodaisy| | 2015-1-5 16:51 | 只看该作者
5768340 发表于 2014-11-25 18:01
你好 , 我最近也在用STM32_USB-Host-Device_Lib_V2.1.0 库做 HID 的双向通信 ,同样遇到 MCU 没有反应的情 ...

您好,由于级别比较低,不太好交流,不知道方不方便加一下QQ请教一下,我的QQ是836839827

使用特权

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

本版积分规则

10

主题

42

帖子

0

粉丝