我用的是神州三号开发板子,板子的USB模块原理图为:
配置端口G的11号引脚为usb的使能引脚,按理来说应该是开漏输出的(看了很多的修改代码都是这个模式),不过就是不能使能usb,只能配置成推挽的才行,不知道为什么,不知道有没有人知道这个,求解答?
GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //是普通的推挽输出,而不是开漏输出 GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);
由于是普通的推挽输出,所以只有输出高电平才能使能usb,所以使能usb的函数应该修改为:
void USB_Cable_Config (FunctionalState NewState) { if (NewState != DISABLE) GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN); //为1是高电平 else GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN); //为0是低电平 }
这个问题让我明白了,只有很好的看电路图,才能理解和找出很的问题。
具体其它的修改看以参考http://blog.csdn.net/cy757/article/details/5117610这篇文章,把程序下到板子后就可以看到pc上提示开始安装驱动程序了,说明我们的USB设备可以被pc检测到了。