打印
[STM32F4]

可以当FS使用吗?

[复制链接]
796|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32F429的USB OTG HS在不外接PHY的情况下可以当FS使用吗?

使用特权

评论回复
沙发
stly| | 2021-11-13 16:56 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
liliang9554|  楼主 | 2021-11-13 17:03 | 只看该作者
由于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高手指点。

使用特权

评论回复
地板
jiajs| | 2021-11-13 17:06 | 只看该作者

使用特权

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

使用特权

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

使用特权

评论回复
7
dengdc| | 2021-11-13 17:12 | 只看该作者
找到了复用的函数参数了,现在已经复用为OTG_HS_FS,两个宏SE_USB_OTG_HS,USE_EMBEDDED_PHY也定义了,怎么还是不能识别我的usb鼠标呢。

使用特权

评论回复
8
dengdc| | 2021-11-13 17:14 | 只看该作者
我的硬件电路上没有设计PB13开启USB HOST电源供电,但是我的另外PA11、PA12端口接了USB数据线到电脑端,已经有5V供电了

使用特权

评论回复
9
wangzsa| | 2021-11-13 17:17 | 只看该作者
不会是硬件没有设计PB13的原因吧?

使用特权

评论回复
10
yszong| | 2021-11-13 17:19 | 只看该作者
我按照你的配置B14,B15将我的stm32作为dev,但是主机还是识别不了

使用特权

评论回复
11
yszong| | 2021-11-13 17:21 | 只看该作者
而且我的中断都没有进,但是用A11,A12是可以的

使用特权

评论回复
12
dengdc| | 2021-11-13 17:23 | 只看该作者
========================= 摘自网络供参考 =============================

最近在使用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).


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

使用特权

评论回复
13
dengdc| | 2021-11-13 17:25 | 只看该作者

使用特权

评论回复
14
dengdc| | 2021-11-13 17:27 | 只看该作者

使用特权

评论回复
15
dengdc| | 2021-11-13 17:29 | 只看该作者

使用特权

评论回复
16
dengdc| | 2021-11-13 17:34 | 只看该作者

使用特权

评论回复
17
dengdc| | 2021-11-13 17:37 | 只看该作者

使用特权

评论回复
18
huangchui| | 2021-11-13 17:39 | 只看该作者
求助:stm32f429探索板用sub tog  fs 读盘 用的引脚是pb14,pb15 ;而stm32cubemx 设置sub tog fs 的引脚却是pa11和pa12 为什么?

使用特权

评论回复
19
zhenykun| | 2021-11-13 17:42 | 只看该作者
我在移植STM32 Linux时也在这里绕了好久。

使用特权

评论回复
20
stly| | 2021-11-13 17:44 | 只看该作者
请问能把工程传上来让大家验证一下吗?

使用特权

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

本版积分规则

950

主题

11568

帖子

6

粉丝