#ifdef __cplusplus extern "C" { #endif #include "timer.h" #include "nvic.h" void Timer_InitBase(TIM_TypeDef *TIMx, uint32_t Time_us) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; if (TIMx == TIM2) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* enable clock */ TIM2_NVIC_Configuration(); // enable interruptation } else if (TIMx == TIM3) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* enable clock */ TIM3_NVIC_Configuration(); // enable interruptation } else if (TIMx == TIM4) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); /* enable clock */ TIM4_NVIC_Configuration(); // enable interruptation } else if (TIMx == TIM5) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); /* enable clock */ TIM5_NVIC_Configuration(); // enable interruptation } else if (TIMx == TIM6) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); /* enable clock */ TIM6_NVIC_Configuration(); // enable interruptation } else if (TIMx == TIM7) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); /* enable clock */ TIM7_NVIC_Configuration(); // enable interruptation } TIM_DeInit(TIMx); TIM_TimeBaseStructure.TIM_Period = Time_us - 1; /* the value of auto reload register */ TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1); /* prescler : 72M/72 */ /* ClockDivision*/ if (TIMx == TIM3 || TIMx == TIM4) { TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4; } else { TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; } TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /* count upwards */ TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure); TIM_ClearFlag(TIMx, TIM_FLAG_Update); /* clear interrupt flags */ TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE); TIM_Cmd(TIMx, ENABLE); } #ifdef __cplusplus } #endif