解决方法:
在USB初始化前强制USB时钟复位。
void USB_Disconnected(void) {
__HAL_RCC_USB_FORCE_RESET();
HAL_Delay(200);
__HAL_RCC_USB_RELEASE_RESET();
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_Initure.Pin = GPIO_PIN_11 | GPIO_PIN_12;
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Initure.Pull = GPIO_PULLDOWN;
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_Initure);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
HAL_Delay(300);
}
再USB初始化之前,执行一下这些就行了,相当于告诉电脑断开链接,
不同芯片、函数库之间,时钟的复位可能不同,但大体差不多
__HAL_RCC_USB_FORCE_RESET();
__HAL_RCC_USB_RELEASE_RESET();
我已经试过,STM32F429,STM32F303,STM32F205,STM32F105,STM32F103,STM32F042等等,产品级
解决问题了好开心,好开心!!