【问题标题】:STM32 timer period not accurateSTM32定时器周期不准确
【发布时间】:2015-02-03 19:48:18
【问题描述】:

我已经配置了一个频率为 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。

【问题讨论】:

    标签: timer stm32


    【解决方案1】:

    定时器周期也计算为Timer_Ticks-1,所以行

    TIM_TimeBaseStructure.TIM_Period = 10;
    

    应该是

    TIM_TimeBaseStructure.TIM_Period = 9;
    

    【讨论】:

    • 感谢您的回复,我有什么理由必须从句号中减去 1 吗?
    猜你喜欢
    • 2019-07-10
    • 2023-02-13
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多