如题,小弟最近在搞STM8单片机的低功耗模式,其中用到了定时器4,但是有两个地方一直搞不懂,先上代码:
以下是初始化函数:
void Init_Timer4(void)
{
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0xfe);
TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
TIM4_SelectOnePulseMode(TIM4_OPMODE_REPETITIVE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
}
以下是中断函数:
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void) //
{
timecount++;
if(timecount == 5000) //
{
timecount = 0;
Second++;
if(Second == 380)//30s
{
Second = 0;
}
}
}
按照事先设想,我在按键中断那里,加入了定时器启动功能,
就是检测到按键按下,就执行:TIM4_Cmd(ENABLE);
此时定时器确实启动了,也按30秒的时间产生中断,
但是开启以后就停不下来啊,即使是加了:TIM4_Cmd(DISABLE); 一点用都没有,
此时,我在30秒定时到以后,加了以下三句:
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
halt();
好,现在时钟是被关闭了,系统也进入了低功耗状态,然而当我再次按按键使能定时器时,
它就一直在计时,其它啥事都干不了,比如接收射频数据,
就是说在进入定时器中断时,其它中断都无效了,这又是什么原因呢?按理说定时器不应该是和按键中断不互斥吗?
求大神赐招,我只想干两件事:
1、按下按键,使能定时器,计时30s,时间到以后彻底关闭,然后进入低功耗;
2、在计时期间要随时接收射频数据(中断触发接收)。
|