初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2012-3-13
- 在线时间
- 3 小时
|
用的定时器2,初始化代码如下:
//定时器中断处理函数
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001) //溢出中断
{
printf("timer2 timeout!\r\n");
TIM2->CR1&=0xFE; //禁止定时器2
}
TIM2->SR &= ~(1<<0); //清除中断标志位
}
//定时器初始化
void Timer2Init()
{
RCC->APB1ENR|=1<<0; //TIM2时钟使能
TIM2->ARR = 50000; //设定计数器自动重装值//刚好5s
TIM2-> SC = 7199; //预分频器7200,得到10Khz的计数时钟
TIM2->CR1 |= 1<<2;
//这两个东东要同时设置才可以使用中断
TIM2->DIER |= 1<<0; //允许更新中断
//TIM2->DIER |= 1<<6; //允许触发中断
TIM2->SR &= ~(1<<0); //清除中断标志位
MY_NVIC_Init(2,2,TIM2_IRQChannel,2);//抢占1,子优先级3,组2
}
//开启定时器
void Timer2Start()
{
TIM2->SR &= ~(1<<0); //清除中断标志位
TIM2->CR1|=0x01; //使能定时器2
}
现在的问题是在主函数中初始化定时器2后,调用Timer2Start()函数开启定时器,第一次开启会很快进入中断,以后开启5s后进中断,请教各位大侠,是怎么回事?
|
|