我来帮忙贴出来楼主的主函数。
-----------------------------------------------
- #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);
- }
- }
|