[学习笔记] FAQ0094 AT32 USB不断开USB设备重新枚举操作

[复制链接]
1047|12
 楼主| 略略u 发表于 2021-2-28 23:29 | 显示全部楼层 |阅读模式
USB 不断开连接, USB 设备重新枚举操作

适用型号: AT32F403, AT32F413, AT32F403A, AT32F415

Questions:USB 不断开连接, USB 设备重新枚举操作
 楼主| 略略u 发表于 2021-2-28 23:30 | 显示全部楼层
Answer:
AT32F403 和 AT32F413, AT32F403A, AT32F415 USB 设备重新枚举控制是不一样的, 以下分别进行介绍
 楼主| 略略u 发表于 2021-2-28 23:31 | 显示全部楼层
1. AT32F403 和 AT32F413 控制方式
直接在USB 初始化后 while ( 1 )中调用, 在电脑上可以看到 USB 会有不断枚举过程
 楼主| 略略u 发表于 2021-2-28 23:33 | 显示全部楼层
  1. Power_Off ();
  2. Delay_ms(3000);
  3. Power_On ();
  4. Delay_ms(3000);

  5. RESULT Power_On(void)
  6. {
  7.   u16 wRegVal;
  8.   pInformation->Current_Configuration = 0;
  9.   /*** CNTR_PWDN = 0 ***/
  10.   wRegVal = CTRL_FRST;
  11.   _SetCTRL(wRegVal);
  12.   /* USB interrupts initialization */
  13.   /* clear pending interrupts */
  14.   _SetINTSTS(0);
  15.   wInterrupt_Mask = IMR_MSK;
  16.   /* set interrupts mask */
  17.   _SetCTRL(wInterrupt_Mask);
  18.   bDeviceState = UNCONNECTED;
  19. }

  20. RESULT Power_Off ()
  21. {
  22.   _SetCTRL(CTRL_FRST);
  23.   /* clear interrupt status register */
  24.   _SetINTSTS(0);
  25.   /* Disable the Pull-Up*/
  26.   //USB_Cable_Config(DISABLE);//
  27. /* switch-off device */
  28. _SetCTRL(CTRL_FRST + CTRL_PDWN);
  29. }
 楼主| 略略u 发表于 2021-2-28 23:35 | 显示全部楼层
2. AT32F403A 控制方式
USB SOF控制寄存器( USB_SOFEN) 地址偏移: 0x60
 楼主| 略略u 发表于 2021-2-28 23:35 | 显示全部楼层
 楼主| 略略u 发表于 2021-2-28 23:36 | 显示全部楼层
直接在USB 初始化后 while ( 1 )调用, 在电脑上可以看到 USB 会有不断枚举过程
 楼主| 略略u 发表于 2021-2-28 23:37 | 显示全部楼层
  1. Power_Off ();
  2. Delay_ms(3000);
  3. Power_On ();
  4. Delay_ms(3000);

  5. #define SOFEN ((__IO unsigned *)(RegBase + 0x60))
  6. #define _SetSOFEN(wRegValue) (*SOFEN = (uint16_t)wRegValue)
  7. void Power_On(void)
  8. {
  9.   u16 wRegVal;
  10.   wRegVal = 0x0000;
  11.   _SetSOFEN(wRegVal);
  12. }

  13. void Power_Off(void)
  14. {
  15.   u16 wRegVal;
  16.   wRegVal = 0x0002;
  17.   _SetSOFEN(wRegVal);
  18. }
 楼主| 略略u 发表于 2021-2-28 23:37 | 显示全部楼层
3. AT32F415 控制方式
OTG_FS设备控制寄存器(OTG_FS_DCTL) 地址偏移: 0x804  
88328603bb8c24d280.png
 楼主| 略略u 发表于 2021-2-28 23:38 | 显示全部楼层
 楼主| 略略u 发表于 2021-2-28 23:39 | 显示全部楼层
直接在USB 初始化后 while ( 1 )调用, 在电脑上可以看到 USB 会有不断枚举过程
 楼主| 略略u 发表于 2021-2-28 23:40 | 显示全部楼层
  1. Power_Off (&USB_OTG_dev);
  2. Delay_ms(3000);
  3. Power_On (&USB_OTG_dev);
  4. Delay_ms(3000);

  5. void Power_On(USB_OTG_CORE_HANDLE *pusbdev)
  6. {
  7.   USB_OTG_DCTL_Type dctl_cfg;
  8.   dctl_cfg.u32val = 0;
  9.   dctl_cfg.b.sftdis = 0;
  10.   USB_OTG_WRITE_R32 (&pusbdev->regs.DREGS->DCTRL, dctl_cfg.u32val);
  11. }

  12. void Power_Off(USB_OTG_CORE_HANDLE *pusbdev)
  13. {
  14.   USB_OTG_DCTL_Type dctl_cfg;
  15.   dctl_cfg.u32val = 0;
  16.   dctl_cfg.b.sftdis = 1;
  17.   USB_OTG_WRITE_R32 (&pusbdev->regs.DREGS->DCTRL, dctl_cfg.u32val);
  18. }  
 楼主| 略略u 发表于 2021-2-28 23:42 | 显示全部楼层
FAQ0094_USB_device_reenumerate_when_USB_not_disconnected_CH_V1.0.0.pdf (326.94 KB, 下载次数: 3)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

666

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部