我来帮忙贴出来楼主的主函数。
-----------------------------------------------
#include "stm32f4xx.h"
#include "delay.h"
#include "USART2.h"
#include "usbh_usr.h"
#include "string.h"
USBH_HOST USB_Host;
USB_OTG_CORE_HANDLE USB_OTG_Core_dev;
extern HID_Machine_TypeDef HID_Machine;
//HID重新连接
void USBH_HID_Reconnect(void)
{
//关闭之前的连接
USBH_DeInit(&USB_OTG_Core_dev,&USB_Host); //复位USB HOST
USB_OTG_StopHost(&USB_OTG_Core_dev); //停止USBhost
if(USB_Host.usr_cb->DeviceDisconnected) //存在,才禁止
{
USB_Host.usr_cb->DeviceDisconnected(); //关闭USB连接
USBH_DeInit(&USB_OTG_Core_dev, &USB_Host);
USB_Host.usr_cb->DeInit();
USB_Host.class_cb->DeInit(&USB_OTG_Core_dev,&USB_Host.device_prop);
}
USB_OTG_DisableGlobalInt(&USB_OTG_Core_dev);//关闭所有中断
//重新复位USB
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS,ENABLE);//USB OTG FS 复位
//delay_ms(5);
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS,DISABLE); //复位结束
memset(&USB_OTG_Core_dev,0,sizeof(USB_OTG_CORE_HANDLE));
memset(&USB_Host,0,sizeof(USB_Host));
//重新连接USB HID设备
USBH_Init(&USB_OTG_Core_dev,USB_OTG_FS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks);
}
int main(void)
{
USART2_Init();
USBH_Init(&USB_OTG_Core_dev,USB_OTG_FS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks);
while(1)
{
USBH_Process(&USB_OTG_Core_dev, &USB_Host);
if(bDeviceState==1)//连接建立了
{
if(USBH_Check_HIDCommDead(&USB_OTG_Core_dev,&HID_Machine))//检测USB HID通信,是否还正常?
{
USBH_HID_Reconnect();//重连
}
}else //连接未建立的时候,检测
{
if(USBH_Check_EnumeDead(&USB_Host)) //检测USB HOST 枚举是否死机了?死机了,则重新初始化
{
USBH_HID_Reconnect();//重连
}
}
delay_ms(5);
}
}
|