以下面的定时器2为例:
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR 自动重装器的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSC 预分频器的值 对72M(720000000)进行 7200分频 即10K的频率下 计10000个数 1s的时间
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器的值 CCR
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
PWM频率计算公式:Fpwm = 主频 / ((ARR+1)*(PSC+1))(单位:Hz)
Fpwm=72 000 000/(72*100)= 10000 hz =10KHZ
周期计算: Tpwm = 1/Fpwm = 0.0001S = 100us
占空比计算公式:duty circle = TIM2->CCR2 / ARR(单位:%)
void PWM_SetCompare2(uint16_t Compare)
{
TIM_SetCompare2(TIM2,compare);
}
上面这段函数是传参改变定时器2第二通道的占空比
上面ARR=100,假设传参20,占空比就是20/100=20%
知识扩展:
这个函数TIM_SetCompare2,这样函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。这些函数名后面的阿拉伯数字代表的是定时器的通道,看自己电路上设计的GPIO口对应定时器第几通道,就选对应的通道函数。
例如:使用PA11,是是定时器1通道4,设置占空比就是TIM_SetCompare4(TIM1,compare);