2015-09-24 05:45 AM
I�m trying to use the STM32F407 as Host, i use Olimex STM32-P407 eval, my hardware configuration is the following:
- PB14, PB15, PB13 (DM, DP, VBUS) OTG HS as a Host with Embedded PHYI
'm trying toinitialize
the mini USB-
OTG HSpresent
on OLIMEX and use FS Mode.
This is my
initialization
present on file ''usbh_conf.c'':
void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd)
{ GPIO_InitTypeDef GPIO_InitStruct; if(hhcd->Instance == USB_OTG_HS) { /* Configure USB HS GPIOs */ __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); /* Configure DM DP Pins */ GPIO_InitStruct.Pin = GPIO_PIN_14 | GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_OTG_HS_FS; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* This for ID line debug */ GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS_FS; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Configure Power Switch Vbus Pin */ GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Enable USB HS Clocks */ __USB_OTG_HS_CLK_ENABLE(); HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0); /* Enable USB HS Interrupt */ HAL_NVIC_EnableIRQ(OTG_HS_IRQn); } } The Power Switch configuration is:USBH_StatusTypeDef USBH_LL_DriverVBUS(USBH_HandleTypeDef *phost, uint8_t state)
{ if(state == 0) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET); } HAL_Delay(200); return USBH_OK; } The Initialization of the Low Level portion of the Host driver is:USBH_StatusTypeDef USBH_LL_Init(USBH_HandleTypeDef *phost)
{ /* Set the LL driver parameters */ hhcd.Instance = USB_OTG_HS; hhcd.Init.Host_channels = 11; hhcd.Init.dma_enable = 0; hhcd.Init.low_power_enable = ENABLE; hhcd.Init.phy_itface = HCD_PHY_EMBEDDED; hhcd.Init.Sof_enable = 0; hhcd.Init.speed = HCD_SPEED_FULL; hhcd.Init.vbus_sensing_enable = DISABLE; /* Link the driver to the stack */ hhcd.pData = phost; phost->pData = &hhcd; /*Initialize the LL Driver */ HAL_HCD_Init(&hhcd); USBH_LL_SetTimer(phost, HAL_HCD_GetCurrentFrame(&hhcd)); return USBH_OK; }QUESTION
:1) It's correct configuration? In this mode i see 5V on VBUS, but my phone don't charge when i connect it.
2)Why
VBUS
is
configured
in this mode
(GPIO_MODE_INPUT
)? 3) The
configuration
for the Power
switch
is correct? 4)My goal
is that
by connecting the
phone to
OLIMEX
she
finds out that the
phone is connected and charge it
. How can I
manage and
configure
the interrupt
?
Thanks for your help.
#vbus #stm32f4 #usb #otg #host #cell2015-09-25 02:14 AM
Regarding the VBUS you have to check the board schemtics, but most probably the ''INPUT'' is not correct. The recommended setup for various VBUS supplied devices is to have the there extra HW to supply them as the GPIO port can not feed the current.
Also check the setup of VBUS defines in USB configuration.