我已经配置了一个频率为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。
答案 0 :(得分:0)
定时器周期也计算为Timer_Ticks-1,因此行
TIM_TimeBaseStructure.TIM_Period = 10;
应该是
TIM_TimeBaseStructure.TIM_Period = 9;