如下是我的TIM3初始化函数:
void init(uint16_t period, uint16_t prescaler)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStru;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStru.TIM_Period = period;
TIM_TimeBaseStru.TIM_Prescaler = prescaler;
TIM_TimeBaseStru.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStru.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStru);
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
}
中段服务函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
/* 清中断标志 */
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
time_out = 1;
}
}
现在我想实现,定时器固定以1s定时。若在这个1s的过程中发生某个动作,那么定时器重新从0计起。
void main(void)
{
init(99999, 7199);
if (某个动作发生)
{
//定时器从零重新开始计数,这样操作对么?
TIM_Cmd(TIM3, DISABLE);
TIM_SetCounter(TIM3, 0); //TIMx->CNT = 0;
TIM_Cmd(TIM3, ENABLE);
}
}
我的操作过程如上,这样对么?实际上不对,若没有某个动作的发生,会定时进入中断。但某个动作发生后,定时器就一直不入中断了。请问要怎么操作呢?谢谢! |