stm32f3 'USER USB' 未检测到
Posted
技术标签:
【中文标题】stm32f3 \'USER USB\' 未检测到【英文标题】:stm32f3 'USER USB' not detectedstm32f3 'USER USB' 未检测到 【发布时间】:2016-05-15 02:02:33 【问题描述】:我正在研究 stm32f3 探索板。对于我目前的项目,我计划在板上编写一个简单的 UART 程序,我碰巧在互联网上的某个地方读到,要使用该板与 PC 进行 UART 通信,必须使用“USER USB”。
我的问题如下
首先,当我使用“用户 USB”将开发板连接到 PC 时。 PC拒绝识别板。(F.Y.I-使用的操作系统是windows 7 64bit)。即使我更新驱动程序后,此问题仍然存在!如何解决这个问题? “连接用户 USB”部分是否正确?因为我在板上看不到任何 RS232 芯片 我应该在机上使用插件吗?P.S 我已经从 ST 网站安装了所有必要的驱动程序,并且在使用电路板的“ST-Link 接口”部分时可以完美运行
【问题讨论】:
您从哪里获得有关“USER USB”的信息?可能他们认为您需要自己的UART to USB 转换器。 【参考方案1】:几周前我开始使用 STM32F3 迪斯科。用户 USB 的东西有点棘手。 为了清楚起见:该板有 2 个 USB 端口。
一个主要用于编程和调试。它连接到第二个 ST 芯片,用作编程适配器。 秒(称为USER USB)连接到你编程的STM32F303芯片所以你可以做的是配置你的STM32来实现一个CDC over USB。安装 Windows 驱动程序(自动或来自 ST,取决于操作系统版本)后,您应该在设备管理器中获得一个虚拟 com 端口。如果您没有驱动程序,您还会得到一个标记为虚拟 com 端口但带有黄色感叹号的设备。
所以,如果我回答你的问题是正确的,这就是你想要做的吗?那么是的,“连接用户USB”是正确的。不,您不需要扩展板。
如何解决?这取决于: 您是否已经在设备管理器中将设备视为通信设备或串行接口或其他东西?那么只有 ST 的 CDC 驱动丢失了。
或者您的设备管理器中是否出现“未知设备”?这就是我的经历。
-
在 STM32CubeMX 中,您需要启用 USB 设备(Peripehrals->USB)
在 STM32CubeMX 中,您需要选择 USB 堆栈(MiddleWares->USB_DEVICE->Communication Device Class)
生成代码。如果您使用 HSI 作为时钟源,CubeMX 将生成一条错误消息,您现在可以忽略。对于真正的产品,您应该使用外部时钟。
注意那里有is a bug in CubeMX version 4.20。如果您选择 HSE 作为时钟输入源,代码生成器生成的代码可能无法正常工作。即使你回到恒指,错误仍然存在。
编译运行代码。您可能需要重置主板,移除两个 USB 插头
Windows 现在应该检测到该板。
额外的问题:电路板……很好。棘手。如果您只将 USER USB 插入您的 PC,它应该工作,但 Windows 也可能会通知您您有一个未知设备,因为枚举失败。
再次拔下插头。现在,首先插入另一个 ST-LINK USB 以给开发板供电。等待 1-2 秒。现在插入 USER USB。似乎有一个启动问题。仅使用 USER USB 供电,CDC 似乎在启动和 USB 之间的竞争条件下运行,并且 USB 枚举失败。先给电路板供电,然后再插上电源可以消除这种竞争条件(至少在我的电路板上)
现在 Windows 应该枚举设备并为您提供一个虚拟 com 端口。实际上你应该得到其中两个:一个“ST...STLink Virtual COM Port”和一个“ST...Virtual COM Port”。第二个就是你要找的那个。
我希望这就是你所提问题的答案。
【讨论】:
【参考方案2】:谢谢你的帖子,有同样的问题,这是我添加的 方法:通过将输入更改为输出以编程方式关闭 USB 线路,强制其为零并在大约 1 秒后重新启用它们 还使用了 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 秒后释放。
【讨论】:
以上是关于stm32f3 'USER USB' 未检测到的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 STM32F3 上使用 DMA 通过 SPI 传输无限数据?