打印
[学习笔记]

FAQ0094 AT32 USB不断开USB设备重新枚举操作

[复制链接]
671|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
略略u|  楼主 | 2021-2-28 23:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
略略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 | 只看该作者
Power_Off ();
Delay_ms(3000);
Power_On ();
Delay_ms(3000);

RESULT Power_On(void)
{
  u16 wRegVal;
  pInformation->Current_Configuration = 0;
  /*** CNTR_PWDN = 0 ***/
  wRegVal = CTRL_FRST;
  _SetCTRL(wRegVal);
  /* USB interrupts initialization */
  /* clear pending interrupts */
  _SetINTSTS(0);
  wInterrupt_Mask = IMR_MSK;
  /* set interrupts mask */
  _SetCTRL(wInterrupt_Mask);
  bDeviceState = UNCONNECTED;
}

RESULT Power_Off ()
{
  _SetCTRL(CTRL_FRST);
  /* clear interrupt status register */
  _SetINTSTS(0);
  /* Disable the Pull-Up*/
  //USB_Cable_Config(DISABLE);//
/* switch-off device */
_SetCTRL(CTRL_FRST + CTRL_PDWN);
}

使用特权

评论回复
5
略略u|  楼主 | 2021-2-28 23:35 | 只看该作者
2. AT32F403A 控制方式
USB SOF控制寄存器( USB_SOFEN) 地址偏移: 0x60

使用特权

评论回复
6
略略u|  楼主 | 2021-2-28 23:35 | 只看该作者

使用特权

评论回复
7
略略u|  楼主 | 2021-2-28 23:36 | 只看该作者
直接在USB 初始化后 while ( 1 )调用, 在电脑上可以看到 USB 会有不断枚举过程

使用特权

评论回复
8
略略u|  楼主 | 2021-2-28 23:37 | 只看该作者
Power_Off ();
Delay_ms(3000);
Power_On ();
Delay_ms(3000);

#define SOFEN ((__IO unsigned *)(RegBase + 0x60))
#define _SetSOFEN(wRegValue) (*SOFEN = (uint16_t)wRegValue)
void Power_On(void)
{
  u16 wRegVal;
  wRegVal = 0x0000;
  _SetSOFEN(wRegVal);
}

void Power_Off(void)
{
  u16 wRegVal;
  wRegVal = 0x0002;
  _SetSOFEN(wRegVal);
}

使用特权

评论回复
9
略略u|  楼主 | 2021-2-28 23:37 | 只看该作者
3. AT32F415 控制方式
OTG_FS设备控制寄存器(OTG_FS_DCTL) 地址偏移: 0x804  

88328603bb8c24d280.png (116.58 KB )

88328603bb8c24d280.png

使用特权

评论回复
10
略略u|  楼主 | 2021-2-28 23:38 | 只看该作者

使用特权

评论回复
11
略略u|  楼主 | 2021-2-28 23:39 | 只看该作者
直接在USB 初始化后 while ( 1 )调用, 在电脑上可以看到 USB 会有不断枚举过程

使用特权

评论回复
12
略略u|  楼主 | 2021-2-28 23:40 | 只看该作者
Power_Off (&USB_OTG_dev);
Delay_ms(3000);
Power_On (&USB_OTG_dev);
Delay_ms(3000);

void Power_On(USB_OTG_CORE_HANDLE *pusbdev)
{
  USB_OTG_DCTL_Type dctl_cfg;
  dctl_cfg.u32val = 0;
  dctl_cfg.b.sftdis = 0;
  USB_OTG_WRITE_R32 (&pusbdev->regs.DREGS->DCTRL, dctl_cfg.u32val);
}

void Power_Off(USB_OTG_CORE_HANDLE *pusbdev)
{
  USB_OTG_DCTL_Type dctl_cfg;
  dctl_cfg.u32val = 0;
  dctl_cfg.b.sftdis = 1;
  USB_OTG_WRITE_R32 (&pusbdev->regs.DREGS->DCTRL, dctl_cfg.u32val);
}  

使用特权

评论回复
13
略略u|  楼主 | 2021-2-28 23:42 | 只看该作者
FAQ0094_USB_device_reenumerate_when_USB_not_disconnected_CH_V1.0.0.pdf (326.94 KB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

597

帖子

0

粉丝