问题已解决,之前的初始化代码有问题,正确的代码如下:
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了。
|