This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

为什么睡眠定时器唤醒后,我的定时器1没有工作了

我想用定时器1作个延时,

第一次运行程序时是可以正常工作的,

第二次从睡眠周期中唤醒就不工作了。

求大佬解答~

void main(void)
{   halBoardInit();   //初始化单片机
    InitSleepTimer();
    init_timer1();

    if(halRfInit()==FAILED) {
      HAL_ASSERT(FALSE);
    }    
    if(basicRfInit(&basicRfConfig)==FAILED) {
      HAL_ASSERT(FALSE);
    } 
while (1) {  
    Set_ST_Period(2);//设置睡眠定时器2sec
    SysPowerMode(2);    
   Red_LED=~Red_LED;
   while(!j);//j=1就溜走,j=1时大概是2s
...//后面的程序是轮询,不影响
  }
}

//初始化定时器1
 void init_timer1(void)
 {
    T1CTL = 0x0d;       //128分频,自动重装 0x0000-0xFFFF 0.26s周期
    T1STAT= 0x21;       //通道0,中断有效   
    T1IE = 1;                //开T1中断
    EA = 1;                  //开总中断
 }
//定时器1作延时的延时函数



 //定时器T1中断处理函数
#pragma vector = T1_VECTOR 
__interrupt void T1_ISR(void) 
 { i++;
   T1IF = 0;
   if(i == 0x07)//4次接近1s
   { 
     j=1;//计时到
     i=0; 
   }
   else j = 0;
 } 

  • 当系统进入PM2时,timer1会停止计数。这是因为低功耗模式下会关闭高速振荡器,而timer1就是用的高速振荡器。没记错的话,配置和计时器值将在该模式下保存

    当你的程序从PM2中醒来时,timer1的计数器值与你进入PM2时的计数器值相同。因为在这段时间可能很长,所以基本没什么意义,你也可以选择在进入PM2之前停止Timer1,然后在出来时重新启动它。