Featured image of post HAL_PWM配置占空比频率

HAL_PWM配置占空比频率

HAL_PWM配置占空比频率

引言

HAL_PWM配置占空比频率 讲解占空比频率 配置占空比频率 定时器 之间的关系以及参数配置

参考连接

1.STM32CubeMX学习笔记(13)——PWM输出(呼吸灯)使用
2.STM32标准库+HAL库 | 高精度动态调节PWM输出频率+占空比

看你cubemx 里面的配置时钟频率是多少

参照第二篇文章描述修改 下面俩个参数就行

uint16_t prescaler
uint64_t tim_clk_freq

实战操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
void set_pwm_param(TIM_HandleTypeDef htim, uint32_t Channel, uint32_t freq, uint16_t duty)
{
    uint16_t prescaler = 72-1;
    uint64_t tim_clk_freq = 72000000;
    //计算PWM频率,所对应的自动重装载   ---> ARR = 主频 / (预分�?+1) / 预期PWM频率(Hz) - 1
    float pwm_freq_arr  = (tim_clk_freq * 1.0) / (prescaler+1) / freq * 1.0 - 1;
    //计算PWM占空比,对应比较寄存器的 ---> CCR = 预期占空�? * (自动重装载�??+1)
    //占空比则由捕/比较寄存器(TIMx_CRx)寄存器决定。占空比:duty = Pluse / (ARR+1)
    float pwm_duty_pulse = duty * 1.0 / 100 * (pwm_freq_arr + 1);

    //配置PSC预分频
    __HAL_TIM_SET_PRESCALER(&htim, prescaler);
    //配置PWM频率 ARR
    __HAL_TIM_SetAutoreload(&htim, (uint16_t)pwm_freq_arr);
    //配置PWM占空比
    __HAL_TIM_SetCompare(&htim, Channel, (uint16_t)pwm_duty_pulse);
//    printf("pwm_freq_arr:%.2f\r\n", pwm_freq_arr);
//    printf("pwm_duty_pulse:%.2f\r\n", pwm_duty_pulse);
}
最后更新于 Mar 21, 2025 15:42 +0800
世界是你们
使用 Hugo 构建
主题 StackJimmy 设计