/********************************************************
**哞哞教育
**作用:哞哞板定时器2中断配置指导
**作者:壹哥
********************************************************/
/**********************************************************
** 函数名: TIM2_Int_Init
** 功能描述: 基本定时器配置
** 说明:定时时间=(预分频数+1)*(计数值+1) /TIM2时钟(72MHz),单位(s)
***********************************************************/
void TIM2_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟
//清除中断标志位
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//TIM_ClearFlag(TIM2,TIM_FLAG_Update);//两者作用相同
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE); //使能指定的TIM2中断,允许更新中断
//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE); //使能定时器2
}
/**********************************************************
** 函数名: TIM2_IRQHandler
** 功能描述: 定时器2的更新中断服务程序
***********************************************************/
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
//Time_1ms+=1;
/*****************
**填写自己的功能
******************/
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除更新中断标志位
}
}
/**************************主函数******************************************/
int main(void)
{
//设置中断产生间隔为1ms,CLK_INT=72,预分频系数 = 1000
TIM2_Int_Init(1000-1,72-1); //((1+arr )/72M)*(1+psc )=((1+999)/72M)*(1+71)=1ms
}