使用cube mx配置好pwm参数

例如现在用定时器1的通道1输出一个pwm
27.png

这里是定时器频率
28.png

GPIO设置
29.png

频率与占空比设置
30.png
频率等于定时器频率除于第一次分频再除于第二次分频

配置完成以后需要:

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频率减小

最后修改:2020 年 06 月 28 日
声明:无闻风博客|版权所有,违者必究|如未注明,均为原创| 转载:转载请注明原文链接