STM32F105 USB将频率改成16MHz无法启用HID

2019-07-14 17:35发布

我使用 IAR 6.3 提供的範例程序(Custom_HID) , 將頻率改成16MHz,
載入我自己的板子,無法啟用HID , 是硬件問題嗎?
USBDP => PA12 , USBDM => PA11 , USBGND => GND , USB5V => NC
還有其他要接的嗎?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
hfghgfhgfh
1楼-- · 2019-07-14 22:10
目前可以收發usb了, 但usb 只能收2byte , 我從PC送出64byte 資料 , 結果STM 只能一次收2byte , 還有什麼地方要修改?
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  {   
    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[7];
 
#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);     //
sdfjlsds
2楼-- · 2019-07-15 00:39
我也遇到过这样的问题,其实是参数设置的问题,将OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 2);中的2改成64就OK了,这个函数在#include "otgd_fs_dev.h"中。
我改了问题就解决的。现在我在纠结一个问题是,我的USB设备FEATURE报告描述符什么时候发怎么发到主设备上去呀,望哪位指点一下。
djw200988
3楼-- · 2019-07-15 01:06
 精彩回答 2  元偷偷看……
cmh20
4楼-- · 2019-07-15 01:12
顶一个
uweuewyfydsf
5楼-- · 2019-07-15 02:21
怎么变成乱码了?
djw200988
6楼-- · 2019-07-15 06:57
还需要改最后还需要在usb_desc.c中修改CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC]中的0x95, 0x01,            /*     REPORT_COUNT (1)           */把0x01修改为要发送数据大小的长度。
完成usb数据长度的修改。

一周热门 更多>