我想用定时器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,然后在出来时重新启动它。