关于STM32 通用定时器初始化参数的理解

定时器初始化结构体定义为

typedef struct
{
  uint16_t TIM_Prescaler;        
                                       
  uint16_t TIM_CounterMode;     

  uint16_t TIM_Period;       

  uint16_t TIM_ClockDivision;   
  
  uint8_t TIM_RepetitionCounter; 
  
} TIM_TimeBaseInitTypeDef;       

其中:

  • TIM_Prescaler为预分频因子,取值范围为0x0000 到 0xFFFF,决定了定时器时钟频率。定时器时钟频率 = 定时器时钟源频率 / TIM_Prescaler。其中,定时器时钟源有4个:
    1) 内部时钟(CK_INT)
    2) 外部时钟模式 1:外部输入脚(TIx)
    3) 外部时钟模式 2:外部触发输入(ETR)
    4) 内部触发输入(ITRx):

这个时钟源是由寄存器TIMx_SMCR设置的,在手册中可以看出,它的复位值是0x00,如果不专门设置,(在使能了定时器的前提下)定时器时钟源选择的是内部时钟(CK_INT),它的频率是72MHZ(在系统频率SYSCLK是72MHz的情况下)。具体分析是,根据时钟树,SYSCLK为72MHz,AHB为72MHz,APB1被2分频变为36MHz,而根据时钟树上的话“如果APB1预分频系统=1则频率不变,否则乘2”,这里APB1被2分频,故需要乘2,定时器2~7的时钟频率就为72MHz。关于STM32 通用定时器初始化参数的理解_第1张图片

  • TIM_CounterMode为计数模式,可以向上,向下或向上/向下计数,很简单,不多说。
  • TIM_Period是定时器的溢出上限值,定时器向上计数到TIM_Period或从TIM_Period向下计数到0时溢出。注意这个值是自动重新装载的。
  • TIM_ClockDivision仅用于定时器时钟源是“外部触发输入”(即之前说的第3个时钟源)时的情况,它是“外部触发输入时钟”的分频系数。在定时器时钟源是其他情况时(比如内部时钟72MHz)没有意义。
  • TIM_RepetitionCounter,这个只在高级定时器1和8中才有意义。

你可能感兴趣的:(学习记录)