Embedded stm32f3';用户USB';未检测到

Embedded stm32f3';用户USB';未检测到,embedded,stm32,Embedded,Stm32,我在stm32f3探索板工作。对于我目前的项目,我计划在电路板上编写一个简单的UART程序,我碰巧在互联网上的某个地方读到,要使用电路板与PC进行UART通信,必须使用“用户USB” 我的问题如下 首先,当我使用“用户USB”将主板连接到PC时。电脑拒绝识别电路板。(使用的F.Y.I-OS为64位windows 7)。即使我更新了驱动程序,这个问题仍然存在!如何解决这个问题 “连接用户USB”部分是否正确?因为我看不到板上有RS232芯片 我应该使用附加板吗 另外,我已经从ST网站安装了所有

我在stm32f3探索板工作。对于我目前的项目,我计划在电路板上编写一个简单的UART程序,我碰巧在互联网上的某个地方读到,要使用电路板与PC进行UART通信,必须使用“用户USB”

我的问题如下

  • 首先,当我使用“用户USB”将主板连接到PC时。电脑拒绝识别电路板。(使用的F.Y.I-OS为64位windows 7)。即使我更新了驱动程序,这个问题仍然存在!如何解决这个问题
  • “连接用户USB”部分是否正确?因为我看不到板上有RS232芯片
  • 我应该使用附加板吗

另外,我已经从ST网站安装了所有必要的驱动程序,并且在使用董事会的“ST链接接口”部分时工作正常。几周前,我开始与STM32F3迪斯科合作。用户USB的事情有点棘手。 要弄清楚:该板有2个USB端口

  • 一个主要用于编程和调试。它连接到第二个ST芯片,该芯片用作编程适配器
  • 秒(称为用户USB)连接到您编程的STM32F303芯片
因此,您可以做的是配置STM32以实现一个。安装windows驱动程序后(自动或从ST,取决于操作系统版本),您应该在设备管理器中获得一个虚拟com端口。如果您没有驱动程序,您也会得到一个标记为虚拟com端口但带有黄色感叹号的设备

所以如果我没弄错你的问题,这就是你想要做的?那么是的,“连接用户USB”是正确的。不,你不需要扩展板

如何解决这个问题?这取决于: 您是否已经将设备管理器中的设备视为通信设备或串行接口或其他内容?那么只有来自ST的CDC司机失踪了

或者您的设备管理器中是否有“未知设备”?这就是我的经历

  • 在STM32CubeMX中,您需要启用USB设备(外围端口->USB)
  • 在STM32CubeMX中,您需要选择USB堆栈(中间件->USB\U设备->通信设备类)
  • 生成代码。如果您使用HSI作为时钟源,CubeMX将生成一条错误消息,您现在可以忽略。对于真正的产品,您应该使用外部时钟
  • 请注意,这里有。如果选择HSE作为时钟输入源,代码生成器生成的代码可能无法工作。即使返回HSI,错误仍然存在
  • 编译并运行代码。您可能需要重置电路板,卸下两个USB插头
  • Windows现在应该可以检测到该板
  • 额外的问题:董事会是。。。好。棘手的如果您只将用户USB插入PC,它应该可以工作,但Windows也可能会通知您,由于枚举失败,您的设备未知
  • 再次拔下塞子。现在,首先插入另一个ST-LINK USB,为电路板供电。等待1-2秒。现在插入用户USB。似乎有一个启动问题。仅将用户USB用于电源和CDC似乎在引导和USB之间的竞争条件下运行,USB枚举失败。首先给电路板通电,然后插上电源可消除这种竞争状况(至少在我的电路板上)
  • 现在Windows应该枚举设备并为您提供一个虚拟com端口。实际上,您应该得到其中两个:一个“ST…STLink虚拟COM端口”和一个“ST…虚拟COM端口”。秒一就是你要找的


    我希望这就是你的问题的答案。

    谢谢你的帖子,我有同样的问题,这里是我补充的 方法:通过将输入更改为输出,以编程方式关闭USB线路,强制其归零,并在大约1秒后重新启用 还使用ST USB Libs的电源关闭和打开

    因此,基本上为了避免通电竞争条件,可以对端口进行编程
    首先是输出,然后在1秒后释放。

    从哪里获得有关“用户USB”的信息?也许他们认为你需要自己的转换器。
    // 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 ;
    }