This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32F103 USB HID using Endpoints (no answer from EP1)

Hi Guys,
I sit for days on my USB transfer. I work with a STM32F103C8 microcontroller.
I want to build a transmission with 2 endpoints to transfer my Data from the (GUI) Host.
My problem are the endpoints. I can not get data from the endpoint.
It is the KEIL USB Library...

Here some code snippets:

//********************************Defines****************************************

#define USB_POWER           0
#define USB_IF_NUM          1
#define USB_EP_NUM          2
#define USB_MAX_PACKET0     8
#define USB_DBL_BUF_EP      0x0040

#define USB_POWER_EVENT     0
#define USB_RESET_EVENT     1
#define USB_SUSPEND_EVENT   0
#define USB_RESUME_EVENT    0
#define USB_WAKEUP_EVENT    0
#define USB_SOF_EVENT       0
#define USB_ERROR_EVENT     0
#define USB_EP_EVENT        0x0003
#define USB_CONFIGURE_EVENT 0
#define USB_INTERFACE_EVENT 1
#define USB_FEATURE_EVENT   0

#define USB_CLASS           1
#define USB_HID             1
#define USB_HID_IF_NUM      0
#define USB_MSC             0
#define USB_MSC_IF_NUM      0
#define USB_AUDIO           0
#define USB_ADC_CIF_NUM     0
#define USB_ADC_SIF1_NUM    1
#define USB_ADC_SIF2_NUM    2
#define USB_CDC             0
#define USB_CDC_CIF_NUM     0
#define USB_CDC_DIF_NUM     1
#define USB_CDC_BUFSIZE     64


//***************************My Buffer Variables************************************
uint8_t InReport[64];
uint8_t  OutReport[64];

I get no call interrupt at this point

void USB_EndPoint1 (U32 event) {

 GPIOB->BSRR |=(1<<1); //Set PB1 only for debuging with Osziloscope

  switch (event) {
  case USB_EVT_IN:
  GetInReport();
  USB_WriteEP(0x81, InReport, sizeof(InReport));
  break;

  case USB_EVT_OUT:
  USB_ReadEP(0x01, OutReport);
  SetOutReport();
  break;
  }
GPIOB->BSRR |=(1<<17); //Clear PB1 only for debuging with Osziloscope
}


const U8 HID_ReportDescriptor[] = {
  HID_UsagePageVendor( 0x00                     ),
  HID_Usage          ( 0x01                     ),
  HID_Collection     ( HID_Application          ),

    HID_LogicalMin   ( 0                        ),  //value range: 0 - 0xFF
    HID_LogicalMaxS  ( 0xFF                     ),
    HID_ReportSize   ( 8                        ),  // 8 bits
    HID_ReportCount  ( 0x40   ),
    HID_Usage        ( 0x01                     ),
    HID_Input        ( HID_Data | HID_Variable | HID_Absolute ),
    HID_ReportCount  ( 0x40  ),
    HID_Usage        ( 0x01                     ),
    HID_Output       ( HID_Data | HID_Variable | HID_Absolute ),
    HID_ReportCount  ( 0x40 ),
    HID_Usage        ( 0x01                     ),
    HID_Feature      ( HID_Data | HID_Variable | HID_Absolute ),

  HID_EndCollection,
};

/* USB Standard Device Descriptor */
const U8 USB_DeviceDescriptor[] = {
  USB_DEVICE_DESC_SIZE,              /* bLength */
  USB_DEVICE_DESCRIPTOR_TYPE,        /* bDescriptorType */
  WBVAL(0x0200), /* 2.00 */          /* bcdUSB */
  0x00,                              /* bDeviceClass */
  0x00,                              /* bDeviceSubClass */
  0x00,                              /* bDeviceProtocol */
  USB_MAX_PACKET0,                   /* bMaxPacketSize0 */
  WBVAL(0xC251),                     /* idVendor */
  WBVAL(0x1C01),                     /* idProduct */
  WBVAL(0x0100), /* 1.00 */          /* bcdDevice */
  0x01,                              /* iManufacturer */
  0x02,                              /* iProduct */
  0x03,                              /* iSerialNumber */
  0x01                               /* bNumConfigurations: one possible configuration*/
};

const U8 USB_ConfigDescriptor[] = {
//Configuration 1
  USB_CONFIGUARTION_DESC_SIZE,       /* bLength */
  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */
  WBVAL(USB_CONFIGUARTION_DESC_SIZE + HID_DESC_SIZE + USB_INTERFACE_DESC_SIZE + USB_ENDPOINT_DESC_SIZE + USB_ENDPOINT_DESC_SIZE),   // wTotalLength
  0x01,                              /* bNumInterfaces */
  0x01,                              /* bConfigurationValue: 0x01 is used to select this configuration */
  0x00,                              /* iConfiguration: no string to describe this configuration */
  USB_CONFIG_BUS_POWERED,                       /* bmAttributes */
  USB_CONFIG_POWER_MA(100),          /* bMaxPower, device power consumption is 100 mA */

// Interface 0, Alternate Setting 0, HID Class
  USB_INTERFACE_DESC_SIZE,           /* bLength */
  USB_INTERFACE_DESCRIPTOR_TYPE,     /* bDescriptorType */
  0x00,                              /* bInterfaceNumber */
  0x00,                              /* bAlternateSetting */
  0x02,                              /* bNumEndpoints */


  USB_DEVICE_CLASS_HUMAN_INTERFACE, /* bInterfaceClass */
  0,                            /* bInterfaceSubClass */
  0,                            /* bInterfaceProtocol */
  0,                           /*iInterface*/


//HID Class Descriptor
  HID_DESC_SIZE,                     /* bLength */
  HID_HID_DESCRIPTOR_TYPE,           /* bDescriptorType */
  WBVAL(0x0100), /* 1.00 */          /* bcdHID */
  0x00,                              /* bCountryCode */
  0x01,                              /* bNumDescriptors */
  HID_REPORT_DESCRIPTOR_TYPE,        /* bDescriptorType */
  WBVAL(HID_REPORT_DESC_SIZE),       /* wDescriptorLength */


// Endpoint, HID Interrupt In
  USB_ENDPOINT_DESC_SIZE,            /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType */
  USB_ENDPOINT_IN(1),                /* bEndpointAddress */
  USB_ENDPOINT_TYPE_INTERRUPT ,       /* bmAttributes */
  0x40,0x00,                        /* wMaxPacketSize */
  0x01,          /* 32ms */          /* bInterval */    //0x20


//Endpoint, HID Interrupt out
        USB_ENDPOINT_DESC_SIZE,            /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType */
  USB_ENDPOINT_OUT(1),                /* bEndpointAddress */
  USB_ENDPOINT_TYPE_INTERRUPT  ,       /* bmAttributes */
  0x40,0x00,                            /* wMaxPacketSize */
  0x01,          /* 32ms */          /* bInterval *///0x20


/* Terminator */
  0                                  /* bLength */
};



//************************************************************************************
The USB Sniffer shows the correct port setting. But why the endpoint interrupt is not executed?
I see data packets (every 1ms) at the USB data pin on the oscilloscope.
But unfortunately, the device receives nothing...
Who can help me in the initialization?
I have read many Theards, but it does not work ..

Best Regards
Peter

Parents Reply Children
No data