你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
lqh-414236 提问时间:2016-9-29 11:33 /
STM32F205 的HS USB 做device使用是否要接PHY?
收藏 1 评论19 发布时间:2016-9-29 11:33

举报

19个回答
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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

stary666 回答时间:2016-9-29 12:06:58
肯定要加的,,,,,,,,
st.png
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.

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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!暂时还没调通。
12下一页
关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版