1.使能定时器时钟
RCC_APB1PeriphClockCmd();//注意通用定时器挂在哪条总线上
2.初始化定时器,配置ARR,PSC
TIM_TimeBaseInit();
3.开启定时器中断,配置NVIC
void TIM_ITConfig();
NVIC_Init();
4.使能定时器
TIM_Cmd();
5.编写中断服务函数
TIMx_IRQHandler();
计算溢出时间和预分频系数等量之间的关系可由式子
Tout(溢出时间) = (ARR+1)(PSC+1)/Tclk
其中ARR自动装载值,PSC预分频系数,Tclk为输入时钟频率
例子:通过定时器中断配置,每500ms中断一次,然后中断服务函数中控制LED实现LED状态取反。
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3, ENABLE);
}
另外再编写中断服务函数即可,中断服务函数名为
void TIM3_IRQHandler(void)
本文根据正点原子stm32系列教程所记录