lqh-414236 发表于 2016-9-29 11:33:02

STM32F205 的HS USB 做device使用是否要接PHY?

STM32F205 的HS USB 做device使用是否要接PHY?

lqh-414236 发表于 2016-10-9 10:06:30

我用做全速,不做高速,使用了内部的PHY,竟然无法枚举?
使用demo修改的,在USB 的D+上加了一个上拉,使用官方的HID demo修改,FS USB 接口可以识别,为啥HS接口无法识别,调试发现USB会发生复位中断,后面就没有任何中断了!代码如下:
hpcd.Instance = USB_OTG_HS;
hpcd.Init.dev_endpoints = 4;
hpcd.Init.use_dedicated_ep1 = 0;
hpcd.Init.ep0_mps = 0x40;

/* Be aware that enabling DMA mode will result in data being sent only by
   multiple of 4 packet sizes. This is due to the fact that USB DMA does
   not allow sending data from non word-aligned addresses.
   For this specific application, it is advised to not enable this option
   unless required. */
hpcd.Init.dma_enable = 0;
hpcd.Init.low_power_enable = 0;
//use inter phy!! 使用内部PHY
hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
hpcd.Init.Sof_enable = 0;
hpcd.Init.speed = PCD_SPEED_FULL;
hpcd.Init.vbus_sensing_enable = 0;
/* Link The driver to the stack */
hpcd.pData = pdev;
pdev->pData = &hpcd;
/* Initialize LL Driver */
HAL_PCD_Init(&hpcd);

HAL_PCDEx_SetRxFiFo(&hpcd, 0x80);
HAL_PCDEx_SetTxFiFo(&hpcd, 0, 0x40);
HAL_PCDEx_SetTxFiFo(&hpcd, 1, 0x80);



IO设置:
{
    /* Configure USB H GPIOs */
    __HAL_RCC_GPIOB_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_AF10_OTG_HS;   
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
       
    /* Enable USB HS Clocks */
        __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
    //__HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE();

    /* Set USBHS Interrupt priority */
    HAL_NVIC_SetPriority(OTG_HS_IRQn, 5, 0);

    /* Enable USBHS Interrupt */
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);

    if(hpcd->Init.low_power_enable == 1)
    {
      /* Enable EXTI Line 20 for USB wakeup*/
      __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG();
      __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE();
      __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT();   

      /* Set EXTI Wakeup Interrupt priority*/
      HAL_NVIC_SetPriority(OTG_HS_WKUP_IRQn, 0, 0);

      /* Enable EXTI Interrupt */
      HAL_NVIC_EnableIRQ(OTG_HS_WKUP_IRQn);
    }
}


其他的配置和FS一样的了。难道HS配置还有什么特别要注意的地方?

cloudcn 发表于 2016-9-29 11:59:55

如果速度要求高就要PHY 内置的只能到12M

stary666 发表于 2016-9-29 12:06:58

肯定要加的,,,,,,,,

lqh-414236 发表于 2016-9-29 13:59:47

我用来做 USB keyboard 设备应该不用加的吧?为什么我调试,USB竟然不中断,中断没有任何反应,FS用作keyboard都没问题!奇怪!!!!

xmshao 发表于 2016-9-29 17:26:17

关键是工作在HS模式还是FS模式。

如果工作在HS模式就必须外加PHY, FS模式就可以用内置的PHY.

mark0668 发表于 2016-9-29 17:35:26

用内置的全速12M 不需要外接PHY,,,如果想用高速USB就必须要外置芯PHY了,因为内置的没有高速,只有全速低速

nongxiaoming 发表于 2016-9-29 21:52:24

不需要~~~

lqh-414236 发表于 2016-10-9 14:47:32

实在无法理解下面的宏定义:
#define USBx_INEP(i)    ((USB_OTG_INEndpointTypeDef *)((uint32_t)USBx + USB_OTG_IN_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE))      
#define USBx_OUTEP(i)   ((USB_OTG_OUTEndpointTypeDef *)((uint32_t)USBx + USB_OTG_OUT_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE))
USBx都没定义怎么就编译通过了呢?想不通?

lqh-414236 发表于 2016-10-10 15:34:55

#define USBx_INEP(i)    ((USB_OTG_INEndpointTypeDef *)((uint32_t)USBx + USB_OTG_IN_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE))      
#define USBx_OUTEP(i)   ((USB_OTG_OUTEndpointTypeDef *)((uint32_t)USBx + USB_OTG_OUT_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE))
这些宏,用之前必须定义USBx这变量!!!

STM23F2xx官方demo有问题,经修改后,使用fs做键盘已经成功,还差HS!暂时还没调通。:dizzy:
页: [1] 2
查看完整版本: STM32F205 的HS USB 做device使用是否要接PHY?