打印
[STM32F4]

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

[复制链接]
1439|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2019-10-13 10:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

stm32F4有两个USB的OTG,其中的USB OTG HS在不外接PHY的情况下可以当FS(全速)使用吗?

使用特权

评论回复
沙发
kangzj|  楼主 | 2019-10-13 10:45 | 只看该作者
由于USB OTG FS口被占用,所以想用USB OTG HS口,有没有这样用过的同学?

使用特权

评论回复
板凳
gongche| | 2019-10-13 10:51 | 只看该作者
相关代码看看

使用特权

评论回复
地板
kangzj|  楼主 | 2019-10-13 11:35 | 只看该作者

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高手指点。

使用特权

评论回复
5
huanghuac| | 2019-10-13 11:43 | 只看该作者

使用特权

评论回复
6
kangzj|  楼主 | 2019-10-13 11:46 | 只看该作者
问题已解决,之前的初始化代码有问题,正确的代码如下:
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了。

使用特权

评论回复
7
chenho| | 2019-10-13 11:49 | 只看该作者
请问,我在配置中,没有找到GPIO_InitStruct.Alternate这个配置啊,我的GPIO的结构体中没有Alternate这一项啊,怎么回事呢

使用特权

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

使用特权

评论回复
9
bqyj| | 2019-10-13 12:04 | 只看该作者
兄弟,我按照你的配置B14,B15将我的stm32作为dev,但是主机还是识别不了,而且我的中断都没有进,但是用A11,A12是可以的

使用特权

评论回复
10
tian111| | 2019-10-13 12:07 | 只看该作者
在usb_conf.h头文件中将#define VBUS_SENSING_ENABLED注释掉即可

使用特权

评论回复
11
chenho| | 2019-10-13 12:11 | 只看该作者
简单的理解就是不用VBUS功能,具体原理没去深入研究。

使用特权

评论回复
12
chenho| | 2019-10-13 12:13 | 只看该作者
关于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).

使用特权

评论回复
13
songqian17| | 2019-10-13 12:48 | 只看该作者


使用特权

评论回复
14
tian111| | 2019-10-13 12:51 | 只看该作者

使用特权

评论回复
15
tian111| | 2019-10-13 12:51 | 只看该作者

使用特权

评论回复
16
chenho| | 2019-10-13 12:55 | 只看该作者
求助:stm32f429探索板用sub tog  fs 读盘 用的引脚是pb14,pb15 ;而stm32cubemx 设置sub tog fs 的引脚却是pa11和pa12 为什么?

使用特权

评论回复
17
bqyj| | 2019-10-13 12:58 | 只看该作者
我在移植STM32 Linux时也在这里绕了好久。

使用特权

评论回复
18
gongche| | 2019-10-13 13:01 | 只看该作者
差不多是这个样子

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝