打印
[STM32U0]

【STM32U083测评】利用lptimer结合stop2低功耗模式实现最低功耗点灯

[复制链接]
2156|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xhackerustc|  楼主 | 2024-5-29 00:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32U083有3个LPTIMER,如果以LSI或LSE为时钟源,在除standby以外的low power模式比如stop2只有LPTIMER可以运行,其它时钟如TIM、systick都停了。个人感觉LPTIMER在一些RTOS的deep sleep的tickless模式下可以用来做定时器负责唤醒timer事件。LPTIMER cnt有16bit,最大prescaler是128,所以 如果时钟源是32768HZ的LSI,那么tickless最长延时可以达到2^16/(32768/128)=256秒,精度是1/(32768/128)秒,大概3.9毫秒,精度马马虎虎。如果LPTIMER的cnt能有24bit或32bit就更好了,这样可以既有精度又比较大的最大延时。LPTIMER结合STOP2低功耗模式可以实现一些很有意思的功能,比如以这个MCU结合墨水屏做个低功耗日历台钟,墨水屏台钟精度如果只要精确到分钟,可以LPTIMER1定时1分钟唤醒,MCU刷新墨水屏后进入stop2模式 ,这个台钟功耗应该低得吓人。

本轮STM32U083测评以开箱点灯开始,今天就以LPTIMER来实现一个点灯程序作为本轮STM32U083测评的收尾。此次点灯特别的地方在于它充分利用STM32U083的众多低功耗模式的支持和LPTIMER特性实现超低功耗的点灯,思路是MCU toggle LED后就进入stop2模式,LPTIMER定时唤醒MCU,再toggle LED,如此循环往复。

代码不用从头开始写,咱就把STM32Cube_FW_U0_V1.0.0自带的LPTIM_Timeout样例工程改改就能用。关键 修改如下:

MX_LPTIM2_Init(void)函数中把Trigger source改成software:
  hlptim2.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;

死循环进stop2低功耗模式:
  /*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();
  for (;;) {
    /* ### Enter in Stop2 mode ########################################### */
    HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
  }


HAL_LPTIM_CompareMatchCallback()只干一件事就是toggle LED:
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
  /* Timeout was reached, toggle LED4 */
  BSP_LED_Toggle(LED4);
}


运行视频https://www.bilibili.com/video/BV1yt421N7oy/

最后谢谢21ic的测评机会!


使用特权

评论回复
沙发
suncat0504| | 2024-6-18 09:38 | 只看该作者
谢谢分享!向大佬学习。

使用特权

评论回复
板凳
EmmaTT| | 2024-6-18 20:30 | 只看该作者
这个系列功耗怎么样

使用特权

评论回复
地板
chaohu5118| | 2024-6-26 11:25 | 只看该作者
FT Prog FT Prog FT Prog FT Prog

使用特权

评论回复
5
gaonaiweng| | 2024-6-30 16:32 | 只看该作者
以LPTIMER来实现一个点灯程序作为本轮STM32U083测评

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

68

帖子

0

粉丝