你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-WBA65RI评测】低功耗模式实测

[复制链接]
北方 发布时间:2025-9-10 15:55

1 NUCLEO-WBA65RI低功耗模式介绍

NUCLEO-WBA65RI 开发板搭载的是 STM32WBA65PI 超低功耗 MCU,该芯片的低功耗模式主要有睡眠模式、停止模式和待机模式,具体介绍如下:

睡眠模式 :这是较浅的低功耗模式。在此模式下,CPU 内核时钟停止,Cortex-M 核停止运行,但像 GPIO、UART、SPI、定时器等所有外设的时钟仍然处于运行状态,代码执行也会立即暂停。进入方式是调用 __WFI()(等待中断)指令或者 __WFE()(等待事件)指令,可通过任何 NVIC 中断或事件(如果是通过 WFE 进入)进行唤醒,唤醒时间极短。

停止模式 :属于深度睡眠模式,此模式下关闭所有时钟,内核和全部外设均停止工作,不过 SRAM 和寄存器内容会完整保留,GPIO 引脚也会保持进入停止模式前的状态。可以通过配置电源控制寄存器(PWR_CR),并调用 __WFI()__WFE() 进入该模式。其唤醒方式包括特定的外部中断、RTC 闹钟、独立看门狗等,唤醒后,MCU 按照进入停止模式前的时钟配置重启,程序从停止处继续运行。

待机模式 :该模式是最深的低功耗模式,此时会关闭电压调节器,导致内核电压域完全断电,SRAM 和寄存器内容基本会丢失,所有时钟停止,大部分 GPIO 引脚变为高阻态。进入待机模式需要通过配置电源控制寄存器(PWR_CR),再调用 __WFI()__WFE()。其唤醒方式有 NRST 引脚外部复位、特定的 WKUP 唤醒引脚、RTC 闹钟事件、独立看门狗复位等,唤醒后相当于硬件复位,MCU 要从复位向量处重新开始执行程序。

stop2 模式 :这是 STM32WBA6 系列特有的停止模式,相比传统的停止模式进一步优化了功耗,当实时时钟开启时,stop2 模式仅消耗 5μA 电流,能为设备在运行状态和待机状态之间,提供了全新的中间状态选择。

上述几种模式的功耗随着外设的配置和使用有比较大的差别,本次评测主要对比工作和最低的standby待机模式,可以看到变化很大。其中stop2模式基本停止,工作,这个需要外部来重新启动。

2 低功耗模式的测量

采用如下的连接方法,就是从JP2连接一个电流表就可以读取电流,经过LDO的电压是稳定在3.30V,所以采用电流测量可以对应于功耗测量。

Capture.JPG

NUCLEO-WBA65RI 开发板通过跳线(JP2) 连接主芯片(STM32WBA65PI)的供电回路。移除该跳线后,将电流表(或切换至电流测量模式的万用表)接入原跳线位置,即可让电流表与芯片的供电回路 “串联”。这样一来,就能直接测量芯片在运行过程中(包括 Stop2、待机等低功耗模式)的实时电流消耗。

确保 SB1 处于 “ON(导通)” 状态*:

SB1 是开发板上的 solder bridge(焊桥,一种小型可配置连接点),用于控制芯片的主供电回路。当 SB1 导通时,电源才能通过 JP2(即接入电流表的位置)为芯片供电;若 SB1 断开(OFF),芯片供电回路会中断,无法测量到电流。

  1. 先断开板载电源 :拔掉所有外部供电,避免更换跳线时发生短路。
  2. 移除 JP2 跳线 :在开发板上找到 JP2,轻轻拔出其塑料跳线帽。
  3. 连接电流表
    • 将电流表 / 万用表调至直流电流模式 (根据预期电流选择量程:例如 Stop2 和standby模式选 “200μA” 量程,活跃模式选 “200mA” 量程)。
    • 用两根跳线(或带针脚的测试线),一端连接电流表的 “电流输入端子”(通常标有 “mA”/“A”),另一端接 JP2 的其中一个引脚;再将电流表的 “公共端子”(标有 “COM”)通过另一根线连接到 JP2 的另一个引脚。
  4. 为开发板上电 :重新连接供电电源(通过 ST-LINK 接口接入 USB,这是芯片的主供电方式),此时电流表将显示芯片实时的电流消耗。

3 实际代码和测量结果

3.1 这里先使用standby代码如下

int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  SystemClock_Config();

  BSP_LED_Init(LD1);
  BSP_LED_Init(LD3);
  MX_GPIO_Init();
  MX_ICACHE_Init();
  MX_RTC_Init();
  SystemPower_Config();
 /* Clear DBGMCU_SCR_DBG_STANDBY  flag */
  CLEAR_BIT(DBGMCU->SCR, DBGMCU_SCR_DBG_STANDBY);

 /* Check and handle if the system was resumed from StandBy mode */
  if(__HAL_PWR_GET_FLAG(PWR_FLAG_SBF) != RESET)
  {
    /* Clear Standby flag */
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SBF);
  } 

  /* Insert 5 seconds delay */
  HAL_Delay(5000);
  /* Enable wakeup line 7 for RTC */
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN7_HIGH_3);
  HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);

  /* Clear all related wakeup flags */
  __HAL_PWR_CLEAR_FLAG(PWR_WAKEUP_ALL_FLAG);

  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xFFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16, 0) != HAL_OK)
  {
    Error_Handler();
  }
  /* Enter the Standby mode */
  HAL_PWR_EnterSTANDBYMode();

  /* Program should never reach this point (program restart when exiting from standby mode) */
  Error_Handler();
  while (1)
  {
  }

}

3.2 本代码使设备进入待机模式(Standby Mode),并通过外部复位或 RTC(实时时钟)唤醒定时器将设备从该模式唤醒。

在配套软件中,系统核心配置与运行流程如下:

时钟与定时配置 :

  • 系统时钟设定为 100MHz,SysTick(系统滴答定时器)配置为每 1 毫秒产生一次中断。
  • 默认使用内部低速时钟(LSI)作为 RTC 的时钟源,且 RTC 唤醒事件已在内部完成连接。

待机与唤醒时序 :

  • 系统上电后,会在 5 秒后自动进入待机模式。
  • RTC 唤醒功能已预先配置:进入待机模式约 33 秒后,RTC 会产生一个上升沿中断,将设备从待机模式唤醒。
  • 选择 “33 秒” 这一时长,是为了确保设备在待机模式下的电流能稳定降至最低工作水平,便于准确测量功耗(开启 RTC 功能时的待机电流可在此期间测量)。

唤醒后行为 :从待机模式唤醒后,程序执行会像经历软件复位(RESET)一样重新开始。

LD1 和 LD3 两个 LED 灯来直观显示系统当前状态,对应关系如下:

  • LD3 常亮 :系统配置失败(此时程序会进入无限循环,无法正常运行)。
  • LD1 闪烁 :系统处于运行模式(Run Mode)。
  • LD1 熄灭 :系统处于待机模式(Standby Mode)。

上述 “上电→运行→待机→唤醒→重新运行” 的流程无限循环执行。

3.3 演示在正常时7.8mA

1401446828.jpg

进入低功耗小于0.01mA

603764442.jpg

实际切换到uA档,读数2.9uA,比标称的数据还要小。1352724946.jpg

综合起来这次低功耗测试的结果显示,效果非常明显。

3.1.gif

收藏 评论0 发布时间:2025-9-10 15:55

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版