我正在使用stm32f3发现板。对于我目前的项目,我计划在电路板上编写一个简单的UART程序,我碰巧在互联网上的某个地方读到要使用电路板进行UART与PC通信的用户USB'必须使用。
我的问题如下
P.S我已经安装了ST网站上所有必要的驱动程序,并且在使用ST-Link界面时可以完美地工作。董事会的一部分
答案 0 :(得分:1)
几周前我开始使用STM32F3迪斯科舞厅。用户USB的事情有点棘手。 为了弄清楚:电路板有2个USB端口。
所以你可以做的是配置你的STM32来实现CDC over USB。安装Windows驱动程序(自动或从ST,取决于操作系统版本),您应该在设备管理器中获得虚拟COM端口。如果您没有驱动程序,您还会获得一个标记为虚拟COM端口但带有黄色感叹号的设备。
所以,如果我对你提出问题,这就是你要做的事情吗?然后是,"连接USER USB"是正确的。不,你不需要扩展板。
如何解决?这取决于: 您是否已将设备管理器中的设备视为通信设备或串行接口?然后只有ST的CDC驱动程序丢失。
或者你得到一个"未知设备"在你的设备管理器?这就是我的经历。
现在Windows应该枚举设备并为您提供虚拟COM端口。实际上你应该得到其中两个:一个" ST ... STLink虚拟COM端口"和一个" ST ...虚拟COM端口"。第二秒是你要找的那个。
我希望这就是你的问题的答案。
答案 1 :(得分:0)
感谢帖子,有同样的问题,这是我添加的内容 方法:通过改变输入到输出,强制它为零并在大约1秒钟后重新启用它来以编程方式关闭USB线 还可以使用ST USB Libs断电和开机
<小时/>
// Force Re-Enumeration by the USB Host
//
int aux_retrigger_usb()
{
GPIO_InitTypeDef GPIO_InitStructure;
// ST USB Function
PowerOff();
// Program Pin 12 USB_DP from Input to Output
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Set USB_DP to 0
GPIOA->BRR |= GPIO_Pin_12 ;
// Wait for for minimum 32* 50msec , 1,6 secs
while(tim3_cnt%32!=0) ; while(tim3_cnt%32!=31) ;
// ST USB Functions
PowerOn();
USB_Init();
Virtual_Com_Port_Reset() ;
// Program Pin 12 USB_DP from Output to input
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
return 1 ;
}
所以基本上为了避免上电竞争状态,可以对端口进行编程 先输出然后在1秒后释放。