打印
[STM32F4]

STM32F429的USB OTG HS在不外接PHY的情况下可以当FS使用吗?

[复制链接]
10077|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32F4有两个USB的OTG,其中的USB OTG HS在不外接PHY的情况下可以当FS(全速)使用吗?
由于USB OTG FS口被占用,所以想用USB OTG HS口,有没有这样用过的同学?
下面是我的初始化相关代码:

USBH_Init(&USB_OTG_Core,USB_OTG_HS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_cb);

//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
     GPIO_InitTypeDef  GPIO_InitStruct;
    __HAL_RCC_GPIOB_CLK_ENABLE();                   //使能GPIOB时钟
    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();              //使能OTG HS时钟

    //配置PB14,15
    GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;    //PB 14.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;     //复用为OTG FS
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);         //初始化

        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;          //上拉
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);         //初始化
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);//开启USB HOST电源供电
}

//USB OTG 中断设置,开启USB HS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
    HAL_NVIC_SetPriority(OTG_HS_IRQn,0,3);          //抢占优先级0,子优先级3
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);                //使能OTG USB FS中断  
}


目前是插入U盘完全没反应。求USB高手指点。
沙发
zhanzr21| | 2016-12-8 18:20 | 只看该作者
可以,请看:


使用特权

评论回复
板凳
309976659|  楼主 | 2016-12-13 14:09 | 只看该作者
问题已解决,之前的初始化代码有问题,正确的代码如下:
USBH_Init(&USB_OTG_Core,USB_OTG_HS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_cb);

//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
     GPIO_InitTypeDef  GPIO_InitStruct;
    __HAL_RCC_GPIOB_CLK_ENABLE();                   //使能GPIOB时钟
    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();              //使能OTG HS时钟

    //配置PB14,15
    GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;    //PB 14.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;  //复用为OTG HS FS
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);         //初始化

        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;          //上拉
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);         //初始化
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);//开启USB HOST电源供电
}

//USB OTG 中断设置,开启USB HS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
    HAL_NVIC_SetPriority(OTG_HS_IRQn,0,3);          //抢占优先级0,子优先级3
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);                //使能OTG USB FS中断  
}
此外在定义两个宏,USE_USB_OTG_HS,USE_EMBEDDED_PHY就一切OK了。


使用特权

评论回复
地板
taohao515| | 2017-2-23 16:05 | 只看该作者
309976659 发表于 2016-12-13 14:09
问题已解决,之前的初始化代码有问题,正确的代码如下:
USBH_Init(&USB_OTG_Core,USB_OTG_HS_CORE_ID,&USB_ ...

请问,我在配置中,没有找到GPIO_InitStruct.Alternate这个配置啊,我的GPIO的结构体中没有Alternate这一项啊,怎么回事呢

使用特权

评论回复
5
taohao515| | 2017-2-23 16:40 | 只看该作者
309976659 发表于 2016-12-13 14:09
问题已解决,之前的初始化代码有问题,正确的代码如下:
USBH_Init(&USB_OTG_Core,USB_OTG_HS_CORE_ID,&USB_ ...

找到了复用的函数参数了,现在已经复用为OTG_HS_FS,两个宏SE_USB_OTG_HS,USE_EMBEDDED_PHY也定义了,怎么还是不能识别我的usb鼠标呢。我的硬件电路上没有设计PB13开启USB HOST电源供电,但是我的另外PA11、PA12端口接了USB数据线到电脑端,已经有5V供电了,不会是硬件没有设计PB13的原因吧?

使用特权

评论回复
6
zm0502| | 2017-3-31 18:21 | 只看该作者
兄弟,我按照你的配置B14,B15将我的stm32作为dev,但是主机还是识别不了,而且我的中断都没有进,但是用A11,A12是可以的,你能加一下我的qq吗,请教一下你,9174422041

使用特权

评论回复
7
STARM| | 2017-3-31 23:29 | 只看该作者


========================= 摘自网络供参考 =============================

最近在使用STM32F205芯片做USB相关程序开发,考虑到205芯片内部有USB上拉电阻,
所以在USB接口就只接了DM和DP两根线,当然VBUS也是悬空的,
用官方例程发现,程序无**常枚举,查阅相关资料,终于解决该问题,解决办法:

在usb_conf.h头文件中将#define VBUS_SENSING_ENABLED注释掉即可,
简单的理解就是不用VBUS功能,具体原理没去深入研究。

关于VBUS的连接,最清晰的解释在参考手册内,如下:

The VBUS pin can be freed by disabling the VBUS sensing option.
This is done by setting the NOVBUSSENS bit in the OTG_FS_GCCFG register.
In this case the VBUS is considered internally to be always at VBUS valid level (5 V).


========================= 摘自网络供参考 =============================

使用特权

评论回复
8
STARM| | 2017-3-31 23:34 | 只看该作者



使用特权

评论回复
9
STARM| | 2017-3-31 23:34 | 只看该作者

使用特权

评论回复
10
STARM| | 2017-3-31 23:40 | 只看该作者

使用特权

评论回复
11
aslgyan| | 2017-8-5 09:53 | 只看该作者
求助:stm32f429探索板用sub tog  fs 读盘 用的引脚是pb14,pb15 ;而stm32cubemx 设置sub tog fs 的引脚却是pa11和pa12 为什么?

使用特权

评论回复
12
yuchl| | 2018-3-21 10:50 | 只看该作者

使用特权

评论回复
13
不爱说话| | 2018-3-28 15:26 | 只看该作者
我在移植STM32 Linux时也在这里绕了好久。

使用特权

评论回复
14
zhjerry| | 2018-3-28 17:47 | 只看该作者
挂羊头卖狗肉就是这个OTG-HS。都到M4,M7的级别,别人都是真正的HS只有STM32还上一个假HS(除非你外加一片PHY,占用管脚和PCB面积)。汗!

使用特权

评论回复
15
pjzmj2012| | 2019-12-9 12:34 | 只看该作者
309976659 发表于 2016-12-13 14:09
问题已解决,之前的初始化代码有问题,正确的代码如下:
USBH_Init(&USB_OTG_Core,USB_OTG_HS_CORE_ID,&USB_ ...

请问能把工程传上来让大家验证一下吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

27

帖子

2

粉丝