我想用定时器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);//设置睡眠定时器2secSysPowerMode(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;
}
Viki Shi:
当系统进入PM2时,timer1会停止计数。这是因为低功耗模式下会关闭高速振荡器,而timer1就是用的高速振荡器。没记错的话,配置和计时器值将在该模式下保存
当你的程序从PM2中醒来时,timer1的计数器值与你进入PM2时的计数器值相同。因为在这段时间可能很长,所以基本没什么意义,你也可以选择在进入PM2之前停止Timer1,然后在出来时重新启动它。
TI中文支持网