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

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的测评机会。
---------------------
作者:xhackerustc
链接:https://bbs.21ic.com/icview-3380240-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值