[APM32F1] 为什么使用了USB STOP功耗降不下去?

[复制链接]
 楼主| Peixu 发表于 2025-1-2 11:05 | 显示全部楼层 |阅读模式
本帖最后由 Peixu 于 2025-6-6 17:46 编辑

在基于 APM32F107 微控制器的项目开发过程中,低功耗性能是许多应用场景重点关注的指标之一。然而,不少开发者在完成 USB 初始化操作后,将系统切换至 STOP 模式时,会遇到功耗异常的问题。即便已对所有 IO 引脚和时钟进行了细致的配置处理,系统整体功耗仍明显高于正常 STOP 模式下的预期值,通常高出 1 毫安以上,这一现象严重影响了产品的能耗表现。


如以下现象所示 使用APM32F107在初始化了 USB 之后进入STOP的时候,就算配置了所有的io和时钟的处理,功耗还是没办法降下去。 比正常的STOP高一点多毫安。
fb8d6b86bcc2da4e8e073cc4a75f53f8

经查阅 APM32F107 的数据手册可知,USB 外设本身存在 1.75mA 的固有功耗,
这一信息为解决该问题指明了方向 —— 系统进入 STOP 模式时,USB 模块并未实现完全关闭,处于持续耗电状态,进而拉高了整体功耗。
要解决这一问题,需从 USB 模块的关闭机制入手,采取针对性措施确保其在 STOP 模式下不再消耗额外电能。​
对于标准的 APM32F107 开发场景,最为关键的解决步骤是在系统进入 STOP 模式前,在程序中加入USB_DeviceReset()函数调用。此函数能够对 USB 设备进行全面复位,切断其与外部设备的数据交互链路,同时关闭内部相关电路,使其进入低功耗状态,从而避免在 STOP 模式下产生不必要的功耗。

如图:查看手册 USB外设是有1.75mA的功耗, 说明USB没有完全关闭。
b0379bc864a10272c1368eb90654e339

若使用的是 APM32F107 的 OTG 系列芯片,处理流程会更加复杂。除了调USB_DeviceReset()函数外,还需对 USB 外设的相关寄存器进行特定配置。


首先,OTGFSRS寄存器置 1,这一操作可触发 USB 外设的硬件复位流程,使 USB 模块停止当前所有数据传输和处理任务;其次,OTGFSEN寄存器置 0,关闭 USB 外设的时钟供应,时钟是模块正常工作的时序基础,关闭时钟意味着从根本上切断了 USB 模块的工作能源,使其彻底停止运行,进入低功耗状态。

解决方案:
如参考下图需要在加入 USB_DeviceReset();
如果是OTG系列,除了上面那个函数,也是要把USB外设复位(OTGFSRST = 1),同时关闭时钟(OTGFSEN = 0)
81a60bd3dd829c02ae0ad296efcdadce

APM32F107_USB_STOP.zip

7.94 MB, 下载次数: 0

elephant00 发表于 2025-1-2 16:51 | 显示全部楼层
USB接口未完全关闭
两只袜子 发表于 2025-1-2 16:51 | 显示全部楼层
外设时钟未关闭
cr315 发表于 2025-1-2 19:00 | 显示全部楼层
硬件故障,如USB接口损坏或电源管理单元故障
jcky001 发表于 2025-1-2 23:00 | 显示全部楼层
软件或固件中可能存在错误或不当的配置,
xionghaoyun 发表于 2025-1-3 09:55 | 显示全部楼层
时钟没降频?
电竞孔乙己 发表于 2025-1-7 15:46 | 显示全部楼层
手册还是很重要的
chenjun89 发表于 2025-1-7 21:04 来自手机 | 显示全部楼层
没用的IO怎么处理的。
plsbackup 发表于 2025-2-4 17:24 | 显示全部楼层
即使进入 USB STOP 模式,若外部仍有 USB 设备处于连接状态且未完全停止工作,会持续消耗电量。
robincotton 发表于 2025-2-4 18:33 | 显示全部楼层
USB 控制器芯片或其他相关芯片的引脚可能存在漏电问题。
febgxu 发表于 2025-2-4 19:41 | 显示全部楼层
如果USB被配置为唤醒源,在STOP模式下,USB模块需要保持对外部唤醒信号的检测,这会导致额外的功耗。
gygp 发表于 2025-2-5 07:38 | 显示全部楼层
USB主机或集线器可能没有正确地发送SUSPEND信号,或者信号被外部干扰所影响。
modesty3jonah 发表于 2025-2-5 08:02 | 显示全部楼层
确认没有硬件错误,比如错误的电源连接或短路。
cashrwood 发表于 2025-2-5 08:39 | 显示全部楼层
操作系统的电源管理设置可能没有正确配置。例如,某些系统服务或进程可能被设置为在任何情况下都保持运行,即使进入 USB STOP 模式也不会停止。
jkl21 发表于 2025-2-5 09:07 | 显示全部楼层
PCB设计不合理,存在漏电或短路,导致功耗增加
rosemoore 发表于 2025-2-5 09:40 | 显示全部楼层
有的芯片在开启USB功能后,无论是否进入STOP模式,都会有一定的功耗
pmp 发表于 2025-2-5 10:43 | 显示全部楼层
通过优化代码和配置,减少STOP模式下的电流消耗。例如,可以将除键盘矩阵外的其余所有IO配置成输入上拉模式(针对某些特定的应用场景),以进一步降低功耗。
kmzuaz 发表于 2025-2-5 11:18 | 显示全部楼层
部分微控制器中,即使进入STOP模式,USB的某些功能可能仍未完全关闭,仍会消耗一定的电流。
caigang13 发表于 2025-2-5 11:26 来自手机 | 显示全部楼层
谢谢分享经验,学习了。
dspmana 发表于 2025-2-5 11:49 | 显示全部楼层
某些外设(如ADC、DAC等)在进入STOP模式前未正确关闭,导致持续耗电。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

58

帖子

0

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