joeen63 发表于 2012-10-3 11:46:02

STM32F105 USB

我使用 IAR 6.3 提供的範例程序(Custom_HID) , 將頻率改成16MHz,
載入我自己的板子,無法啟用HID , 是硬件問題嗎?
USBDP => PA12 , USBDM => PA11 , USBGND => GND , USB5V => NC
還有其他要接的嗎?

joeen63 发表于 2012-10-3 17:57:45

RE:STM32F105 USB

原來是要把 USB5V 接到 PA9.

joeen63 发表于 2012-10-4 16:33:23

回复:STM32F105 USB

目前可以收發usb了, 但usb 只能收2byte , 我從PC送出64byte 資料 , 結果STM 只能一次收2byte , 還有什麼地方要修改?
const uint8_t CustomHID_ReportDescriptor =
  {   
    0x05, 0x8c, /* USAGE_PAGE (ST Page) */
    0x09, 0x01, /* USAGE (Demo Kit) */
    0xa1, 0x01, /* COLLECTION (Application) */
    // The Input report
    0x09,0x03, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x81,0x02, // INPUT (Data,Var,Abs)
    // The Output report
    0x09,0x04, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x91,0x02, // OUTPUT (Data,Var,Abs)
    0xc0 /* END_COLLECTION */
}; /* CustomHID_ReportDescriptor */
 
usb_prop.c
void CustomHID_Reset(void)
{
  /* Set Joystick_DEVICE as not configured */
  pInformation->Current_Configuration = 0;
  pInformation->Current_Interface = 0;/*the default Interface*/
 
  /* Current Feature initialization */
  pInformation->Current_Feature = CustomHID_ConfigDescriptor;
 
#ifdef STM32F10X_CL  
  /* EP0 is already configured in DFU_Init() by USB_SIL_Init() function */
 
  /* Init EP1 IN as Interrupt endpoint */
  OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 64);
 
  /* Init EP1 OUT as Interrupt endpoint */
  OTG_DEV_EP_Init(EP1_OUT, OTG_DEV_EP_TYPE_INT, 64);
#else
  SetBTABLE(BTABLE_ADDRESS);
  /* Initialize Endpoint 0 */
  SetEPType(ENDP0, EP_CONTROL);
  SetEPTxStatus(ENDP0, EP_TX_STALL);
  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
  Clear_Status_Out(ENDP0);
  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
  SetEPRxValid(ENDP0);
  /* Initialize Endpoint 1 */
  SetEPType(ENDP1, EP_INTERRUPT);
  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  SetEPRxAddr(ENDP1, ENDP1_RXADDR);
  SetEPTxCount(ENDP1, 64);
  SetEPRxCount(ENDP1, 64);
  SetEPRxStatus(ENDP1, EP_RX_VALID);
  SetEPTxStatus(ENDP1, EP_TX_NAK);
  /* Set this device to response on default address */
  SetDeviceAddress(0);
#endif /* STM32F10X_CL */
  bDeviceState = ATTACHED;
}
 
usb_endp.c

void EP1_OUT_Callback(void)
{
     DataLen = USB_SIL_Read(EP1_OUT, USB_Buffer);     //

allmybeyond 发表于 2012-11-30 17:05:32

回复:STM32F105 USB

我也遇到过这样的问题,其实是参数设置的问题,将OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 2);中的2改成64就OK了,这个函数在#include "otgd_fs_dev.h"中。
我改了问题就解决的。现在我在纠结一个问题是,我的USB设备FEATURE报告描述符什么时候发怎么发到主设备上去呀,望哪位指点一下。

ges 发表于 2015-3-9 09:46:08

亲,我改了OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 2);这个也是不行,什么问题?

zhangdaijin 发表于 2015-3-9 12:54:00

:D:D:D:D:D:D顶一个

MouseCat 发表于 2015-3-9 13:38:58

怎么变成乱码了?

ges 发表于 2015-3-10 14:39:32

还需要改最后还需要在usb_desc.c中修改CustomHID_ReportDescriptor中的0x95, 0x01,            /*   REPORT_COUNT (1)         */把0x01修改为要发送数据大小的长度。
完成usb数据长度的修改。

小伟哥-353357 发表于 2015-3-17 17:40:39

没有遇见过 帮顶
页: [1]
查看完整版本: STM32F105 USB