使用cube mx配置好pwm参数
例如现在用定时器1的通道1输出一个pwm
这里是定时器频率
GPIO设置
频率与占空比设置
频率等于定时器频率除于第一次分频再除于第二次分频
配置完成以后需要:
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_n);//启动n通道的pwm
调节占空比和频率的方法:
freq(uint16_t) : 频率(Hz),函数内换算成配置值
void set_pwm_value(uint16_t freq,uint16_t duty)
{
htim2.Init.Period = (1000000/freq)-1;
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = ((100000/freq)-1)*duty;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
}
占空比等于周期*高电平时间
使用寄存器法:
void Set_PWM_Value(uint16_t freq,int duty)
{
TIM1->ARR = (uint32_t)((72000000/freq)-1);
TIM1->CCR1 = (uint32_t)(((72000000/freq)-1)*(duty)/100);
}
寄存器法讲解:
72000000就是配给这是定时器的时钟
pwm输出的频率就等于 (72000000/pwm设定的频率)-1
占空比等于 pwm输出频率*占空比/100(这里duty=10占空比就是%10)
调试遇到的问题:
一开始定时器的时钟1000000的时候无法输出5%的占空比
经过计算这时候TIM1->CCR1的值只有0.9所有是没有输出的
解决方法就是定时器时钟加大 或者pwm频率减小