STM32-HAL-CUBEMX定时器实现PWM波输出
SMT32F1系列共有8个定时器:
高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5);基本定时器(TIM6、TIM7)。
基本定时器不能用来产生PWM波
高级定时器可同时产生7路PWM波
记住这里,后面预分频的时候会用到
CUBEMX设置:

参数说明:
Prescaler:预分频,一般设置成时钟频率的因子,好计算
Couter Mode: 向上/下计数
Counter Period(Auto Reload Register):计数周期(自动重装值,到达这个值后清零重来)
Pulse:初始脉冲宽度(如果要产生一个恒定占空比的PWM,那么这个占空比duty=Pulse / Counter Period)
CH Polarity:通道极性(例如你要实现呼吸灯,而由原理图得知,当io口为低电平时灯亮,那么这个极性就要设置成低Low)
频率:
Fpwm =Tclk / ((arr+1) / (psc+1))(单位:Hz)
- arr 是计数器值
- Tclk就是前面在Clock Configuration中设置的72MHz
- psc 是预分频值
f = 72M / ( 72-1 + 1 ) / ( 1000-1 + 1 ) = 2000
占空比50,利用设置pulse=500(Counter Period=1000)产生的波形,

占空比 = Pulse / Period,这里Period设的1000,Pulse 可以通过上面函数设置,也可以在PWM初始化函数设置。
或者用函数直接修改(这样可以实现占空比变化的一系列PWM波)
// 修改timx的通道y的pwm比较值为z,即修改占空比 __HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z);
例:

初始化:
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4); /* USER CODE END 2 */
示波器现象(不会上传视频,用四张图片凑合着看,蓝色箭头表示移动方向,即向右时处在高电平的时间占比逐渐增加(代码中表示为:pwm--)占空比减小(占空比指低电平时间占比)):




频率:
Fpwm =Tclk / ((arr+1) / (psc+1))(单位:Hz)
- arr 是计数器值
- psc 是预分频值
f = 72M / ( 72-1 + 1 ) / ( 1000-1 + 1 ) = 2000
相关函数:
// 使能timx的通道y HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y);
// 修改timx的通道y的pwm比较值为z,即修改占空比 __HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z);

参考资料:
原理可以看第一个
(36条消息) 【STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)_Z小旋的博客-CSDN博客_stm32hal库pwm

浙公网安备 33010602011771号