目录
3.使能预装载寄存器:void TIM_OC2PreloadConfig
PWM模式的工作框架:
PWM模式的工作原理:
由之前的定时器中断实验知道,定时器内部有一个记录定时器当前值的寄存器CNT和一个记录定时器自动重装载值的寄存器ARR,而在PWM工作模式下,我们依然利用这两个定时器来记录时间,不同的是多引入一个寄存器CCRx,这个寄存器用于控制PWM输出波的有效电平长度、引入CCMRx寄存器来控制PWM模式、引入寄存器CCERx:CC1P位控制输出电平极性。
PWM模式可以控制当计数器的值小于CCRx寄存器设定的值时输出的是有效电平还是无效电平,
- 在PWM模式1下,我们控制凡是小于CCRx寄存器数值的电平都是有效电平,无论是向上计数还是向下计数;
- PWM模式2下,我们控制凡是小于CCRx寄存器数值的电平都是无效电平,无论是向上计数还是向下计数;
下面以PWM模式1为例:当计数器小于CCRx数值时,输出的为有效的电平,例如上图中,我们通过控制寄存器CCERx:CC1P位让有效电平为低电平,所以当计数器小于寄存器CCRx设定的数值时,输出的为有效的低电平。当计数器大于CCRx设定的值时,输出无效的高电平。
PWM库函数配置:
PWM实验的配置步骤如下:
- 初始化定时器时钟和输出GPIO的时钟;
- GPIO的初始化;
- 定时器初始化;
- 定时器输出通道参数初始化;
- 定时器使能;
- 预装载寄存器使能;
1.初始化定时器输出通道:TIM_OC2Init
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
这个函数用于初始化PWM模式下定时器输出的模式和相应参数的选择。它有两个参数,第一个是要初始化的定时器,第二个是选择定时器的输出模式的结构体指针:
uint16_t TIM_OCMode;
uint16_t TIM_OutputState;
uint16_t TIM_OutputNState;
uint16_t TIM_Pulse;
uint16_t TIM_OCPolarity;
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
它有8个成员,而在我们PWM输出的实验中,我们只需要去配置它的4个成员:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse
第一个是TIM_OCInitStructure.TIM_OCMode,它是选择PWM模式,即控制CCMRx寄存器的结构体成员;
第二个是TIM_OCInitStructure.TIM_OutputState,它是选择是否使能通道的成员;
第三个是TIM_OCInitStructure.TIM_OCPolarity,它是配置CCERx寄存器,即控制有效电平的极性的成员;
第四个是TIM_OCInitStructure.TIM_Pulse,它是配置CCRx寄存器的数值,这个我们可以不使用,因为后面有函数可以配置它。
2.设置比较值函数:TIM_SetComparex
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
这个函数有两个参数,第一个参数是要设置的定时器,第二个参数是新的比较值,即CCRx寄存器的配置函数;
3.使能预装载寄存器:void TIM_OC2PreloadConfig
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
这个函数用于使能预装载寄存器,即使能CCRx预装载寄存器的函数,即驱动CCRx寄存器工作的函数。它也有两个参数,第一个是定时器序号,第二个是定时器的预装载寄存器的使能。