NewSistems Опубликовано 30 июня, 2018 Жалоба Поделиться Опубликовано 30 июня, 2018 Добрый день! Взял за основу проект, указанный в данном уроке. Немного адаптировал его под МК STM32F105 и исправил некоторые ошибки. Выложил основную часть проекта скорректированного проекта здесь. Но сейчас выполнение программы останавливается в бесконечном цикле в файле stm32_ub_usb_msc_host.c: USB_MSC_HOST_STATUS_t UB_USB_MSC_HOST_Do(void) { if(USB_MSC_HOST_STATUS!=USB_MSC_DEV_NOT_SUPPORTED) { // когда флешка USB не поддерживается, // функция не будет вызываться USBH_Process(&USB_OTG_Core, &USB_Host); } return(USB_MSC_HOST_STATUS); } В функции USBH_Process() программа ожидает прерывание по вектору OTG_FS_IRQHandler. Чтобы затем перевести состояние переменной USB_MSC_HOST_STATUS в USB_MSC_DEV_CONNECTED. Но прерывания не происходит. Также хотелось бы уточнить, что прерывание ожидается в case HOST_IDLE: void USBH_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost) { volatile USBH_Status status = USBH_FAIL; switch (phost->gState) { case HOST_ISSUE_CORE_RESET : if ( HCD_ResetPort(pdev) == 0) { phost->gState = HOST_IDLE; } break; case HOST_IDLE : if (HCD_IsDeviceConnected(pdev)) { /* Wait for USB Connect Interrupt void USBH_ISR_Connected(void) */ USBH_DeAllocate_AllChannel(pdev); phost->gState = HOST_DEV_ATTACHED; } break; ... В случае если прерывание OTG_FS_IRQHandler произойдет, то host.ConnSts присвоится 1. И тогда программа войдет в case HOST_DEV_ATTACHED. Но пока этого нет. В чем может быть причина? Питание на USB подается. Читать дальше Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.