title: HALPWM配置占空比频率
tags:
- STM32
- Clion
- Hal
1.STM32CubeMX学习笔记(13)——PWM输出(呼吸灯)使用
2.STM32标准库+HAL库 | 高精度动态调节PWM输出频率+占空比
看你cubemx 里面的配置时钟频率是多少
参照第二篇文章描述修改 下面俩个参数就行
uint16_t prescaler
uint64_t tim_clk_freq
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);
}
}
参考链接