RobotHardware-UESTC/Hardware/银星机器人底盘/PiRobot-YH_Firmware v1.1/STM32/BSPLIB/timer.c

67 lines
2.1 KiB
C

#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