对于stm32f407 168M主频,因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,所以TIM2-TIM7、TIM12-TIM14的时钟为APB1的时钟的两倍即84M;APB2总线时钟为2分频即84M,TIM1、TIM8~TIM11的时钟为APB2时钟的两倍即168M。
我们按照TIM3为例:
设置TIM_Prescaler为8400,则定时器的频率为84MHz/8400=10khz,
设置自动重载值TIM_Period为10000,则定时器中断周期为(1/10khz)*10000=1000ms=1s,即每秒钟进一次定时器中断
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStructure.TIM_Period = arr-1;
TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}