打印
[STM32F4]

stm32F4的USB的HS工作在FS模式

[复制链接]
6990|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
taohao515|  楼主 | 2017-2-23 22:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在自己画了一块stm32F4的板子,板子上有USB主机(host)接口、USB从机(device)接口,让stm32F4的USB同时工作在主机模式和从机模式,PA11的OTG_FS_DM接从机usb的D-脚,PA12的OTG_FS_DP接从机usb的D+脚,此USB接口连接到电脑上,让stm32工作在从机模式;PB14的OTG_HS_DM接主机usb的D-脚,PB15的OTG_HS_DP接主机usb的D+脚,此USB接口连接usb hid 设备(如鼠标),让stm32工作在主机模式。现在我的从机模式PA11、PA12工作正常,但是主机模式PB14、PB15不能正常工作,插上鼠标后不能枚举出鼠标。查资料,USB OTG HS在不外接PHY的情况下可以当FS(全速)使用,于是我再定义两个宏,USE_USB_OTG_HS,USE_EMBEDDED_PHY,并且在usbh_conf.h里的#define USBH_MSC_MPS_SIZE 定义成64(HS模式是512,FS模式是64),怎么还是不能识别出鼠标设备,请问哪里的配置不对,或者我的思路不对吗,求USB大神!
相应的配置代码如下:

USBH_Init(&USB_OTG_Core_dev,USB_OTG_HS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks);

//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE);//使能USB OTG时钟      FS改成HS      
  //GPIOB14,B15设置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;//PB14、15复用功能输出        
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
        
        
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//PB13推挽输出               
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出功能
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
        
  USB_HOST_PWRCTRL=1;                        //开启USB HOST电源供电

        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG_HS_FS);//PB14,AF12(USB) //GPIO_AF_OTG_FS改成GPIO_AF_OTG_HS_FS
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG_HS_FS);//PB15,AF12(USB) //GPIO_AF_OTG_FS改成GPIO_AF_OTG_HS_FS
}
//USB OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn;                                            //FS改成HS
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;//子优先级3
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
  NVIC_Init(&NVIC_InitStructure);//配置  
}
沙发
2714728270| | 2018-8-14 15:35 | 只看该作者
您好,,请问您的HS当做FS用可以识别USB了吗,我也遇到这个问题了,也识别不了,请问您是怎么弄的

使用特权

评论回复
板凳
keaibukelian| | 2018-8-17 09:43 | 只看该作者
卡死在那里了

使用特权

评论回复
地板
bjesz| | 2018-11-30 11:28 | 只看该作者
复制
void OTG_FS_IRQHandler(void)
{
          USBH_OTG_ISR_Handler(&USB_OTG_Core);
}
成新的
void OTG_HS_IRQHandler(void)
{
          USBH_OTG_ISR_Handler(&USB_OTG_Core);
}


原由:原来的库只有支持FS的中断例程,没有支持HS的例程。改了后,可以看到U盘拔插有动作。

使用特权

评论回复
评论
cuitstudent 2019-4-1 16:44 回复TA
我想请问下 我这边的这个项目 看不到任何效果 已经改了这些 还是进不去中断 
5
超级无敌磊果果| | 2021-3-24 21:25 | 只看该作者
我的也是,使用cubemx配置的工程,硬件使用的是HS引脚,软件配置成FS,使用内部的PHY,但是发现初始化的时候就卡死了,调用了HAL_PCD_Init()初始化usb直接进入HAL_Error

使用特权

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

本版积分规则

1

主题

9

帖子

0

粉丝