[STM32U3] 【STM32U385RG 测评】+ 通讯唤醒及功耗检测

[复制链接]
 楼主| jinglixixi 发表于 2025-7-13 14:54 | 显示全部楼层 |阅读模式

在对基础实验的要求了就有一项关于在STOP低功耗模式下,通过LPUART唤醒STM32U385的要求,并展示在唤醒后,LED正常闪烁的效果。
厂家提供的例程内容为:
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   MX_GPIO_Init();
  6.   MX_LPUART1_UART_Init();
  7.   MX_ICACHE_Init();
  8.   BSP_LED_Init(LD2);
  9.   BSP_LED_On(LD2);
  10.   HAL_Delay(2000);
  11.   HAL_DBGMCU_DisableDBGStopMode();
  12.   HAL_UARTEx_EnableStopMode(&hlpuart1);
  13.   if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  14.   {
  15.       Error_Handler();
  16.   }
  17.   BSP_LED_Off(LD2);
  18.   HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  19.   BSP_LED_On(LD2);

  20.   SystemClock_Config_fromSTOP();
  21.   HAL_UARTEx_DisableStopMode(&hlpuart1);
  22.   while (UserReceptionComplete == 0)
  23.   {
  24.   }
  25.   if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }
  29.   while (1);
  30. }

经对程序的分析和测试,其作用和效果为:
.首先亮LD2,然后经过2秒的延时再将LD2熄灭并进入STOP低功耗模式。随后是通过串口LPUART1接收信息来触发从STOP低功耗模式向常规模式的转换,并再次点亮LD2。
在测试过程中,要求外部串口转换模块与开发板相连接,其中串口转换模块的接收引脚接PA2,模块的发送引脚接PA3。
ae7e41640e30774b0bff4028a6fd7f18
图1  所用接口

此外,通过这个测试还可以进行两种整体下的功耗对比。
为便于直接观察并简化检测的过程,这里采用的是一块小巧的功耗检查表,它是通过串接到电源与开发板之间来获得检测结果的。
当LD2出于熄灭状态时,说明开发板已进入STOP低功耗模式,此时测得的值即为该模式下的功耗,其检测结果如图2所示。
b863b1026621c3cf01f62d427761fd29
图2  STOP模式的功耗

为从该模式下退出,此时需要在电脑侧发送信息以触发模式间的转换,间图2所示。
439741966780d9cfb8f8b22d9eafdad0
图3 串口发送及唤醒

当串口接收到信息后,便自动实现了模式间的转换。此时,可见到LD2重新被点亮,其功耗也会随着发生改变,其检测值如图4所示。
31bedeb1a935b31c1245aeb5a516d7fe
图4 唤醒后功耗

经对比,在两种不同的模式下,其功耗是存在相应变化的,说明不同模式下,其对功耗的影响。
为了唤醒后LD2闪烁的效果,需将程序修改为:
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();

  5.   MX_GPIO_Init();
  6.   MX_LPUART1_UART_Init();
  7.   MX_ICACHE_Init();
  8.   BSP_LED_Init(LD2);
  9.   BSP_LED_On(LD2);
  10.   HAL_Delay(2000);
  11.   HAL_DBGMCU_DisableDBGStopMode();
  12.   HAL_UARTEx_EnableStopMode(&hlpuart1);
  13.   if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  14.   {
  15.       Error_Handler();
  16.   }
  17.   BSP_LED_Off(LD2);
  18.   HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  19.   SystemClock_Config_fromSTOP();
  20.   HAL_UARTEx_DisableStopMode(&hlpuart1);
  21.   while (UserReceptionComplete == 0)
  22.   {
  23.   }
  24.   if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  25.   {
  26.     Error_Handler();
  27.   }
  28.   while (1)
  29.   {
  30.                   BSP_LED_On(LD2);
  31.           HAL_Delay(2000);
  32.                   BSP_LED_Off(LD2);
  33.                   HAL_Delay(2000);
  34.   }
  35. }

这样就达到了基础实验中,对该项的要求。

切换工作模式的演示:
模式变换.gif

不同模数的功耗检测演示:
功耗测试.gif




小小蚂蚁举千斤 发表于 2025-7-28 23:26 | 显示全部楼层
通讯唤醒及功耗检测
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2933

帖子

39

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

518

主题

2933

帖子

39

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