[STM32L0] 求助:STM32L051低功耗定时器与唤醒

[复制链接]
1666|1
 楼主| Larm1 发表于 2020-3-28 16:12 | 显示全部楼层 |阅读模式
本帖最后由 Larm1 于 2020-3-28 16:20 编辑

      最近在学习STM32L051的低功耗功能,其中关于低功耗定时器LPTIM ,其介绍如下:
       lp.PNG
      大概意思是LPTIM可以在除了 Standby mode之外的所有模式下运行。甚至能在没有内部时钟源的情况下运行,LPTIM的Pulse Counter在某些应用下非常有用。LPTIM能够将系统从低功耗模式下唤醒的功能使得其适合于在极起低功耗消耗的情况下实现超时功能。

      我的理解:LPTIM可以在Stop Mode等(除了 Standby mode之外)下及极低的功耗运行,而且还可以将系统从Stop Mode 下唤醒。
      但是当我配置完LPTIM后中断是可以正常产生的,但是并不能从Stop mode中唤醒,程序如下:
      lptim初始化:


  1.       LL_RCC_SetLPTIMClockSource(LL_RCC_LPTIM1_CLKSOURCE_LSE); //// 使用LSE 作为时钟输入
  2.       LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPTIM1);

  3.      LPTIM1->CFGR |= (0x04<<9); //// 设置分频系数为 16
  4.     LPTIM1->IER |= LPTIM_IER_ARRMIE; //// 使能自动装载匹配中断
  5.     LPTIM1->CR |= LPTIM_CR_ENABLE; //// 使能定时器
  6.     LPTIM1->ARR = 37; ////  自动装载值
  7.     LPTIM1->CR |= LPTIM_CR_CNTSTRT; //// 连续模式
  8.                
  9.     NVIC_SetPriority(LPTIM1_IRQn, 0);
  10.     NVIC_EnableIRQ(LPTIM1_IRQn);

    main函数主循环为:


  1.     while(1)
  2.     {      
  3.     fnDelayMs(1);
    中断函数为:

  1.   void LPTIM1_IRQHandler(void)
  2.   {

  3.     if ( 1==LL_LPTIM_IsActiveFlag_ARRM(LPTIM1) )
  4.     {
  5.       LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_10);  //// 翻转一个IO
  6.     }

  7.     LPTIM1->ICR |= 0X7F;
  8.   }

     如果主函数中屏蔽掉进入Stop Mode的函数fnStm32PwrEnterStopMode后,io可以正常翻转,但是释放该函数,则io不翻转。
     我初步怀疑是LPTIM的中断没有唤醒 MCU,所以io不翻转。

     请大侠们帮忙看看,是我的理解有问题,还是程序有问题?


     先谢谢各位了!!!


formation 发表于 2020-3-29 19:51 | 显示全部楼层
你是怎么确认中断已经正常产生了的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:大爱无疆

53

主题

389

帖子

0

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