PWM主要是对STM32的定时器的应用。STM32有8个定时器,其中TIM1和TIM8是高级定时器,其他为通用定时器。实验中函数用的是TIM1。定时器1的主要由一个16位的计数器(CNT寄存器)、预分频器、自动重装载寄存器(auto reload register)构成。预分频器将芯片送来的时钟进行指定分频后给定时器做时钟节拍。自动重装载计数器储存编程者装入的数字,在每一次溢出/下溢出时装入。16位计数器是定时器核心。下面总结一下定时器的操作函数。
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是计数器模式,分为向上、向下、中间计数三种。TIM_OCInitTypeDef
输出通道(output channel)初始化结构体。该结构体主要配置TIM的工作模式。需要注意的是每一个定时器的4个通道分别对应一个初始化函数,也就是TIM_OCXInit(X=1,2,3,4)。总结其中几个重要的成员函数。
i)TIM_OCPolarity
定时器极性。它的参数为TIM_OCPolarity_High、TIM_OCPolarity_Low,用来设置定时器在未达到跳变 值时的电平(高低)。之所以重要是因为它也可以决定占空比,因为占空比的定义是高电平占周