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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版