我要为 STM32F429 探索板开发 USB 全速主机驱动。到目前为止,无论是 MSC 类、HID 类还是厂商类都无法完成枚举,卡住了。
USB 端口是有供电的。我用 CubeMX 生成代码,用 Keil MDK-ARM uVision 5 编译烧录。最初,`usb_core.c`中`USBH_Process()`的主状态机一直卡在 HOST_IDLE。我通过在`USBH_Start()`里添加调用`USBH_LL_Connect()`修复了这一点 ,这个函数似乎能将设备状态置为已连接。我还修改了 HOST_DEV_WAIT_FOR_ATTACHMENT 状态,让它进入 HOST_DEV_ATTACHED,否则会一直卡住。
现在状态机卡在 HOST_DEV_ATTACHED,而且从更底层代码返回的状态全是 USBH_BUSY。
下面是 CubeMX 生成的时钟初始化代码。
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
这个问题已经快让我把头发拔光了,我只想让设备完成枚举VID、PID 等。
|