打印
[STM32U3]

【STM32峰会实训经验】STM32U3低功耗编程

[复制链接]
73|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

[i=s] 本帖最后由 EPTmachine 于 2025-5-18 20:51 编辑 [/i]<br /> <br />

线下参加STM32U3超低功耗项目开发,对如何通过编程使STM32U3进入超低功耗状态、如何在低功耗模式下进行调试进行学习。

使用STM32CubeIDE创建工程

Create_STM32_Project.png

在设备选择页面选定开发板对应的芯片型号

Chip_select.png

输入工程名称,这样芯片的空工程创建完毕。

Project_name.png

开发板上的GPIO13引脚是连接在USER BUTTON上,设定其功能为外部中断,用于从低功耗模式中唤醒MCU。

GPIO13_Setting.png

开启ICACHE功能用于提升MCU的性能

ICACHE_Setting.png

使能GPIO13引脚的中断

Enabel_GPIO13_Exit.png

设定未使用的引脚功能为模拟引脚,以达到节能的目的。

Set_Unused_Pin_Func.png

Set_Analog_func.png

完成上述设置后,保存IOC文件,即可生成相应的代码。

软件方面,开启SMPS调压功能,以提高能源利用效率。

/* Enable the SMPS regulator to improve power efficiency*/
  if(HAL_PWREx_ConfigSupply(PWR_SMPS_SUPPLY) != HAL_OK)
  {
  Error_Handler();
  }

接下来设定MCU进入不同的待机模式,并设置唤醒方式为外部中断唤醒,这样通过GPIO13的外部中断来唤醒MCU,从而使用一个程序测量在不同模式下MCU的能量消耗。具体的代码如下

/* Enable the SMPS regulator to improve power efficiency*/
  if(HAL_PWREx_ConfigSupply(PWR_SMPS_SUPPLY) != HAL_OK)
  {
  Error_Handler();
  }
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ICACHE_Init();
  /* USER CODE BEGIN 2 */W
  HAL_Delay(2000);
  /* Disable Prefetch Buffer */
  __HAL_FLASH_PREFETCH_BUFFER_DISABLE();

  /* SLEEP Mode */
  /* Suspend Tick increment to prevent wakeup by Systick interrupt. */
  /* Otherwise the Systick interrupt will wake up the device within 1ms */
  /* (HAL time base). */
  HAL_SuspendTick();

  /* Enter Sleep Mode , wake up is done once User push-button is
  pressed */
  HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,
  PWR_SLEEPENTRY_WFI);
  /* Configure the system clock */
  SystemClock_Config();
  /* Resume Tick interrupt if disabled prior to STOP mode entry */
  HAL_ResumeTick();

  /* STOP Mode */
  HAL_Delay(1000);
  HAL_SuspendTick();
  /* Enter STOP 2 mode */
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERMODE_STOP2,
  PWR_STOPENTRY_WFI);
  /* Configure the system clock */
  SystemClock_Config();
  /* Resume Tick interrupt if disabled prior to STOP mode entry */
  HAL_ResumeTick();

  /* Standby Mode */
  HAL_Delay(1000);
  /* Enter Standby mode */
  HAL_PWREx_EnableUltraLowPowerMode();
  HAL_PWR_EnterSTANDBYMode();

使用STLINK_V3PWR与开发板的接线和注意事项如下。

image.png

STLINK_V3PWR.png

这里值得注意的时,开发板的接地端要接到CN11的地端,这样测量出来的电流才会准确,这和电流的测量回路的阻抗相关。

使用STLINK_V3PWR测量电压消耗如下。正常模式下为2000μA、Sleep模式下为800μA、Stop2模式下为10μA、Standby模式下为5μA。

STMonitor_Power.png

对于开发者而言如何在低功耗模式下调试程序更为重要,之前将未使用的引脚设置为模拟功能,需要将其中的调试引脚的功能开启。

Debug_PIN.png

Debug_Interface_Setting.png

保存IOC文件后,重新生成代码。

在代码添加以下代码,开启Stop模式下的调试功能。

HAL_DBGMCU_EnableDBGStopMode();

调试时不需要使用STLINK_V3PWR,将之前的跳帽设置为默认连接。烧录并调试程序,此时可以进入到调试界面。

Stop_debug1.png

在程序中添加断点,MCU在进入Stop模式和Sleep模式,并被唤醒后,程序运行到断点处。这样就实现了在STOP模式下的调试。

Stop_debug2.png

总结

通过线下的U3低功耗实训,学习到如何使用U3进行低功耗应用的开发、调试和能耗测试。同时在完成实训后,获得一块NUCELO-U385RQ开发板,参加ST峰会的收获还是很大的。

使用特权

评论回复
评论
qintian0303 2025-5-18 21:50 回复TA
都是培训PPT里的内容 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

463

帖子

4

粉丝