新手入门
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2015-6-5
- 在线时间
- 0 小时
|
5金钱
void Tim2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); //使能Tim2时钟
// TIM_DeInit(TIM2);
// TIM_InternalClockConfig(TIM2);
TIM_TimeBaseStructure.TIM_Prescaler = 48000-1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 0x50;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// TIM2->SR &= (uint16_t)~(1<<0);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
// TIM_ARRPreloadConfig(TIM2, DISABLE);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, DISABLE); //初始化的时候先关闭tim2
}
中断服务函数
void TIM2_IRQHandler(void)
{
// uint16_t Tim2_CNT;
if(TIM_GetFlagStatus(TIM2,TIM_IT_Update)!=RESET)
{
// Tim2_CNT = TIM_GetCounter(TIM2);
// TIM2->SR &= (uint16_t)~(1<<0);
TIM_ClearFlag(TIM2,TIM_IT_Update);
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
TIM_Cmd(TIM2, DISABLE);
}
}
启动定时后,进入两次中断后才清除中断标志位,大家帮我看看到底怎么回事了呢,我折腾了两天了,实在看不出来怎么回事了呢
|
|