STM32定时器周期不准确

时间:2015-02-02 15:43:55

标签: timer stm32

我已经配置了一个频率为1MHz的定时器,并且我设置了一个每几微秒运行一次的isr。问题是,我在逻辑分析仪上测量的周期总是偏离1us。如果我将定时器频率设置为1kHz,则周期始终关闭1ms。是否有这种情况发生,或者我做错了什么?

这是我当前的计时器配置,实际周期是11us:

uint16_t PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 1000000) - 1;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 10;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);

/* TIM7 enable counter */
TIM_Cmd(TIM7, ENABLE);

我在带Keil的STM32F205xx上使用TIM7。

1 个答案:

答案 0 :(得分:0)

定时器周期也计算为Timer_Ticks-1,因此行

TIM_TimeBaseStructure.TIM_Period = 10;

应该是

TIM_TimeBaseStructure.TIM_Period = 9;