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

STM32对HAL库的PWM控制 - 无乐不作丶 - 博客园 (cnblogs.com)

posted @ 2022-07-04 17:10  grey_electron  阅读(2789)  评论(0)    收藏  举报