参考的是官网例程STM32_USB-Host-Device_Lib_V2.1.0->USB_Host_Examples->MSC
MCU:STM32F107VB
外部晶振:8MHz
使用串口:USART3
修改设置如下:
增加定义
修改时钟
目前问题是在主函数的USBH_Process(&USB_OTG_Core, &USB_Host);中无法枚举成功
- case HOST_ENUMERATION:
- /* Check for enumeration status */
- if ( USBH_HandleEnum(pdev , phost) == USBH_OK)
- {
- /* The function shall return USBH_OK when full enumeration is complete */
-
- /* user callback for end of device basic enumeration */
- phost->usr_cb->EnumerationDone();
-
- phost->gState = HOST_USR_INPUT;
- }
- break;
这个if进不了,一步步下推
- case ENUM_IDLE:
- /* Get Device Desc for only 1st 8 bytes : To get EP0 MaxPacketSize */
- if ( USBH_Get_DevDesc(pdev , phost, 8) == USBH_OK)
- {
- phost->Control.ep0size = phost->device_prop.Dev_Desc.bMaxPacketSize;
-
- /* Issue Reset */
- HCD_ResetPort(pdev);
- phost->EnumState = ENUM_GET_FULL_DEV_DESC;
-
- /* modify control channels configuration for MaxPacket size */
- USBH_Modify_Channel (pdev,
- phost->Control.hc_num_out,
- 0,
- 0,
- 0,
- phost->Control.ep0size);
-
- USBH_Modify_Channel (pdev,
- phost->Control.hc_num_in,
- 0,
- 0,
- 0,
- phost->Control.ep0size);
- }
- break;
这个if进不了,一步步下推
- USBH_Status USBH_Get_DevDesc(USB_OTG_CORE_HANDLE *pdev,
- USBH_HOST *phost,
- uint8_t length)
- {
-
- USBH_Status status;
-
- if((status = USBH_GetDescriptor(pdev,
- phost,
- USB_REQ_RECIPIENT_DEVICE | USB_REQ_TYPE_STANDARD,
- USB_DESC_DEVICE,
- pdev->host.Rx_Buffer,
- length)) == USBH_OK)
- {
- /* Commands successfully sent and Response Received */
- USBH_ParseDevDesc(&phost->device_prop.Dev_Desc, pdev->host.Rx_Buffer, length);
- }
- return status;
- }
这个if进不了,status始终为1
- typedef enum {
- USBH_OK = 0,
- USBH_BUSY,
- USBH_FAIL,
- USBH_NOT_SUPPORTED,
- USBH_UNRECOVERED_ERROR,
- USBH_ERROR_SPEED_UNKNOWN,
- USBH_APPLY_DEINIT
- }USBH_Status;
最终原因USBH_BUSY始终处于这状态。
实在找不到是什么原因导致的。
预定义STM32F10X_CL,USE_STM3210C_EVAL,USE_USB_OTG_FS在设置中都定义了
- #if !defined HSE_VALUE
- #ifdef STM32F10X_CL
- // #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
- #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
- #else
- #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
- #endif /* STM32F10X_CL */
- #endif /* HSE_VALUE */
这块也将时钟改为8MHz了,请问还有哪可能有问题呀?
|