1)TIM_TimeBaseInitTypeDef
时基初始化结构体,它包括了四个成员函数:TIM_ClockDivision、TIM_CounterMode、TIM_Period、TIM_Prescaler。比较重要的是TIM_Period成员,它控制的是定时周期。比如说将TIM_Period设置成999,则计数器会数1000个(TIM_Period+1)节拍为一个定时器的周期。这个和后面需要配置的TIM_Pulse共同控制着定时器输出波形的占空比。
TIM_ClockDivision在参考手册中的定义是“Specifies the clock
division”——指定时钟的分频。可见其是用来对时钟分频的;
而TIM_Prescaler的定义是“Specifies
the prescaler value used to divide the TIM clock”,用来指定TIM时钟的分频值。也就是说它是进一步来分频TIM
clock的。
TIM_CounterMode是计数器模式,分为向上、向下、中间计数三种。
ii)TIM_Pulse
之前提到的定时器暂停。我更喜欢称他为定时器跳变,当计数器CNT中的值小于它的值时,输出为有效电平,即为之前配置的高电平,当达到跳变值时输出跳变(下跳)。它与TIM_Period共同决定了PWM波的占空比。占空比=( TIM_Pulse
/ ( TIM_Period + 1 ) ) *
100%。比如我要产生一个50%的=PWM,只需要将TIM_Period设置成999,TIM_Pulse设置成500即可。在前半个周期计数器值达不到TIM_Pulse
,故一直输出高电平,当达到TIM_Pulse
时刻输出值下跳为低电平,然后再次计数半个周期。当这个周期走完时,ARR恰好溢出(其内装入的值为TIM_Period ),然后计数器清零,再次计数,重复上述过程,即产生了PWM波。
TIM_Period是总计数,TIM_Pulse是脉冲电平翻转时刻,即计数到该值时脉冲翻转。
stm32f103定时器