初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2016-10-5
- 在线时间
- 14 小时
|
发表于 2016-11-4 15:20:16
|
显示全部楼层
要想不断电实现USB重连接,需要将 USB 的 IO 先拉低一段时间,然后再拉高(外部上拉电阻)。我的做法是:
RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_OTG_FS,ENABLE); // 失能 OTG 时钟以使 IO 可操作
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 使能 GPIOA 时钟
//GPIOA11,A12初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_11 | GPIO_Pin_12); //将 USB 口拉低
………………延时,然后
// 使能 OTG 时钟以使 USB 可用
RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_OTG_FS,DISABLE);
………………然后,USB 函数初始化。它会自己重置 IO。
这样,PC 就能重新识别到设备了。 |
|