若使用的是 APM32F107 的 OTG 系列芯片,处理流程会更加复杂。除了调用USB_DeviceReset()函数外,还需对 USB 外设的相关寄存器进行特定配置。
首先,将OTGFSRS[color=rgba(0, 0, 0, 0.85)]寄存器置 1,这一操作可触发 USB 外设的硬件复位流程,使 USB 模块停止当前所有数据传输和处理任务;其次,将OTGFSEN寄存器置 0,关闭 USB 外设的时钟供应,时钟是模块正常工作的时序基础,关闭时钟意味着从根本上切断了 USB 模块的工作能源,使其彻底停止运行,进入低功耗状态。