[i=s] 本帖最后由 EPTmachine 于 2025-5-18 20:51 编辑 [/i]<br />
<br />
线下参加STM32U3超低功耗项目开发,对如何通过编程使STM32U3进入超低功耗状态、如何在低功耗模式下进行调试进行学习。
使用STM32CubeIDE创建工程

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

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

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

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

使能GPIO13引脚的中断

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


完成上述设置后,保存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与开发板的接线和注意事项如下。


这里值得注意的时,开发板的接地端要接到CN11的地端,这样测量出来的电流才会准确,这和电流的测量回路的阻抗相关。
使用STLINK_V3PWR测量电压消耗如下。正常模式下为2000μA、Sleep模式下为800μA、Stop2模式下为10μA、Standby模式下为5μA。

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


保存IOC文件后,重新生成代码。
在代码添加以下代码,开启Stop模式下的调试功能。
HAL_DBGMCU_EnableDBGStopMode();
调试时不需要使用STLINK_V3PWR,将之前的跳帽设置为默认连接。烧录并调试程序,此时可以进入到调试界面。

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

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