ST意法半导体
直播中

tr4578

8年用户 937经验值
擅长:模拟技术
私信 关注
[问答]

有没有人让USB在STM32L552上作为VCP运行?

有没有人让 USB 在 STM32L552 上作为 VCP 运行?
我们在通过 VCP 将 USB 连接到 PC 的情况下运行系统时遇到问题。我们使用 MXCube 5.6.1 版并使用 USB VCP 创建了一个小项目。VDD-USB Pin接3.3V,系统启动,但PC端检测不到USB。

我们之前将 USB 作为 VCP 在其他几个处理器(STM32F4、STM32F7、STM32H7)上工作,没有任何问题。但是在 L552 上肯定有一些不同的东西在使用相同的固件处理和硬件布局时不起作用。
  


回帖(1)

江璐

2022-12-28 16:27:37
我们为任何感兴趣的人提供了一个可行的解决方案:

硬件条件是:


  • VDDUSB 引脚连接到 3.3V 电源(固定电源)
  • USB-Mode is FS Device only,没有OTG,没有USB-C


在 CubeMX 配置中执行以下操作:


  • 在 NVIC 配置中为 PVD/PVM1/...激活中断
  • 在项目管理器的高级设置页面上,为 MX_USB_Device_Init 激活“不生成函数调用”
  • 在 USB 设置中选择“不支持链接电源管理”



1) 上电时,在 GPIOS 等初始化完成后,调用以下例程“DoInitUSB”,它为 PVM1(用于 USB)配置 PVM(外设电压监控)中断,如下所示:

无效 DoInitUSB(无效)
{
   static int bInit = TRUE;

   PWR_PVMTypeDef sConfigPVM;
   sConfigPVM.PVMType = PWR_PVM_1;
   sConfigPVM.Mode = PVM_MODE_IT | PVM_RISING_EDGE | PVM_FALLING_EDGE;// 创建电源检测中断

   HAL_PWREx_ConfigPVM(&sConfigPVM);

   //激活周边电压监测
    HAL_PWREx_EnablePVM1();

   // 激活 USB 电源
   HAL_PWREx_EnableVddUSB();

   // 等待 2 毫秒
   平行延迟(PARA_DELAY_1MS);
   平行延迟(PARA_DELAY_1MS);

   //检查USB插头是否连接:
   if (READ_BIT(PWR->SR2, PWR_SR2_PVMO1) == 0) // 电源高于 1.2 伏
   {
      HAL_PWREx_EnableVddUSB();
      如果(bInit)      
      {
         MX_USB_Device_Init();
         b初始化=假;// 上电后只做一次
      }
       bPowerIsOn = TRUE;
   }
   别的
   {
      HAL_PWREx_DisableVddUSB();
       bPowerIsOn = 假;
   }

}

2) 包括以下回调 fpr PVM 中断:

无效 HAL_PWREx_PVM1Callback()
{
   if (READ_BIT(PWR->SR2, PWR_SR2_PVMO1) == 0) // 电源高于 1.2 伏
   {
      HAL_PWREx_EnableVddUSB();
       如果(bInit)
      {
         MX_USB_Device_Init();
         b初始化=假;
      }
      bPowerIsOn = TRUE;
   }
   else // 电源低于 1.2 伏
   {
      HAL_PWREx_DisableVddUSB();
       bPowerIsOn = 假;
   }

}

我希望这个设置可以帮助其他人!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分