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

[复制链接]
2742|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:
  1.   hlptim2.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;

死循环进stop2低功耗模式:
  1.   /*Suspend Tick increment to prevent wakeup by Systick interrupt.
  2.   Otherwise the Systick interrupt will wake up the device within 1ms (HAL time base)*/
  3.   HAL_SuspendTick();
  4.   for (;;) {
  5.     /* ### Enter in Stop2 mode ########################################### */
  6.     HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
  7.   }


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


运行视频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
gaonaiweng 发表于 2024-6-30 16:32 | 显示全部楼层
以LPTIMER来实现一个点灯程序作为本轮STM32U083测评
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

166

帖子

2

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